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

Test de rapidité d'execution de recherche par différentes methodes

  • Initiateur de la discussion Initiateur de la discussion néné06
  • 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 !

néné06

XLDnaute Accro
Bonsoir le Forum

Je me suis amusé à effectuer un test de rapidité suivant quelques méthodes.
Recherche d'une valeur dans une liste ordonnée.
ce test est effectué 5 fois sauf pour la méthode dichrotomique qui est effectuée 1000 fois.
Il existe d'autres méthodes que je serai curieux de connaitre.

Merci !

A+
 
Dernière édition:
Re : Test de rapidité d'execution de recherche par différentes methodes

Bonjour néné06

Une methode par tableau

VB:
Private Sub CommandButton9_Click()
y = Timer
tablo = Range("A1:A65536")
For t = 1 To L
For n = LBound(tablo, 1) To UBound(tablo, 1)
 If CStr(tablo(n, 1)) = TextBox1.Value Then
   Exit For
 End If
Next n
Next t
TextBox9 = Timer - y
End Sub

Se place derriere les boucles et avant le FIND
 
Re : Test de rapidité d'execution de recherche par différentes methodes

Bonjour à vous,

Une méthode un peu farfelue par filtre + specialcells(xlcelltypevisible) qui se place à mi chemin entre la bouche for each...Next et le find :

VB:
Private Sub CommandButton9_Click()
Dim a As Range
y = Timer
Range("A1:A65535").AutoFilter
For t = 1 To L
    ActiveSheet.Range("$A$1:$A$65535").AutoFilter Field:=1, Criteria1:=TextBox1
    Set a = Range("A1:A65535").SpecialCells(xlCellTypeVisible).Cells(1)
Next t
Range("A1:A65535").AutoFilter
TextBox9 = Timer - y
End Sub
 
Re : Test de rapidité d'execution de recherche par différentes methodes

Re,

Sinon, en mélangeant la méthode tableau avec celle dichotomique, on obtient le meilleur résultat (4fois plus rapide que la dichotomique simple chez moi) :

VB:
Private Sub CommandButton9_Click()
y = Timer
x = CDbl(TextBox1.Value)
Tablo = Range("A1:A65536")
For t = 1 To 1000
deb = 0: fin = 65536
aa: pas = Int((fin - deb) / 2)
    If Tablo(deb + pas, 1) <> x Then
        If deb + pas > x Then
            fin = deb + pas - 1
        Else
            deb = deb + pas + 1
        End If
        GoTo aa:
    End If
Next t
TextBox9 = Timer - y
End Sub
 
Re : Test de rapidité d'execution de recherche par différentes methodes

Bonjour Pierrejean,Softmama et à tous qui passeront par là.

Merci pour votre intérêt concernant ma demande.
J'ai rajouté ,à titre de doc,sur ma piece jointe, vos deux solutions ,qui m'ouvrent d'autres pistes, en fonction des cas à traiter.

A+
 
Re : Test de rapidité d'execution de recherche par différentes methodes

Bonjour tous,

Une autre méthode:

Code:
Private Sub CommandButton11_Click()
    x = CDbl(TextBox1.Value)
    y = Timer
    Dim d As Variant
    For t = 1 To L
        d = CVErr(xlErrNA)
        d = Application.Match(x, Sheets("Feuil1").Range("A:A"), 0)
    Next t
    Z = Timer
    temps = Z - y
    TextBox11.Value = temps
End Sub

Resultat sur ma machine:0,015625

Avec mise en tableau: 0,0625

A+
 
Dernière modification par un modérateur:
Re : Test de rapidité d'execution de recherche par différentes methodes

Je n'avais pas essayé la methode de Sotfmama qui détient la palme.

Sinon, en mélangeant la méthode tableau avec celle dichotomique, on obtient le meilleur résultat (4fois plus rapide que la dichotomique simple chez moi) :

A+
 
Re : Test de rapidité d'execution de recherche par différentes methodes

Re

Une recapitulation a cet instant

Vous noterez toutefois une legere correction dans les dichotomiques qui ne fonctionnaient qu'en raison de l'identite du contenu des cellules avec leur N° de ligne
La macro de Hasco meritait egalement d'etre multipliée par 1000 pour etre comparée aux autres
 

Pièces jointes

Re : Test de rapidité d'execution de recherche par différentes methodes

Avec ces méthodes, je vais pouvoir les adapter efficacement, en fonction des programmes.
La dernière mouture de ce test sera archivé dans ma bibliothèque perso pour des utilisations ultérieures , à moins que d'autres réponses proposées n'aboutisses à une solution plus performante.
Mais cela est déja "TRES BIEN".

Merci à Tous !

A+
 
Re : Test de rapidité d'execution de recherche par différentes methodes

Re, tous

Avec mise en tableau transposé on obtient: 0,015625 soit le même temps que précédement dans une boucle de 5 passages ????

[EDITION] J'ai trouvé: sous cette forme la valeur n'est jamais trouvée et d retourne une valeur d'erreur!!! j'avais oublié le .Value[/EDITION]

Code:
Private Sub CommandButton12_Click()
    Dim tablo: tablo = Application.Transpose(Sheets("Feuil1").Range("A:A").value)
    x = CDbl(TextBox1.Value)
    y = Timer
    Dim d As Variant
    For t = 1 To 1000
        d = CVErr(xlErrNA)
        d = Application.Match(x, tablo, 0)
    Next t
    Z = Timer
    temps = Z - y
    TextBox12.Value = temps
End Sub


A++ tous
 
Dernière modification par un modérateur:
Re : Test de rapidité d'execution de recherche par différentes methodes

Hasco

Sur 5 passages j'ai 0
sur 1000 j'ai 0.015...
pour plus ,j'ai une augmentation peut être dû uniquement à la boucle??
J'ai regardé avec le pas à pas mais je n'est rien décelé d'anormal.
A verifier plus en profondeur!

A+
 
Re : Test de rapidité d'execution de recherche par différentes methodes

Re,

Softmama, as-tu testé la valeur de d en sortie de boucle, sous cette dernière forme, chez moi d contient une valeur d'erreur->donc valeur non trouvées. Instructif tout ceci.

A+
 
- 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

E
Réponses
5
Affichages
2 K
Elmarabout
E
N
Réponses
17
Affichages
3 K
ninajams
N
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…