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 et automatique

[...Suite...]

Alors avec le Filtre élaboré, c'est tout de suite beaucoup pas mieux 😉
Code:
Sub Filtre3()
Dim t
t = Timer
Application.ScreenUpdating = False
Sheets("Feuil1").Range("A1:D10001").AdvancedFilter Action:=xlFilterCopy, _
        CriteriaRange:=Range("A1:A2"), CopyToRange:=Range("E1"), Unique:=False
Application.ScreenUpdating = True
MsgBox "Durée " & Format(Timer - t, "0.00 \s")
End Sub
 
Re : VBA - Comparaison des filtres par tableau et automatique

Bonjour JM, Annette,

Oui JM, pour faire bon poids j'ajoute le filtre avancé (élaboré) :

Code:
Sub Filtre3() 'avancé
Dim t, crit As Range
t = Timer
Set crit = [I1]
crit(2, 0) = "=A2=" & crit.Address
Set crit = crit(1, 0).Resize(2)
With Feuil2.[A1:D65536]
  .ClearContents 'RAZ
  [A1:D10001].AdvancedFilter xlFilterCopy, crit, .Cells(1) 'à adapter
  crit(2) = ""
  .Parent.Activate
End With
MsgBox "Durée " & Format(Timer - t, "0.00 \s")
End Sub
Il est 2 fois plus rapide que le filtre par tableau.

Fichier joint.

A+
 

Pièces jointes

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

Bonjour Annette

0.25 et 0.19 S
Donc chez toi le filtre automatique est plus rapide ?
Car moi j'ai indiqué les résultats dans cet ordre
1er chiffre (0.27) -> Sub Filtre1() 'par tableau
2ième chiffre (1.36) -> Sub Filtre2() 'automatique

job75

Avec Excel 2013, Filtre3 (ta version) plante (erreur 1004)
et Filtre3 (ma version) fonctionne mais est beaucoup plus lent que Filtre1 et Filtre2
😕😕
 
Dernière édition:
Re : VBA - Comparaison des filtres par tableau, automatique, avancé

Re,

Sur mes 2 ordi, dans l'ordre des boutons :

- Win XP - Excel 2003 => 0,14 s - 0,36 s - 0,06 s

- Win 7 - Excel 2010 => 0,14 s - 0,65 s - 1,35 s.

Curieux que pour les filtres installés Excel 2010 soit moins performant 😕

Quant au plantage sur Excel 2013, essaie de voir comment y remédier JM.

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

staple1600,

Il est vrai que mon retour n'était pas très clair 😱

Win XP SP3 - Excel 2007

Filtre1 testé en double
0.25 et 0.19 S

Filtre2 testé en double
3.27 et 3.27 S

Filtre3
(erreur 1004) aussi

Filtre3 avancé testé en double

12.39 et 11.56 S

Bizarre ... 😕😕

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

Re

job75
Désolé, je n'ai pas été assez patient
Ton code fonctionne mais le résultat s'affiche au bout de 53 secondes sur Excel 2013 ???
(J'avais précédemment fait CTRL+PAUSE et c'est là que j'avais Erreur 1004)


PS: Est-ce que la RAM a une indicidence sur le résultat ? (ou le processor ?)
Pour info: W7 64bits + XL2013 32bits
CPU: AMD E-300 APU with Radeon(tm) HD Graphic 1.30 GHz
RAM: 4 GB (3.60 usable)
 
Dernière édition:
Re : VBA - Comparaison des filtres par tableau, automatique, avancé

Re

job75
Concernant mon PS, de mon prédécent message, tu en penses quoi ?
Comme se fait-il qu'avec Excel 2013 j'ai un temps de l'ordre de 50 secondes avec la macro Filtre3 ???
(J'ai testé plusieurs fois et avec ton fichier joint dans le message #5 (et avec ce seul fichier ouvert dans Excel) )
 
Re : VBA - Comparaison des filtres par tableau, automatique, avancé

Re JM,

Je ne sais pas pourquoi le filtre avancé prend autant de temps chez toi, il serait bien que d'autres utilisant Excel 2013 nous disent ce qu'il en est.

Les info système sur mes ordi :

- Win XP v2002 - SP3 - AMD Athlon(tm) 64X2 Dual - Core Processor 4200+ - 2,20 GHz - 1,00 Go de RAM

- Win 7 - SP1 - Intel(R) Core(TM) - 2,40 GHz - 4,00 Go de RAM - 64 bits

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

Bonjour à tous,

Voici :

Capture 1.png
Capture 3.png

OS : Windows 8.1


Capture 4.png

A+ à tous
 

Pièces jointes

  • Capture 1.png
    Capture 1.png
    2.4 KB · Affichages: 97
  • Capture 1.png
    Capture 1.png
    2.4 KB · Affichages: 98
  • Capture 3.png
    Capture 3.png
    2.9 KB · Affichages: 94
  • Capture 3.png
    Capture 3.png
    2.9 KB · Affichages: 101
  • Capture 4.png
    Capture 4.png
    1.6 KB · Affichages: 99
  • Capture 4.png
    Capture 4.png
    1.6 KB · Affichages: 103
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
Retour