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