XL 2019 actualisation de plusieurs tableaux croisés dynamiques vba

loreak

XLDnaute Nouveau
Bonjour à tous,

J'ai à actualiser plusieurs tableaux croisés dynamiques situés sur plusieurs feuilles. Le problèmes est le code, il s'exécute en 10 min qui est très long. (actualise les 100 tcd en un seul coup), (peut être changer le code pour actualiser feuille par feuille mais je sais pas comment on fait )
Voici le code :

VB:
Public Sub ActualisationApresSasie()
Dim ws As Worksheet
Dim pt As PivotTable



Application.Calculation = xlCalculationManual
    Application.ScreenUpdating = False
    

    For Each ws In ActiveWorkbook.Worksheets
        For Each pt In ws.PivotTables
            pt.RefreshTable
        Next
    Next
Application.Calculation = xlCalculationAutomatic


Sheets("base de données").Activate

End Sub

Merci d'avance :)
 

Hasco

XLDnaute Barbatruc
Repose en paix
bonjour,

Mettez cette macro évènementielle dans le module de code du classeur (ThisWorkbook), elle se déclenche lorsqu'une feuille du classeur est activée. Si cette dernière contient des TCD, il seront rafraîchis.

N'oubliez pas de supprimer les appels à l'autre macros dans vos modules.

VB:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    Dim pt As PivotTable
    '
    ' Si sh est bien une feuille de travail et non une feuille graphique ou autre chose
    If TypeOf Sh Is Worksheet Then
        ' S'il la feuille contient des TCD alors ils seront rafraîchis
        For Each pt In Sh.PivotTables
            pt.RefreshTable
        Next
    End If
End Sub


Pour ouvrir le module de code ThisWorkbook :
Ouvrir l'éditeur de macro, ALT+F11
Double-cliquez sur son nom dans la liste de l'explorateur de projet. Si ce dernier (voir photo) n'est pas ouvert dans l'éditeur de macro faire CTRL+R ou menu affichage

1658994024444.png
 

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour
Pourquoi boucler sur les pivots et ne pas utiliser
VB:
Public Sub ActualisationApresSasie()
ActiveWorkbook.RefreshAll
End Sub
Cordialement

Bonjour @Efgé

Justement parce que la demande était :
...actualiser feuille par feuille mais je sais pas comment on fait
et que .RefreshAll Actualise toutes les plages de données externes et les rapports de tableau croisé dynamique dans le classeur spécifié.

merci pour ta réponse, cependant le problème est que ton code fait crash l'application excel et le fichier ce ferme tout seul .

Si c'est à moi que vous adressez cette réponse, je ne sais pas comment vous avez implémenter la procédure évènementielle, si elle n'interfère pas avec une autre etc...

Si vous faites un click-droit sur un tcd puis 'Actualiser' est-ce qu'il y en a qui plante ?

Bref, on ne sait rien de votre fichier, il n'est que possible de proposer des solutions classiques en fonction de ce que vous dites.

Mais si votre fichier est vraiment trop lourd à calculer et commence à planter pour un oui ou un non il est peut-être temps de remettre l'ensemble à plat.

Cordialement
 

Efgé

XLDnaute Barbatruc
Re
Bonjour @Hasco

Je sais bien, mais actualiser tous les TCD un par ou tous en même temps, je ne voyais pas la différence.
Par contre
j'ai essayer ce code-ci , il n'actualise pas les données et je ne sais pas pourquoi
me surprend plus.
d'ailleurs, comme tu le soulignes, la demande est très floue puisqu'il y a aussi
(actualise les 100 tcd en un seul coup),
alors que le code donné au poste 1 boucle...
Cordialement
 

Hasco

XLDnaute Barbatruc
Repose en paix
Re,

Avant d'aller de tomber d'inanition et d'aller manger :

Un fichier excel avec 100 tcd est anti-productif, certainement trop lourd et sûrement ingérable.
Remettez tout à plat et utilisez des fichiers différents et nourrissez vos tcd par power query.

Cordialement
 

Discussions similaires

Statistiques des forums

Discussions
311 720
Messages
2 081 910
Membres
101 837
dernier inscrit
Ugo