Selectionner certains Pivotitems
a51432
Messages postés
39
Statut
Membre
-
a51432 Messages postés 39 Statut Membre -
a51432 Messages postés 39 Statut Membre -
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 :
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,
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
-
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 -
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.