"Défilter" un TCD rapidement et le "refiltrer" rapidement pour un seul élément

leblesois45 - 12 oct. 2012 à 16:20
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 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 ?

Un grand merci d'avance

Coridalement

1 réponse

cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
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
0
Rejoignez-nous