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