VBA -TCD - Cocher PivotFields.PiovotItem sur tous les TCD d'une feuille

Bonjour,

Je tourne un peu en rond sur mon code VBA, lol

En Effet, ma feuille "TabTest" comporte plusieurs TCD, les sources peuvent être differentes.

Et lors de l'actualisation des TCD, la selection des PivotItem se modifie.

je souhaiterai que la macro coche pour tous les TCD de cette meme feuille le : PivotItems("CTG").Visible = True

Ci dessous mon code VBA qui ne fonctionne pas:

Dim ws As Worksheet, pt As PivotTable

For Each ws In ActiveWorkbook.Worksheets

If ws.Name = "Tabtest" Then

For Each pt In ws.PivotTables.PivotFields("Type VHL")

pt.PivotItems("CTG").Visible = True

pt.RefreshTable

Next pt

End If

Next ws

Par avance merci de votre aide précieuse

Bonjour,

à tester,

Sub test()
Dim ws As Worksheet, pt As PivotTable
For Each ws In ActiveWorkbook.Worksheets
    If ws.Name = "Tabtest" Then
      For i = 1 To ws.PivotTables.Count
        For Each pt In ws.PivotTables(i).PivotFields("Type VHL")
            pt.PivotItems("CTG").Visible = True
            pt.RefreshTable
        Next pt
      Next i
    End If
Next ws
End Sub

bonjour,

merci de vous pencher sur mon cas

j'ai une erreur d'execution 438 : Propriété ou methode non gerée par cet objet à ce niveau:

For Each pt In ws.PivotTables(i).PivotFields("Type VHL")

modifier comme ça

For Each pt In ws.PivotTables(i).PivotFields("Type VHL").Items

idem

meme erreur

re,

le champ a bien le nom "Type VHL" ?

peux-tu joindre ton fichier ?

Bonjour,

Une autre proposition à étudier.

Attention ! pas de gestion d'erreur...

Public Sub TestPasConvaincu()
Dim ws As Worksheet, pt As PivotTable
    Set ws = ActiveWorkbook.Worksheets("Tabtest")
    For Each pt In ws.PivotTables
        With pt
            .RefreshTable
            With .PivotFields("Type VHL")
                .ClearAllFilters
                .PivotItems("CTG").Visible = True
            End With
        End With
    Next pt
End Sub

re,

ci joint le fichier

encore merci pour tout

Bonjour à tous

Multipost...

                .ClearAllFilters
                .PivotItems("CTG").Visible = True

Le ClearAllFilters affiche tout donc CTG est visible : il faut masquer tout le reste un par un

For each pi in .pivotitems
    if Pi.Caption<>"CTG" then pi.visible=false
Next pi

re,

à tester,

Sub Test()
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
Set sh = Sheets("Tabtest")
For i = sh.PivotTables.Count To 1 Step -1
    For j = sh.PivotTables(i).PivotFields.Count To 1 Step -1
        sh.PivotTables(i).PivotFields(j).ClearAllFilters
    Next j
Next i
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
MsgBox "Opération terminé"
End Sub

Bonjour,

Une autre proposition à étudier.

Sinon, fais le ménage dans ta source de données. Et mets les données sous forme de tableau.

Cdlt.

Public Sub Update_PTs()
Dim ws As Worksheet, pt As PivotTable, i As Long
Set ws = Worksheets("Tabtest")
    ws.PivotTables(1).PivotCache.Refresh
    For i = 2 To ws.PivotTables.Count
        With ws.PivotTables(i)
            .ManualUpdate = True
            With .PageFields("Type VHL")
                .ClearAllFilters
                '.CurrentPage = "CTG"
                'ou
                .CurrentPage = ws.Cells(1, 2).Value
            End With
            .ManualUpdate = False
        End With
    Next i
End Sub

bonjour i20100,

la macro fonctionne bien pour afficher tous les pivots PivotFields("Type VHL")

mais elle ne coche pas .PivotItems("CTG").Visible = True dans tous les TCD

Merci

Bonjour Jean Eric,

Merci ta solution fonctionne parfaitement, j'avais pensé à la solution du tableau mais le source provient d'une solution client externe .

Merci pour tout et merci à tous

RE

@ManneMax

A noter que je t'avais déjà proposé hier d'utiliser currentPage sur un autre forum où tu n'es pas reparu...

Décidément la netiquette est bien en perdition ...

Rechercher des sujets similaires à "vba tcd cocher pivotfields piovotitem tous feuille"