Aller au contenu
Nathan Fauconnier, profil LinkedIn (nouvel onglet)

Actualiser un tableau croisé dynamique automatiquement

Un TCD ne se met pas à jour tout seul. Il suffit d’oublier un clic pour présenter des chiffres périmés.

La démonstration en vidéo

Vidéo publiée sur LinkedIn, chargée seulement si vous cliquez dessus. Au clic, LinkedIn peut déposer des traceurs sur votre appareil : en savoir plus.

Thème
VBA
Niveau
Intermédiaire
Publiée le
Fonctions et notions
  • Worksheet_SelectionChange
  • PivotCache.Refresh
  • RefreshAll
Pour aller plus loin
Formation Macros VBA

L’explication

Comment faire, pas à pas

C’est l’erreur la plus fréquente et la plus coûteuse sur un tableau de bord Excel : la source a été complétée, le tableau croisé affiche encore les valeurs de la semaine dernière, et personne ne s’en aperçoit avant la réunion.

Un événement de feuille règle la question, et le choix de l’événement compte autant que le code. Placé sur la feuille qui porte le tableau croisé, l’événement de changement de sélection se déclenche dès qu’on vient regarder le tableau, c’est-à-dire exactement au moment où il doit être à jour, et pas à chaque frappe dans la table source.

La méthode employée mérite elle aussi l’attention. PivotCache.Refresh relit les données de la source, ce qui est indispensable pour voir apparaître les lignes ajoutées. RefreshTable, souvent proposée à sa place, se contente de redessiner le tableau à partir du cache existant : les nouvelles lignes n’apparaîtraient pas.

Pour tout actualiser d’un coup (tableaux croisés, requêtes Power Query et connexions externes), ThisWorkbook.RefreshAll fait le travail en une ligne, au prix d’un rafraîchissement complet.

À savoir Le nom du tableau croisé est écrit en dur dans le code : le renommer dans Excel casse la macro, sans message d’erreur explicite. Et comme toute macro, cela suppose un classeur .xlsm avec les macros autorisées.

Le code VBA Dans le module de la feuille qui contient le tableau croisé, et non dans ThisWorkbook, ni dans un module standard. Sans qualificateur, PivotTables désigne les tableaux croisés de cette feuille-là.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

'Pour actualiser un TCD en particulier
PivotTables("TCD des Primes").PivotCache.Refresh

End Sub

Pour aller plus loin

D’autres astuces à découvrir

Toutes les astuces Formation Macros VBA

Prendre contact

Vous souhaitez vous former ou former vos équipes ?

Votre contexte suffit pour démarrer : nombre de personnes concernées, outils en place, échéance. Je réponds avec une proposition de programme et un devis.

En présentiel Selon votre localisation
À distance Toute la France
Financement souhaité
Contact