Bonjour à tous

Je dois améliorer un code VBA dont le but est d'actualiser les données d'un onglet alimentant des TCD et des graphiques liés aux TCD.

Il y a beaucoup de données et de TCD/Graphiques de TCD, ce qui fait que le code peut mettre 20-30mn à tourner.

Nous avons remarqué que ce qui prend du temps dans le code VBA est le "rafraîchissement" des TCD et graphiques de TCD.

Le simple fait de remplacer :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
ActiveWorkbook.RefreshAll
par

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
    Windows("box reporting TEST.xlsx").Activate
   Dim tblPivot As PivotTable
 For Each tblPivot In ActiveWorkbook.PivotTables
     tblPivot.RefreshTable
     tblPivot.Update
  Next tblPivot
 
  ActiveWorkbook.RefreshAll
(Donc traiter en amont l'actualisation des TCD avant de tout rafraîchir) avait divisé le temps de traitement par deux.

On essaie -en vain pour l'instant- de trouver l'équivalent de la formule ci-dessus pour mettre à jour tous les graphiques et ne plus utiliser le

Code : Sélectionner tout - Visualiser dans une fenêtre à part
ActiveWorkbook.RefreshAll
On a tenté cela :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
Dim chr As ChartObject
   For Each chr In ActiveWorkbook.ChartObjects
  chr.PivotLayout.PivotTable.PivotCache.Refresh
   Next chr
Mais on se retrouve avec une erreur 438 sur la ligne " For Each chr In ActiveWorkbook.ChartObjects"

Si vous avez une solution, nous serions preneurs

Merci à vous pour votre aide,

Thomas