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

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

  • arbre décompo vba.xlsm
    2.2 MB · Affichages: 30
Dernière édition:

Lolote83

XLDnaute Barbatruc
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
 

sousou

XLDnaute Barbatruc
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
 

Discussions similaires

Statistiques des forums

Discussions
312 023
Messages
2 084 715
Membres
102 637
dernier inscrit
TOTO33000