Sub Envoyer()
Dim t, d1 As Object, d2 As Object, ncol%, i&, x$, j%
'---1ère feuille---
t = Sheets("Page 1").UsedRange
If Not IsArray(t) Then Exit Sub 'sécurité
ncol = UBound(t, 2)
Set d1 = CreateObject("Scripting.Dictionary")
Set d2 = CreateObject("Scripting.Dictionary")
For i = 1 To UBound(t)
x = t(i, 1)
If x <> "" Then
d1(x) = ""
For j = 2 To ncol
If t(1, j) <> "" Then d2(x & t(1, j)) = t(i, j)
Next j
End If
Next i
'---2ème feuille---
With Sheets("Page 2")
If .FilterMode Then .ShowAllData 'si la feuille est filtrée
t = .UsedRange
If Not IsArray(t) Then Exit Sub 'sécurité
ncol = UBound(t, 2)
For i = 1 To UBound(t)
x = t(i, 1)
If d1.exists(x) Then
For j = 2 To ncol
If d2.exists(x & t(1, j)) Then t(i, j) = d2(x & t(1, j))
Next j
End If
Next i
.UsedRange = t 'restitution
.Activate 'facultatif
End With
End Sub