Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

VBA - Comparaison des filtres par tableau, automatique, avancé

  • Initiateur de la discussion Initiateur de la discussion job75
  • Date de début Date de début

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 !

job75

XLDnaute Barbatruc
Bonjour à tous,

Pour faire suite à une demande d'hier de l'ami Si... voyez le fichier joint et ces 2 macros :

Code:
Sub Filtre1() 'par tableau
Dim t, crit, tablo, i&, n&, j As Byte
t = Timer
crit = [H1]
tablo = [A2:D10001] 'à adapter
For i = 1 To UBound(tablo)
  If tablo(i, 1) = crit Then
    n = n + 1
    For j = 1 To 4
      tablo(n, j) = tablo(i, j)
    Next
  End If
Next
With Feuil2.[A2:D65536]
  .ClearContents 'RAZ
  If n Then .Resize(n, 4) = tablo
  .Parent.Activate
End With
MsgBox "Durée " & Format(Timer - t, "0.00 \s")
End Sub

Sub Filtre2() 'automatique
Dim t, crit
t = Timer
crit = [H1]
With Feuil2.[A1:D65536]
  .ClearContents 'RAZ
  [A1:D10001].AutoFilter 1, crit 'à adapter
  [A1:D10001].SpecialCells(xlCellTypeVisible).Copy .Cells(1)
  ActiveSheet.AutoFilterMode = False
  .Parent.Activate
End With
MsgBox "Durée " & Format(Timer - t, "0.00 \s")
End Sub
Sur Win XP - Excel 2003 le filtre par tableau est 2,5 fois plus rapide.

A+
 

Pièces jointes

Dernière édition:
Re : VBA - Comparaison des filtres par tableau, automatique, avancé

Re

Merci JCGL d'avoir testé 😉

Ce serait alors mes 1.30 Ghz qui me mette à la ramasse ?
ou alors Excel n'aime pas AMD mais préfère Intel ?

PS1: On notera qu'Excel 2013 est moins rapide que ses petits frères
(que ce soit chez JCGL ou chez moi 😉 )

PS2: JCGL: tu es sous W8 si ma mémoire est bonne, non ?
 
Dernière édition:
Re : VBA - Comparaison des filtres par tableau, automatique, avancé

Bonjour Jean-Claude et merci,

Conclusion : il faudrait que Microsoft revoie la programmation du filtre avancé pour Excel 2013.

A+
 
Re : VBA - Comparaison des filtres par tableau, automatique, avancé

re

Ce ne sont pas les filtres qui plombent le chrono mais la copie des cellules !
Le contexte y est aussi pour beaucoup (une Ferrari dans les dunes serait-elle toujours aussi rapide qu’une légère petite Jeep un peu gonflée ?)
Dans l’exemple joint, la sélection de la plage à copier se fait différemment.
 

Pièces jointes

Re : VBA - Comparaison des filtres par tableau, automatique, avancé

Bonsoir Si...

Avec ta PJ
0.66 (tableau)
0.16 (filtre auto)

PS: Tu as une idée pourquoi c'est si long avec le filtre élaboré (par VBA) sous Excel 2013 ?
 
Re : VBA - Comparaison des filtres par tableau, automatique, avancé

