Excelastuces

Logo Excelastuces

Comment actualiser un tableau croisé dynamique automatiquement en VBA

Nous avons réaliser un article sur les tableaux croisés dynamiques (TCD) qui s’adresse aux débutants.

Vous pouvez le consulter grâce à ce lien :

Comment utiliser un tableau croisé dynamique

Pour les moins débutants, voici une petite astuce en VBA pour actualiser un tableau croisé dynamique automatiquement dès que vous modifiez une donnée brute.

Normalement, vous faites un clique droit sur votre tableau et vous faites « Actualiser ». Cette opération peut devenir longue et pénible surtout si vous modifiez souvent vos données.

EXEMPLE

Suivant le TCD ci-dessous

i3.png

Que nous avons créé à partir des données ci-dessous

i2.png

Nous récupérons sur la case C9 le résultat du TCD (Feuil2!B12)

Note: Nous changerons le nom des onglets plus tard

Nous voyons que si on modifie l’age de Ludovic par exemple, le total des âges ne sera pas mis à jour automatiquement.

i5.png

Le total reste à 212!

Il faudra faire clique droit sur le TCD pour la mise à jour.

i4.png

Bon ok cela fonctionne très bien en faisant comme cela.

De façon automatique cela vous intéresse? Oui sinon vous ne seriez pas là

MISE EN PLACE

Retourner sur votre TCD et faites clique droit dessus

i6.png

Cliquer sur « Options du tableau croisé dynamique… »

Nous allons lui donner un Nom qui sera utilisé dans notre code VBA
► nous le nommons « TCD »

i7.png

Cliquer sur « OK »

Pour bien comprendre le code VBA, nous allons aussi renommer les onglets de notre classeur.

Pour les données ► Onglet « Données »

Pour le TCD ► Onglet « Tableau »

i8.png

CODE VBA

Private Sub Worksheet_Change(ByVal Target As Excel.Range)

Application.EnableEvents = False
Sheets("Tableau").PivotTables("TCD").RefreshTable
Application.EnableEvents = True

End Sub

Voici ce que cela doit donner dans votre éditeur VBA

Noter bien que nous mettons les ligne de codes dans la Feuil2(Données)

Cela ne fonctionnera pas sinon!

i9.png

La ligne Sheets(« Tableau »).PivotTables(« TCD »).RefreshTable est importante.

Elle donne l’endroit ou se trouve votre TCD et son Nom.

Sheets(« Tableau ») ► Pour le nom de l’onglet

PivotTables(« TCD ») ► Pour le nom du TCD que vous lui avez donné précédement.

RESULTAT

Maintenant à chaque fois que vous allez changer une donnée brute, votre TCD sera mise à jour automatiquement sans autres interventions de votre part.

i10.png

Bien sur cela s’appliquera à toutes vos données présentent sur le TCD (pas seulement l’âge de Ludovic!)

ATTENTION : N’oublier pas d’enregistrer votre fichier avec prise en charge des macros

Il n’est pas rare que si vous faites beaucoup de modifications sur votre fichier cela ne fonctionne pas correctement. Dans ce cas corriger votre code, sauvegarder votre travail et relancer le fichier.

10 réflexions sur “Comment actualiser un tableau croisé dynamique automatiquement en VBA”

  1. I have noticed you don’t monetize excelastuces.fr, don’t waste your
    traffic, you can earn additional cash every month with new monetization method.

    This is the best adsense alternative for any type of website (they approve all sites), for
    more details simply search in gooogle: murgrabia’s tools

    1. Thanks for your feedback
      currently we just want to share our tips
      The monetization will happen because it will be used to strengthen our site and allow us to stay as long as possible on the net.
      Thank you again for your comment. However, we are a French site thanks for making a small effort to comment in French;)

      Merci pour votre retour
      actuellement nous souhaitons juste partager nos astuces
      La monétisation arrivera car il sera utilisé pour renforcer notre site et nous permettre de rester le plus longtemps possible sur le net.
      Encore merci pour votre commentaire. Toutefois, nous sommes un site francophone merci de faire un petit effort pour commenter en français 😉

  2. Bonjour,
    merci pour cette article, c’est exactement ce que je recherche.
    j’ai suivis toute la procédure, à la lettre, mon fichier prend en charge les macros.
    Mes onglets ont le même nom que les vôtres, tout est identique.
    (la seule chose qui diffère que que chez moi c’est la feuil1 qui s’appelle (Données) et la feuil2 qui s’appelle (Tableau))
    Je reprend tout à zéro, création du tableau dynamique, création du code VBA sur l’ongle « données », etc…
    Une fois tout validé, quand je change une valeur dans l’onglet « données » le tableau ne se met pas à jour.
    Je remet l’ancienne valeur, enregistre le fichier et le ferme.
    Lorsque je rouvre celui-ci, je tente de modifier une valeur, une fenêtre s’ouvre::
    nom de fenêtre: Microsoft Visual Basic
    Erreur d’exécution ‘9’:
    L’indice n’appartient pas à la sélection.
    La fenêtre me propose comme choix: Fin ou Débogage ou Aide
    L’option Débogage m’amène sur la fenêtre VBA et me souligne en jaune la ligne: Sheets(« Tableau »).PivotTables(« TCD »).RefreshTable
    Auriez vous une solution à mon problème?
    Cordialement
    Romain

  3. Bonjour,
    Merci beaucoup pour ces explications limpides. Le vba est décidément un langage des plus obscures pour moi haha
    Je débute un peu et quelque chose m’échappe : de mon interprétation la macro est déclarée mais elle n’est appelé à aucun moment comment s’exécute elle alors ? D’ailleurs de mon côté cela ne fonctionne pas …

    1. Hélas je me suis rendu compte de mon erreur en publiant mon commentaire, j’avais déclaré la macro dans le mauvais onglet !
      Déjà que c’est servi sur un plateau d’argent on ne peux pas me permettre de telles erreurs d’inattention.
      J’ai regardé la doc concernant les évènements sur les worksheets cela répond également à ma question.

      Merci encore : )

  4. Bonjour, c’est presque ce que je recherche.

    Comment dans le code VBA, je peux lui faire comprendre qu’il faut actualiser plusieurs TCD d’un même tableau ? une virgule entre les différents noms des TCD de cette manière PivotTables(« TCD », « TCD2 ») ?

    Merci pour votre aide !

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Retour en haut