Automatiser la MAJ d'un tableau croisé dynamique en VBA

  • Initiateur de la discussion Initiateur de la discussion safety147
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

safety147

XLDnaute Nouveau
Bonjour,

Je suis en train de créer un tableau de bord mensuel se mettant à jour quotidiennement via des Tableaux Croisés Dynamique (TCD).

Ma problématique :
- automatiser la mise à jour des filtres dans mes TCD.

Ce que je n'arrive pas à faire :
Automatiser la mise à jour des filtres du rapport via une liste pré-définit.

Exemple :
Liste des noms à activer dans mon filtre :
- titi
- tata
- toto
- tutu

Problème, le 5 du mois "tutu" n'existe pas dans ma plage de données sources et j'ai une erreur VBA qui apparaît.

Voici le code VBA utilisé :
Sub Macro3()
ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Groupe"). _
CurrentPage = "(All)"
With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Groupe")
.PivotItems("toto").Visible = True
.PivotItems("titi").Visible = True
.PivotItems("tata").Visible = True
.PivotItems("tutu").Visible = True
End With
End Sub


Ma question (enfin me direz-vous) :
Est-il possible de définir une liste de "nom" dans une autre feuille pour automatiser la mise à jour du filtre (ce qui m'arrangerait car j'ai plus de 50 TCD avec des filtres différents), ou une solution avec une modification de mon code ?

En vous remerciant par avance de votre aide.

En pièce jointe, ce que je voudrais faire.
Encore merci.
 

Pièces jointes

Dernière édition:
Re : Automatiser la MAJ d'un tableau croisé dynamique en VBA

Bonsoir Safety147,

Pour ton problème 1 il suffit d'ajouter une gestion d'erreur dans le code
Pour la liste des noms, il suffit de définir une plage dans une autre feuille et d'utiliser son nom
Code:
Sub Macro3()  Dim Cel As Range
' Macro3 Macro
    ActiveSheet.PivotTables("Tableau croisé dynamique1") _
      .PivotFields("Groupe").CurrentPage = "(All)"
    On Error Resume Next
    With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Groupe")
      For Each Cel In Range("ListeNoms")
        .PivotItems(Cel.Value).Visible = True
      Next Cel
    End With
    On Error GoTo 0
End Sub

A+
 

Pièces jointes

Dernière modification par un modérateur:
Re : Automatiser la MAJ d'un tableau croisé dynamique en VBA

Re-bonjour BrunoM45,

Je n'ai pu m'empêcher de tester dès ce soir, et cela fonctionne à merveille : un grand merci car cela va me faire gagner un temps fou au quotidien.

D'où ma deuxième question :
Est-il possible d'avoir plusieurs listes dans une même feuille et de faire appel à cette liste par le nom donnée à la colonne.
Si je reprend ton fichier dans la feuille "Liste" :
- En A1 = Noms à Filter
- et j'ai ajouté en C3 = Date

Cela serait plus à facile à gérer, car j'ai une cinquantaine de TCD dans mon fichier excel.

Merci.
Regarde la pièce jointe Safety147_Exemple.xlsm
 

Pièces jointes

Re : Automatiser la MAJ d'un tableau croisé dynamique en VBA

Bonsoir BrunoM45,

Après avoir relu le code je me suis aperçu que "ListeNoms" faisait appel à une liste dans excel et non appel à une page.
Donc mon dernier post n'a pu lieu d'être.

Désolé pour ce néophisme... 😱

Encore Merci.

A+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour