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