salut Staple (qui m'interpelle 😉)

elle va vite maintenant ma petite jeep !

J'avais installé* une version d'évaluation de la version 2013 mais devant ma difficulté à l'utiliser et le nombre de bourdes
réalisées, je l'ai rejetée.

Désolé, mais à défaut de réponse à ta question, je ne peux que t'offrir mon soutien moral.

* d'ailleurs mal m'en a pris : je me suis retrouvé avec des résidus polluant ma version 2010 😡 !
 
Re : VBA - Comparaison des filtres par tableau, automatique, avancé

Re, Bonsoir Marcel32


Marcel32

Tu peux tester la macro Filtre3 dans le fichier joint par job75 au message #5, stp ?
Juste pour voir si chez toi aussi l’exécution est longue (comme chez JCGL et comme chez moi, enfin plus chez moi 😉)

Merci d'avance.
 
Re : VBA - Comparaison des filtres par tableau, automatique, avancé

Bonsoir Si...

Tu fausses le jeu parce que dans ton fichier il y a très peu de zones disjointes dans les plages filtrées.

Mais tu me fais (re)découvrir qu'avec le filtre automatique il est inutile d'utiliser SpecialCells(xlCellTypeVisible).

Cela fait gagner du temps, fichier (2) avec les résultats sur Excel 2003 :

Filtre1 : 0,14 s

Filtre2 : 0,22 s (au lieu de 0,36 s)

Filtre3 : 0,06 s.

Edit : bonsoir Marcel32.

A+
 

Pièces jointes

Dernière édition:
Re : VBA - Comparaison des filtres par tableau, automatique, avancé

Au fait... bonjour à tous 😱

Je précise quand même un peu mes résultats :
- par tableau : 0,06 s
- filtre automatique : 0,36 s avec le premier fichier du fil (et 0,40 s avec le deuxième alors que c'est la même procédure...)
- filtre avancé : 11 s environ.

Windows 7 Pro 64 bits, Intel E8500, 8 Gio DDR2.



[edit1]
😱 Décidément Staple, il y a transmission de pensée : j'écris une réponse, je l'envoie et là je vois que ça répond à une question que tu as postée pendant que j'écrivais mon message ! 😱
Ca me fait peur !...
[/edit]



[edit2]
Avec le dernier fichier :
- Filtre 1 : 0,05 s (parfois 0,04 s)
- Filtre 2 : 0,36 s
- Filtre 3 : 10,6 s environ (cette lenteur viendrait en grande partie du SWAP que ça ne m'étonnerait pas)
[/edit]
 
Dernière édition:
Re : VBA - Comparaison des filtres par tableau, automatique, avancé

Re à tous


Merci pour les précisions Marcel32

job75
Avec ton nouveau fichier, rien de neuf sous le soleil
48.98s pour le filtre élaboré

Par contre, si j'ajoute Application.ScreenUpdating = False je passe à 2.86s 😕
(Bizarre car sans cet ajout, vous êtes déjà tous sous les 20 secondes ??)
Code:
Sub Filtre3B() 'avancé
Dim t, crit As Range
t = Timer
Set crit = [I1]
crit(2, 0) = "=A2=" & crit.Address
Set crit = crit(1, 0).Resize(2)
Application.ScreenUpdating = False
With Feuil2.[A1:D65536]
  .ClearContents 'RAZ
  [A1:D10001].AdvancedFilter xlFilterCopy, crit, .Cells(1) 'à adapter
  crit(2) = ""
  .Parent.Activate
End With
Application.ScreenUpdating = True
MsgBox "Durée " & Format(Timer - t, "0.00 \s")
End Sub
 
Re : VBA - Comparaison des filtres par tableau, automatique, avancé

Avec un Application.ScreenUpdating=false placé juste après le "Dim" pour chacun des trois filtres, j'obitens ceci :

- Filtre 1 : 0,04 s (parfois 0,03 s)
- Filtre 2 : 0,32 s
- Filtre 3 : 0,92 s environ (mais ça varie de 0,79 s à 1,40 s)
 
Dernière édition:
Re : VBA - Comparaison des filtres par tableau, automatique, avancé

Re JM, Marcel32,

Je ne pensais vraiment pas que Application.ScreenUpdating = False pouvait avoir ici un effet.

Chez moi sur :

- Excel 2003 => 0,14 s - 0,19 s - 0,06 s donc pratiquement inchangé

- Excel 2010 => 0,09 s - 0,48 s - 0,92 s donc nettement amélioré.

Fichier (3).

A+
 

Pièces jointes

Dernière édition:
Re : VBA - Comparaison des filtres par tableau, automatique, avancé

Re

Avant d’accompagner Morphée aux enfers, et sur ton terrain Job 😉, un filtre en rétropédalage me permet d’aller un peu plus vite. Quant à la troisième méthode, Eurydice va attendre encore un peu 😉

Lancer plusieurs fois les macros car, pour les 2 premières, on peut se retrouver avec des durées très proches.
 

Pièces jointes

Dernière édition:
- 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
15
Affichages
656
Réponses
5
Affichages
839
Réponses
5
Affichages
671
Réponses
33
Affichages
3 K
Réponses
3
Affichages
850
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…