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
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.

Précédemment, j'avais commencé par du:

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
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).

Ensuite je suis passé à du

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
c'est mieux, on passe a 30 minutes.

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?