Je dispose de deux feuilles. Les elements des premieres colonnes de chaque feuilles constituent une clé. Je n'ai donc pas besoin de findnext car la premiere reponse trouvé par find suffit amplement.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 Sub findproc() Dim i As Integer, j As Integer, feuil1 As Worksheet, feuil2 As Worksheet, critere As String, reponse As Range, NbLignesFeuil2 As Long, NbLignesFeuil1 As Long, li As Long, co As Long Set feuil1 = ThisWorkbook.Worksheets("feuil1") Set feuil2 = ThisWorkbook.Worksheets("feuil2") NbLignesFeuil1 = feuil1.Cells(65536, 1).End(xlUp).Row NbLignesFeuil2 = feuil2.Cells(65536, 1).End(xlUp).Row For i = 2 To NbLignesFeuil2 critere = feuil2.Cells(i, 1) Set reponse = feuil1.Range(Cells(2, 1), Cells(NbLignesFeuil1, 1)).Find(critere, feuil1.Cells(2, 1), xlValue, xlWhole, xlByRows, xlNext) If Not reponse Is Nothing Then li = reponse.Row f2.Cells(i, 2) = f1.Cells(li, 2) End If Next i End Sub
Précédemment, j'avais commencé par du:
En terme de performance, c'était très mauvais (sur ma bécanne, en 10000 * 5000 lignes, ça prend 50 minutes...oui le PC est mauvais mais je n'y peux rien).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 for i=1 to NbLignesFeuil1 for j=1 to NbLignesFeuil2 if feuil1.cells(i,1) = feuil2.cells(i,2) then .... end if next j next i
Ensuite je suis passé à du
c'est mieux, on passe a 30 minutes.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 for i=1 to NbLignesFeuil1 j=0 do j=j+1 loop while j<=NbLignesFeuil2 and feuil1.cells(i,1) <> feuil2.cells(i,2) if j<=NbLignesFeuil2 then ....... end if next i
Mais quand je compare a du vlookup, je me dis que ça reste vraiment très mauvais.
Pour des raisons assez ininteressantes, Vlookup ne m'interesse pas.
Je me tourne vers .find. Mais dans mon code, la methode range echoue.
Quelqu'un sait pourquoi?
(ps: les fichiers d'aide vba ont été suprimé)
Question subsidiaire: le .find est-il le plus rapide possible?
Partager