Calvus
XLDnaute Barbatruc
Bonjour le forum,
J'ai une macro me permettant de chercher des occurrences si elles existent dans une autre feuille.
Le code s'exécute en 0,44 s
Le problème est si je tente de repérer la ligne trouvée.
Là le temps passe à 2,8 s
Le problème est dû à Find qui prend trop de temps. J'ai mis un repère dans le code pour visualiser directement la ligne.
Quel serait l'autre moyen de conserver la rapidité de mon dictionnaire ? Une boucle peut être ? Tiens je vais essayer.
Pour exemple, vous pouvez remplacer B2 en feuille 2 par A111
La macro recherche la colonne E de la feuille 2(12) dans la feuille 1.
La seconde macro(Test2) zappe simplement la recherche pour calcul de la différence de temps. Le code est le même.
Merci et bonne journée.
J'ai une macro me permettant de chercher des occurrences si elles existent dans une autre feuille.
Le code s'exécute en 0,44 s
Le problème est si je tente de repérer la ligne trouvée.
Là le temps passe à 2,8 s
Le problème est dû à Find qui prend trop de temps. J'ai mis un repère dans le code pour visualiser directement la ligne.
Quel serait l'autre moyen de conserver la rapidité de mon dictionnaire ? Une boucle peut être ? Tiens je vais essayer.
Pour exemple, vous pouvez remplacer B2 en feuille 2 par A111
La macro recherche la colonne E de la feuille 2(12) dans la feuille 1.
La seconde macro(Test2) zappe simplement la recherche pour calcul de la différence de temps. Le code est le même.
VB:
Option Explicit
Sub Test_Prospects_Existants()
With Application: .ScreenUpdating = False: .Calculation = xlManual: .EnableEvents = False: End With
Dim f As Worksheet, mondico, BD(), tablo, i As Integer, start As Single
start = Timer
Set f = ActiveSheet
Set tablo = f.Range("E3:E" & f.Range("E" & Rows.Count).End(3).Row)
BD = tablo.Value
Set mondico = CreateObject("Scripting.Dictionary")
mondico.CompareMode = vbTextCompare
For i = LBound(BD) To UBound(BD)
If Not mondico.Exists(BD(i, 1)) Then mondico.Add Cells(i + 2, 5), Cells(i + 2, 9)
Next
Dim c, j As Integer, a, k
ReDim a(1 To UBound(BD), 1 To UBound(BD))
For i = 6 To Feuil1.Cells(Rows.Count, 5).End(xlUp).Row
For Each c In mondico.keys
' LENTEUR ICI
k = Range("e:e").Find(c).Address
For j = 9 To 9
If Feuil1.Cells(i, j) = mondico(c) And Feuil1.Cells(i, j - 4) = c Then
MsgBox "Prospect existant ! " & Chr(10) & c & Chr(10) & k
MsgBox "durée du traitement: " & Timer - start & " secondes"
Set mondico = Nothing
Exit Sub
i = i + 1
Exit For
End If
Next j
Next c
Next i
Set mondico = Nothing
With Application: .EnableEvents = True: .Calculation = xlAutomatic: .ScreenUpdating = True: End With
MsgBox "durée du traitement: " & Timer - start & " secondes"
End Sub
Merci et bonne journée.