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