Selectionner certains Pivotitems

a51432 Messages postés 37 Date d'inscription   Statut Membre Dernière intervention   -  
a51432 Messages postés 37 Date d'inscription   Statut Membre Dernière intervention   - 14 août 2015 à 17:22
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

a51432 Messages postés 37 Date d'inscription   Statut Membre Dernière intervention   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
PlacageGranby Messages postés 393 Date d'inscription   Statut Membre Dernière intervention   26
 
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