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

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

  • Classeur1.xlsx
    15.3 KB · Affichages: 121
  • Classeur1.xlsx
    15.3 KB · Affichages: 120
  • Classeur1.xlsx
    15.3 KB · Affichages: 129
Dernière édition:
C

Compte Supprimé 979

Guest
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

  • Safety147_Exemple.xlsm
    22.3 KB · Affichages: 146
  • Safety147_Exemple.xlsm
    22.3 KB · Affichages: 160
  • Safety147_Exemple.xlsm
    22.3 KB · Affichages: 160
Dernière modification par un modérateur:

safety147

XLDnaute Nouveau
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

  • Safety147_Exemple.xlsm
    23.5 KB · Affichages: 108
  • Safety147_Exemple.xlsm
    23.5 KB · Affichages: 115

safety147

XLDnaute Nouveau
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... :eek:

Encore Merci.

A+
 

Discussions similaires