Salut à tous,
J'ai :
- d'un côté un Tableau croisé dynamique classique, avec un champ "Item" positionné en filtre du rapport.
- de l'autre une liste de quelques articles qui vont définir le critère du filtre "Item" de mon TCD
Si je fais ça manuellement, je sélectionne mon filtre "Item", je coche "sélectionner plusieurs éléments", je sélectionne mes codes articles, puis je clique sur "Ok".
A ce moment - et à ce moment uniquement-, le TCD est mis à jour en tenant compte de la multi-sélection.
Bon, manuellement, donc, tout va bien
Passons en vba...
Depuis vba, je récupère mes articles à cocher depuis une listbox (permettant la sélection multiple), puis je boucle sur ma listbox, et j'affecte à PivotItems la valeur de True ou False, selon ce qui a été sélectionné dans la listbox.
Bref ;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 ... 'boucle sur la liste For iListIndex = 1 To oList.ListCount 'si l'élement est sélectionné -> PivotItems à TRUE, sinon -> PivotItems à FALSE Worksheets("TCD Sheet").PivotTables("TCD1").PivotFields("Item").PivotItems(oList.List(iListIndex)).Visible = oList.Selected(iListIndex) Next iListIndex
Jusque là tout va bien, ça fonctionne.
Sauf que... sauf qu'à chaque passage de la boucle, il remet à jour le TCD (comme si, quand je l'ai fait manuellement, j'avais cliqué sur "Ok" à chaque fois que j'ai ajouté un article dans mon filtre).
Et comme j'ai 230 articles dans ma Listbox, il rafraichit 230 fois mon TCD (qui pointe sur une plage de 300 000 lignes....), et du coup, ça serait comme qui dirait un chouïa un peu lent...
Sans cirer les pompes, est-ce que l'un de vous aurait la géniale gentillesse et la magnanime intelligence de venir à mon secours ?
Merci,
Sylvain
Partager