Option Explicit
Sub Trouver_Prix()
Dim d1 As Object, plage1 As Range, plage2 As Range, t As Double, c As Range
t = Timer
Set d1 = CreateObject("Scripting.Dictionary")
Set plage1 = Range("A2", [a65000].End(xlUp))
Set plage2 = Range("c2", [c65000].End(xlUp))
[A:C].Interior.ColorIndex = xlNone: [D:D].ClearContents
For Each c In plage1
d1(CDbl(c.Value)) = c.Offset(, 1).Value
Next c
For Each c In plage2
If d1.exists(c.Value) Then c.Interior.ColorIndex = 3
If d1.exists(c.Value) Then c.Offset(, 1) = d1.Item(CDbl(c))
Next c
MsgBox "Terminé en " & Round(Timer - t, 2) & " sec."
End Sub