Sub Comparaison()
Dim F1 As Worksheet, F2 As Worksheet, d, P As Range, tablo, i&, v, tablo1, j&, k As Variant
Set F1 = Sheets("Feuil1")
Set F2 = Sheets("Feuil2")
If F1.FilterMode Then F1.ShowAllData 'si la feuille est filtrée
If F2.FilterMode Then F2.ShowAllData 'si la feuille est filtrée
Set d = CreateObject("Scripting.Dictionary")
Set P = F2.Range("B1", F2.Range("B" & F2.Rows.Count).End(xlUp)(2)) 'au moins 2 éléments
tablo = P 'matrice, plus rapide
'---liste pour accélérer---
For i = 1 To UBound(tablo) - 1
v = tablo(i, 1)
If IsNumeric(CStr(v)) Then d(v) = ""
Next i
'---analyse de la 1ère feuille---
Application.ScreenUpdating = False
tablo1 = F1.Range("B1", F1.Range("B" & F1.Rows.Count).End(xlUp)(2)) 'matrice, plus rapide, au moins 2 éléments
For i = 1 To UBound(tablo1) - 1
v = tablo1(i, 1)
If IsNumeric(CStr(v)) Then
If Not d.exists(v) Then
d(v) = "" 'ajoute un élément au Dictionary
tablo = P
For j = 1 To UBound(tablo) - 1
If tablo(j, 1) > v Then tablo(j, 1) = Empty
Next j
k = Application.Match(Application.Max(tablo), tablo, 0)
If IsNumeric(k) Then
k = P(k).Row 'mémorise le numéro de ligne
F2.Rows(k).Insert 'insère une ligne au dessus
F1.Rows(i).Copy F2.Cells(k, 1) 'copier-coller
End If
End If
End If
Next i
End Sub