"Défilter" un TCD rapidement et le "refiltrer" rapidement pour un seul élément
leblesois45
-
12 oct. 2012 à 16:20
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 2018
-
12 oct. 2012 à 17:40
Bonjour,
j'ai étudié votre forum et malheureusement, je n'ai pas trouvé LA solution idéale, d'ou mon message.
Je souhaite "dé filtrer" un TCD en VBA sous excel en une seule manipulation pour la "refiltrer" sauf pour une seule variable
En faisant comme ci-dessous, cela se fait très (trop) lentement ...
Dim monPivIt As Object, Mavariable
Mavariable = "BNP "
Application.ScreenUpdating = False
With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("ETAB")
For Each monPivIt In .PivotItems
monPivIt.Visible = True
Next
On Error Resume Next
For Each monPivIt In .PivotItems
If monPivIt.Name <> Mavariable Then monPivIt.Visible = False
Next
End With
Application.ScreenUpdating = True
Comment faire pour que cela soit quasiment immédiat, comme lorsqu'on le fait manuellement en sélectionnant nous même les items dans le TCD ?
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 12 oct. 2012 à 17:40
Bonjour,
Je ne pense pas qu'il soit possible d'aller plus vite que ceci:
For Each monPivIt In .PivotItems
If monPivIt.Name = Mavariable Then
monPivIt.Visible = True
Else
monPivIt.Visible = False
End If
Next
et tu laisses tomber la partie précédente
For Each monPivIt In .PivotItems
monPivIt.Visible = True
Next
Le problème, comme tu le sais probablement, est que le filtre doit avoir au moins une valeur sélectionnée. Il faut donc s'assurer que la variable "MaVariable" soit valide.
Personnellement, j'utilise une boucle comme suit, mais ce n'est probablement pas plus rapide...
For I = 1 To .PivotItems.Count
If .PivotItems.Item(I) = MaVariable Then
.PivotItems.Item(I).Visible = True
Else
.PivotItems.Item(I).Visible = False
End If
Next
MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI