Bonjour à tous,
J'ai une feuille avec plusieurs tableaux croisés dynamiques, dont un avec un filtre sur un élément qui possède plus de 850 occurrences.
Le tableau se nomme TcdData.
Dans une autre feuille, j'ai une liste déroulante me permettant le multi-choix, j'utilise ces choix pour filtrer sur les différents tableaux.
Mais pour TcdData, le traitement est très lent.
Pour explication: dans ma liste déroulante multi-choix, faite via une listbox, lorsque je sélectionne plusieurs éléments je rajoute ces éléments dans une cellule avec un ; comme séparateur exemple : toto;tata;titi
Ensuite je filtre le tableau, et dans le cas d'un de mes tableaux, le TcdData, je dois rechercher si un des éléments de la liste fait partie de ma cellule exemple : toto;tata;titi
Le code sélectionne tout, puis balaye ligne à ligne le tableau et si la valeur n'est pas dans ma sélection, elle est décochée, mais c'est super long !
Filtrer sur un seul élément c'est simple, mais à partir de deux, j'ai pas trouvé d'autres pistes que le code suivant.
Pour info j'ai ajouté le manualupdate true avant et false après pour accélérer le processus mais je ne gratte que quelques secondes sur une minute de traitement.
Est-ce que vous auriez une autre idée pour ne sélectionner que certains éléments ?
Merci par avance, en espérant que vous ayez déjà rencontré un cas comme celui là,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 ChronoStart = Now Sheets("TcdData").PivotTables("TcdData").ManualUpdate = True For Each Pi In Sheets("TcdData").PivotTables("TcdData").PivotFields("APPORTEUR").PivotItems If (InStr(Target.Text, Pi.Name)) = False Then Pi.Visible = False End If Next Sheets("TcdData").PivotTables("TcdData").ManualUpdate = False Debug.Print "Temps second passage liste Apporteurs " & DateDiff("s", ChronoStart, Now) & "," & Right(Format(Timer, "#0.00"), 2) & "sec."
Si vous voulez plus d'infos sur le projet global dites-moi, j'ai zoomé sur la problématique pour être le plus direct possible
T.
Partager