Slicer VBA très lent

kakemphaton

XLDnaute Junior
Bonjour,

J'ai utilisé l'enregistreur de macro afin de sauvegarder mes changements de sélection dans un slicer. Si, sur le segment/slicer, je modifie à la main la sélection, le résultat est rapide.

En revanche quand j'utilise le code généré, le résultat prend 5 minutes à s'actualiser. D'après ce que j'ai pu observer, c'est comme si le code sélectionnait toutes les possibilités et retirait petit à petit les "false".

Voici le code :

Code:
Sub choix()

    Sheets("Indicateurs").Select
ActiveWorkbook.SlicerCaches("Secteur").ClearManualFilter
    With ActiveWorkbook.SlicerCaches("Secteur")
        .SlicerItems("Lille").Selected = True
        .SlicerItems("Paris").Selected = False
        .SlicerItems("Nancy").Selected = False
        .SlicerItems("Lyon").Selected = False
        .SlicerItems("Grenoble").Selected = False
        .SlicerItems("Aix en Provence").Selected = False
        .SlicerItems("Rouen").Selected = False
        .SlicerItems("Nantes").Selected = False
        .SlicerItems("Bordeaux").Selected = False
        .SlicerItems("Orléans").Selected = False
        .SlicerItems("Toulouse").Selected = False
    End With
    
End Sub

J'ai bien essayé de mettre ces options Application.Calculation = xlManual, mais cela ne change rien. Lorsque je sélectionne manuellement tout est rapide, mais dès que j'utilise le code, c'est catastrophique.

Merci
 
Dernière édition:

chris

XLDnaute Barbatruc
Re : Slicer VBA très lent

Bonjour

Le changement de filtre dans les TCD ne génèrent pas de calcul mais un SheetPivotTableUpdate.

On peut l'intercepter mais je ne crois pas qu'on puisse y changer quoi que ce soit.

Effectivement le ClearManual Filter défiltre tout (et c'est conseillé).

Il reste ensuite à mettre à false les valeurs non souhaitées. Le true est déjà actif donc inutile...
 

kakemphaton

XLDnaute Junior
Re : Slicer VBA très lent

Je viens d'essayer cette solution, en effet, ca ne fonctionne pas

Code:
Sub choix()

    Sheets("Indicateurs").Select
Application.screenUpdating = False
Worksheets("Indicateurs").EnableCalculation= False
ActiveWorkbook.SlicerCaches("Secteur").ClearManualFilter
    With ActiveWorkbook.SlicerCaches("Secteur")
        .SlicerItems("Lille").Selected = True
        .SlicerItems("Paris").Selected = False
        .SlicerItems("Nancy").Selected = False
        .SlicerItems("Lyon").Selected = False
        .SlicerItems("Grenoble").Selected = False
        .SlicerItems("Aix en Provence").Selected = False
        .SlicerItems("Rouen").Selected = False
        .SlicerItems("Nantes").Selected = False
        .SlicerItems("Bordeaux").Selected = False
        .SlicerItems("Orléans").Selected = False
        .SlicerItems("Toulouse").Selected = False
    End With
   
End Sub
 

kakemphaton

XLDnaute Junior
Re : Slicer VBA très lent

Je ne suis pas très doué, j'ai retiré les autres villes, mais du coup, il ne me sélectionne rien. Ca ne doit pas être la bonne méthode

Merci

Code:
Sub choix()

    Sheets("Indicateurs").Select
ActiveWorkbook.SlicerCaches("Secteur").ClearManualFilter
    With ActiveWorkbook.SlicerCaches("Secteur")
        .SlicerItems("Lille").Selected = True

    End With
   
End Sub
 

chris

XLDnaute Barbatruc
Re : Slicer VBA très lent

Bonjour

On tourne en rond car tu ne lis pas :
  1. ClearManualFilter affiche toutes les villes
  2. j'ai donc proposé une boucle qui cache toutes les villes sauf Lille
Code:
With ActiveWorkbook.SlicerCaches("Secteur")
    .ClearManualFilter
    For Each Ville In .SlicerItems
        if Ville<>"Lille" then Ville.Selected = False
    Nex Ville 
End With
 

kakemphaton

XLDnaute Junior
Re : Slicer VBA très lent

Merci, mais, je ne suis pas très doué, j'ai un message d'erreur

"Propriété ou méthode non géré par cet objet" Il me souligne en jaune
Code:
If Ville <> "Lille" Then

J'ai utilisé ce code

Code:
Sub Macro1()
   
    Sheets("Indicateurs").Select
With ActiveWorkbook.SlicerCaches("Secteur")
    .ClearManualFilter
    For Each Ville In .SlicerItems
        If Ville <> "Lille" Then Ville.Selected = False
    Next Ville
End With


End Sub

Merci

Concernant ce point "Ne serait-il pas temps d'arreter?", je n'ai aucun souci de lenteur sur ma machine, c'est juste lors de l'exécution de cette macro.
 

chris

XLDnaute Barbatruc
Re : Slicer VBA très lent

Bonjour à tous

Quelques erreurs de ma part. Je rajoute aussi quelques améliorations

Code:
Dim Ville As SlicerItem
With ActiveWorkbook.SlicerCaches("Segment_Secteur")
    .ClearManualFilter
    For Each Ville In .SlicerItems
        if UCase(Ville.Caption) <> UCase("Lille") then Ville.Selected = False
    Nex Ville 
End With
 

Statistiques des forums

Discussions
312 492
Messages
2 088 938
Membres
103 988
dernier inscrit
Feonix