Selectionner certains Pivotitems

Fermé
a51432 Messages postés 37 Date d'inscription lundi 13 juillet 2015 Statut Membre Dernière intervention 20 octobre 2015 - Modifié par NHenry le 14/08/2015 à 18:55
a51432 Messages postés 37 Date d'inscription lundi 13 juillet 2015 Statut Membre Dernière intervention 20 octobre 2015 - 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 lundi 13 juillet 2015 Statut Membre Dernière intervention 20 octobre 2015 1
14 août 2015 à 17:22
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 mercredi 26 mars 2014 Statut Membre Dernière intervention 7 mars 2019 26
Modifié par PlacageGranby le 14/08/2015 à 16:50
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