Actualiser tous les graphiques d'un TCD SANS ActiveWorkbook.RefreshAll

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 :

ActiveWorkbook.RefreshAll

par

    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

ActiveWorkbook.RefreshAll

Si vous avez une solution, nous serions preneurs :)

Merci à vous pour votre aide,

Thomas

Bonjour,

as-tu essayé ceci

ActiveChart.PivotLayout.PivotTable.PivotCache.Refresh

Bonjour h2so4,

merci pour ton retour.

J'ai donc essayé ça :

Windows("box reporting TEST.xlsx").Activate
    Dim tblPivot As PivotTable
 For Each tblPivot In ActiveWorkbook.PivotTables
     tblPivot.RefreshTable
     tblPivot.Update
     ActiveChart.PivotLayout.PivotTable.PivotCache.Refresh
  Next tblPivot

Mais les graphiques ne se sont pas mis à jour.

Quand j'essaie ce code :

 Dim chr As ChartObject
   For Each chr In ActiveWorkbook.ChartObjects
   ActiveChart.PivotLayout.PivotTable.PivotCache.Refresh
   Next chr

J'obtiens ce message d'erreur :

image image

Où est-ce que je fais une erreur ?

Merci d'avance

rebonjour,

j'aurais plutôt fait ainsi

Dim chr As ChartObject
   For Each chr In ActiveWorkbook.ChartObjects
  chr.PivotLayout.PivotTable.PivotCache.Refresh
   Next chr

rebonjour,

J'ai essayé, malheureux, toujours cette erreur 438 sur la même ligne :

image

Voyez-vous une alternative pour cette ligne ? Merci

re-bonjour,

peut-être ainsi

Dim chr As ChartObject
   For Each chr In ActiveWorkbook.ChartObjects
  chr.chart.PivotLayout.PivotTable.PivotCache.Refresh
   Next chr

Même problème :(

Je me permets de mettre le code complet si ça peut aider

Merci d'avance si vous avez une autre idée...

Sub MAJVAMELIOREE()

    Application.DisplayAlerts = False
    Application.ScreenUpdating = False

'
    Dim codeGroupe As Long
        codeGroupe = Workbooks("Console de chargement Box TEST2.xlsm").Sheets("Console").Range("M3")

' MAJ Base financement
    Workbooks.Open ("C:\BOX\Base Financement.xlsb")
    Sheets("base financement").Select
    Selection.AutoFilter
    'SI CODE VENDEUR ActiveSheet.Range("A1:BR1").AutoFilter Field:=1, Criteria1:=Array("6063028", "6539266"), Operator:=xlFilterValues
    ActiveSheet.Range("A1:BR1").AutoFilter Field:=41, Criteria1:=codeGroupe
    Range("A1:BR1").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy

        Workbooks.Open Filename:= _
        "C:\BOX\box reporting TEST.xlsx" _
        , ReadOnly:=True, local:=True

        Sheets("base financement").Select
    Range("A1").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("BS2").Select
    Range(Selection, Selection.End(xlToRight)).Select
    Selection.Copy
    Range("BS2").Select
    Range(Selection, Selection.End(xlDown)).Select
    Range(Selection, Selection.End(xlToRight)).Select
       Selection.PasteSpecial Paste:=xlPasteFormulasAndNumberFormats, Operation:= _
        xlNone, SkipBlanks:=False, Transpose:=False

   ' MAJ des TCD de la box et génération de la box
    Windows("box reporting TEST.xlsx").Activate
    Dim tblPivot As PivotTable
 For Each tblPivot In ActiveWorkbook.PivotTables
     tblPivot.RefreshTable
     tblPivot.Update
  Next tblPivot

  Dim chr As ChartObject
   For Each chr In ActiveWorkbook.ChartObjects
  chr.Chart.PivotLayout.PivotTable.PivotCache.Refresh
   Next chr

rebonjour,

activesheet au lieu de activeworkbook et il vaut mieux utiliser un autre nom de variable que chr (qui est un mot réservé vba)

   For Each it In ActiveSheet.ChartObjects
        it.Chart.PivotLayout.PivotTable.PivotCache.Refresh
    Next

Bingo !

Merci à toi et à ta persévérance

Thomas

Bonsoir,
Une, des questions bêtes ?
Le nombre de pivot caches, le nombre de TCDs et les graphiques sont-ils des graphiques croisés dynamiques ?
As-tu pensé à utiliser Power Query ?
Cdlt.

Je connais peu Power Query mais ça pourrait bien répondre à mon problème. Je vais étudier cela, merci beaucoup !

Rechercher des sujets similaires à "actualiser tous graphiques tcd activeworkbook refreshall"