88 votes

Rafraîchir tous les tableaux croisés dynamiques de mon classeur Excel avec une macro

J'ai un classeur contenant 20 tableaux croisés dynamiques différents. Existe-t-il un moyen simple de trouver tous les tableaux croisés dynamiques et de les rafraîchir en VBA ?

178voto

GSerg Points 33571

Oui.

ThisWorkbook.RefreshAll

Ou, si votre version d'Excel est assez ancienne,

Dim Sheet as WorkSheet, Pivot as PivotTable
For Each Sheet in ThisWorkbook.WorkSheets
    For Each Pivot in Sheet.PivotTables
        Pivot.RefreshTable
        Pivot.Update
    Next
Next

18 votes

Ooh, un downvote. Après plus de cinq ans, c'est un changement rafraîchissant ;)

3 votes

En effet... c'est rafraîchissant... quelqu'un essaie même de fermer cette question comme hors-sujet... Ce n'est pas comme si j'avais demandé de le faire uniquement en utilisant la souris ou autre chose :D

3 votes

Fantastique, j'ai dû l'utiliser car je voulais rafraîchir les pivots APRÈS avoir obtenu de nouvelles données externes, donc ThisWorkbook.RefreshAll ne fonctionnait pas pour moi.

26voto

Robert Mearns Points 5127

Ce code VBA rafraîchira tous les tableaux/graphiques croisés dynamiques du classeur.

Sub RefreshAllPivotTables()

Dim PT As PivotTable
Dim WS As Worksheet

    For Each WS In ThisWorkbook.Worksheets

        For Each PT In WS.PivotTables
          PT.RefreshTable
        Next PT

    Next WS

End Sub

Il existe une autre option non programmatique :

  • Cliquez avec le bouton droit de la souris sur chaque tableau croisé dynamique
  • Sélectionnez les options de la table
  • Cochez la case Rafraîchir à l'ouverture option.
  • Cliquez sur le bouton OK

Cela rafraîchira le tableau croisé dynamique chaque fois que le classeur sera ouvert.

20voto

Kevin Points 41

ActiveWorkbook.RefreshAll rafraîchit tout, non seulement les tableaux croisés dynamiques mais aussi les requêtes ODBC. J'ai quelques requêtes VBA qui font référence à des connexions de données et l'utilisation de cette option provoque un crash car la commande exécute les connexions de données sans les détails fournis par le VBA.

Je recommande cette option si vous voulez seulement que les pivots soient rafraîchis.

Sub RefreshPivotTables()     
  Dim pivotTable As PivotTable     
  For Each pivotTable In ActiveSheet.PivotTables         
    pivotTable.RefreshTable     
  Next 
End Sub

1 votes

Vérifiez la réponse la plus votée la deuxième approche est en fait ce que vous avez essayé ici mais pour toute la flèche pas seulement pour la feuille active dans les deux cas, cela dépend vraiment et je n'y ai pas touché depuis

0 votes

Que faire si le tableau croisé dynamique ne se trouve pas dans la feuille active ?

8voto

Dans certaines circonstances, vous pouvez vouloir faire la différence entre un PivotTable et son PivotCache. Le cache a sa propre méthode de rafraîchissement et ses propres collections. Nous aurions donc pu rafraîchir tous les PivotCaches au lieu des PivotTables.

La différence ? Lorsque vous créez un nouveau tableau croisé dynamique, on vous demande si vous voulez qu'il soit basé sur un tableau précédent. Si vous dites non, ce tableau croisé dynamique obtient son propre cache et double la taille des données sources. Si vous dites oui, vous gardez votre WorkBook petit, mais vous ajoutez à une collection de tableaux croisés dynamiques qui partagent un cache unique. La collection entière est rafraîchie lorsque vous rafraîchissez un tableau croisé dynamique de cette collection. Vous pouvez donc imaginer la différence entre le rafraîchissement de chaque cache dans le WorkBook et le rafraîchissement de chaque tableau croisé dynamique dans le WorkBook.

5voto

Il existe une option d'actualisation de tous les éléments dans la barre d'outils du tableau croisé dynamique. Cela suffit. Il n'est pas nécessaire de faire autre chose.

Appuyez sur ctrl+alt+F5

3 votes

Je ne suis pas d'accord. Et si Lipis veut automatiser le processus de rafraîchissement, par exemple, chaque fois qu'une cellule est modifiée ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X