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 = True

Une remarque : pas sûr que ton rafraîchissement de tous les TCD marche :

Worksheets("Reporting").PivotTables(1).RefreshTable

Dans ce code, tu ne mets à jour que le premier TCD.

Essaie plutôt avec un :

ActiveWorkbook.RefreshAll

Rechercher des sujets similaires à "filtrage tcd macro"