XL 2010 Défiltrer certaines colonnes VBA

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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.
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.
 
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.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
3
Affichages
303
Réponses
4
Affichages
1 K
Réponses
12
Affichages
695
Retour