Selectionner certains Pivotitems

Bonjour,

J'ai un fichier contenant un TCD. J'aimerai pouvoir cocher certains "PivotItems" d'un "PivotFields" via VBA.

Pour cela j'ai essayé le code suivant qui ne fonctionne pas :

Sub TCD()

Application.ScreenUpdating = False

Dim TC()
Dim z
Dim monPivIt As Object

TC = Array("TOTO", "TITI", "TATA", "TETE")
    
With Workbooks("Classeur").Sheets("Feuille").PivotTables("TCD").PivotFields("MOT")
    .ClearAllFilters
    For Each monPivIt In .PivotItems
        For z = LBound(TC) To UBound(TC)
            If monPivIt.Name <> z Then
                monPivIt.Visible = False
            Else
                monPivIt.Visible = True
                Exit For
            End If
        Next z
    Next monPivIt
End With

Application.ScreenUpdating = True

End Sub


J'ai bien une solution qui pourrait fonctionner avec des "OR" à répétition mais la liste de "PivotItems" à cocher est en réalité bien plus longue que dans l'"Array" du code ci-dessus. Si quelqu'un a une meilleure solution, je suis preneur !

Merci par avance de votre aide !

Cordialement,

2 réponses

  1. Merci pour ta réponse.

    J'ai effectivement testé avec les msgbox et cela me renvoit bien les noms correctement. Il fallait également utiliser TC(z) plutot que z pour renvoyer le mot et non la position dans l'Array.

    Le code me déselectionne bien les PivotItems à décocher et fonctionne pour le premier mot de l'Array mais il plante dès le 2ème mot à seléctionner sur la ligne désignée dans le code ci-dessous (Erreur 1004 : impossible de définir la propriété Visible de la classe PivotItems)

    Code :

    Sub TCD()

    Application.ScreenUpdating = False

    Dim TC()
    Dim z
    Dim monPivIt As Object

    TC = Array("TOTO", "TITI", "TATA", "TETE")

    With Workbooks("Classeur").Sheets("Feuille").PivotTables("TCD").PivotFields("MOT")
    .ClearAllFilters
    For Each monPivIt In .PivotItems
    For z = LBound(TC) To UBound(TC)
    If monPivIt <> TC(z) Then
    monPivIt.Visible = False
    Else
    If monPivIt.Visible = False Then
    monPivIt.Visible = True 'Ligne qui bug
    Exit For
    Else
    Exit For
    End If
    End If
    Next z
    Next monPivIt
    End With

    Application.ScreenUpdating = True

    End Sub
    1
    1. Bonjour,

      Si le IF ne retourne pas les résultat prévu. faire un test sur les éléments qui sont évalué.

      For Each monPivIt In .PivotItems
              For z = LBound(TC) To UBound(TC)
                    Msgbox monPivIt.Name
                    Msgbox z
                    If monPivIt.Name <> z Then


      Comme ca au moins tu as des pistes pour trouver le problème.

      P.S. peut-être essayer un msgbox TC(z) pour voir si c'est plus adapté à ton besoin.
      0