Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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...

Encore Merci.

A+
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…