Filtrage TCD par macro
Hello,
Voici ce que je souhaite réaliser et mes points de blocage.
But :
A l'aide d'une cellule qui contient le nom d'un client(Cellule B2 de l'onglet "Reporting"), je souhaite filtrer 4 TCD pour avoir uniquement ce client.
Points techniques :
Chaque TCD possède un nom spécifique ("tcd_mco", "tcd_run", "tcd_severite" et "tcd_listing")
Le champ à filtrer s'appelle "Client - Projet".
Il se trouve en "étiquette de lignes" pour les trois premiers et en "Filtre du rapport" pour le dernier.
Le code est lancée par un bouton se trouvant dans l'onglet "Reporting"
Code :
Dim rng_client As Range
Dim tcd As PivotTable
Dim pvt_item As PivotItem
Set rng_client = Worksheets("Reporting").Range("B2:B2")
'rafraichissement des TCD
Worksheets("Reporting").PivotTables(1).RefreshTable
'Pour chaque tableau dans l'onglet "reporting"
For Each tcd In Worksheets("Reporting").PivotTables
'rafraichissmenet du TCD
'tcd.RefreshTable
'Filtrage du tcd suivant son nom
Select Case tcd.Value
'cas des TCD apellé tcd_mco, tcd_run, tcd_severite
Case "tcd_mco", "tcd_run", "tcd_severite"
'Je rends visible le filtre lié au nom du client
tcd.PivotFields("Client - Projet").PivotItems(rng_client.Cells(1, 1)).Visible = True
'Pour chaque éléments dans le TCD et le champ "Client - Projet", je rends les éléments
' invisible sauf celui qui correspond au nom du client.
For Each pvt_item In tcd.PivotFields("Client - Projet").PivotItems
'Si l'item du nom du client
If pvt_item.Value <> rng_client.Cells(1, 1) Then
'Alors visible
pvt_item.Visible = False
End If
Next
'cas des TCD apellé tcd_listing
Case "tcd_listing"
End Select
Next
Set rng_client = Nothing
Erreur rencontrée :
Sur la ligne ci-dessous, je rencontre l'erreur 1004 : Impossible de lire la propriété PivotFields de la classe PivotTable
tcd.PivotFields("Client - Projet").PivotItems(rng_client.Cells(1, 1)).Visible = True
Après recherche, tâtonnement et galère, je ne trouve pas l'origine de mon souci.
Est-ce que quelqu'un a une idée ?
Xglobe
Bonjour Xglobe,
Dans ce cas-là, il n'arrive pas à trouver les éléments que tu spécifies.
Soit il ne trouve pas le champs "Client - Projet", soit il ne trouve pas l'élément rng_client.Cells(1, 1)
Pour t'assurer que ton élément existe bien, essaie de regarder avant quelle est la valeur retournée. Par exemple :
Msgbox rng_client.Cells(1, 1)
tcd.PivotFields("Client - Projet").PivotItems(rng_client.Cells(1, 1)).Visible = TrueUne remarque : pas sûr que ton rafraîchissement de tous les TCD marche :
Worksheets("Reporting").PivotTables(1).RefreshTableDans ce code, tu ne mets à jour que le premier TCD.
Essaie plutôt avec un :
ActiveWorkbook.RefreshAll