Afficher/Masquer des items d'un TCD via la valeur d'une liste déroulante

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Yoshibachi

XLDnaute Nouveau
Bonjour à tous,

J'espère que vous allez bien. (Ouai, c'est important quand même 🙂)

Je me prends la tête avec un fichier pour analyser mes ventes.

C'est en gros un arbre montrant d'où viennent les volumes vendus.

J'ai une macro qui permet de filtrer un TCD sur une dimension à partir de la valeur d'une cellule dans une liste déroulante. Il fonctionne très bien.

Mais je n'arrive pas à faire la même chose pour afficher/masquer des items sur une autre dimension.

En gros je voudrais que l'item qui correspond à la valeur dans la liste déroulante soit en .visible = true
et tous les autres en .visible = False.


Je suis parti dans divers essais infructueux, car ma maîtrise de VBA n'est pas acquise, je commence à apprendre...

VB:
Sub Majgeo()
Dim monPivIt As Object, Mavariable
Mavariable = Sheets("PM").Range("AL6").Value
Application.ScreenUpdating = False
With Sheets("Sélection").PivotTables("Tableau croisé dynamique1").PivotFields("Geographie")
For Each monPivIt In .PivotItems
monPivIt.Visible = False
Next
On Error Resume Next
For Each monPivIt In .PivotItems
If monPivIt.Name = Mavariable Then monPivIt.Visible = True
Next
End With
Application.ScreenUpdating = True
    Sheets("PM").Select
End Sub
Afin que vous puissiez mieux comprendre mon problème, je vous ai mis ci-joint le fichier en question.

Merci d'avance pour votre aide et vos réponses.
 

Pièces jointes

Dernière édition:
Salut YOSHIBACHI,
peut être comme ceci
Code:
Sub AfficheProduitTCD()
    xProduit = Sheets("PM").[AL6]
    With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Geographie")
        For I = 1 To .PivotItems.Count
            If .PivotItems(I).Name = xProduit Then
                .PivotItems(I).Visible = True
            Else
                .PivotItems(I).Visible = False
            End If
        Next I
    End With
End Sub
@+ Lolote83
 
Bonjour à tous
Pour ne pas générer d'erreur !
Sub Majgeo()
Dim monPivIt As Object, Mavariable
Mavariable = Sheets("PM").Range("AL6").Value
Application.ScreenUpdating = False
With Sheets("Sélection").PivotTables("Tableau croisé dynamique1").PivotFields("Geographie")
.PivotItems(Mavariable).Visible = True 'nécessaire pour qu'au moin une valeur soit visible
For Each monPivIt In .PivotItems
If monPivIt <> Mavariable Then monPivIt.Visible = False Else monPivIt.Visible = True
Next

Application.ScreenUpdating = True

End With
Sheets("sélection").Activate
End Sub
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour