XL 2010 Défiltrer certaines colonnes VBA

LEIYAZ

XLDnaute Nouveau
Bonjour,

J'ai un fichier sur lequel j'ai un filtre sur une colonne (Colonne Q) et j'ai souhaité pouvoir défiltrer uniquement les colonnes A a N et laisser le filtre sur la colonne Q pour cela j'ai mis ce code :

VB:
Sub defiltrer()

    ActiveSheet.ListObjects("Liste_Demandes").Range.AutoFilter Field:=1
    ActiveSheet.ListObjects("Liste_Demandes").Range.AutoFilter Field:=2
    ActiveSheet.ListObjects("Liste_Demandes").Range.AutoFilter Field:=3
    ActiveSheet.ListObjects("Liste_Demandes").Range.AutoFilter Field:=4
    ActiveSheet.ListObjects("Liste_Demandes").Range.AutoFilter Field:=5
    ActiveSheet.ListObjects("Liste_Demandes").Range.AutoFilter Field:=6
    ActiveSheet.ListObjects("Liste_Demandes").Range.AutoFilter Field:=7
    ActiveSheet.ListObjects("Liste_Demandes").Range.AutoFilter Field:=8
    ActiveSheet.ListObjects("Liste_Demandes").Range.AutoFilter Field:=9
    ActiveSheet.ListObjects("Liste_Demandes").Range.AutoFilter Field:=10
    ActiveSheet.ListObjects("Liste_Demandes").Range.AutoFilter Field:=11
    ActiveSheet.ListObjects("Liste_Demandes").Range.AutoFilter Field:=12
    ActiveSheet.ListObjects("Liste_Demandes").Range.AutoFilter Field:=13
    

End Sub

Mais je pense qu'il peut être optimisé car il est un peu long à enclencher (quelques millisecondes mais on voit le curseur de la souris qui recherche).

Pensez vous que mon code peut être optimisé ?

Merci par avance :)
 

Pièces jointes

  • Demandes Prestations Interprétariat Présentiel 2021.xlsb
    71.2 KB · Affichages: 23
Solution
Rien trouvé de mieux :
VB:
Sub defiltrer()
Application.ScreenUpdating = False
For F = 1 To 13
    ActiveSheet.ListObjects("Liste_Demandes").Range.AutoFilter Field:=F
Next F
End Sub
Le ForNext c'est juste pour simplifier l'écriture. L'accélération se fait avec le figeage écran.
Sur mon PC je passe de 0.367s à 0.015s.

sylvanu

XLDnaute Barbatruc
Supporter XLD
Rien trouvé de mieux :
VB:
Sub defiltrer()
Application.ScreenUpdating = False
For F = 1 To 13
    ActiveSheet.ListObjects("Liste_Demandes").Range.AutoFilter Field:=F
Next F
End Sub
Le ForNext c'est juste pour simplifier l'écriture. L'accélération se fait avec le figeage écran.
Sur mon PC je passe de 0.367s à 0.015s.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonsoir,
Vous avez un compteur de temps accessible par Timer.
Vous commencez par X=Timer et vous finissez par Msgbox Timer-X, il vous donne le temps en secondes.
Vous pouvez tester ceci, une fois dans l'état une seconde fois en mettant la ligne Application.ScreenUpdating en commentaire :
VB:
Sub defiltrer()
T0 = Timer
Application.ScreenUpdating = False
For F = 1 To 13
    ActiveSheet.ListObjects("Liste_Demandes").Range.AutoFilter Field:=F
Next F
MsgBox "Temps d'execution : " & Round(1000 * (Timer - T0), 0) & "ms."
End Sub
Attention, ce temps est "personnel", il dépend de votre bécane, de votre processeur, de la version d'XL.... donc n'est valable que pour vous. Par contre il permet aisément de comparer deux solutions. D'où, toujours, la petite précision :
Sur mon PC je passe de 0.367s à 0.015s.
 

Discussions similaires

Réponses
0
Affichages
472

Statistiques des forums

Discussions
312 160
Messages
2 085 838
Membres
103 000
dernier inscrit
Nath13