Private Sub Worksheet_Change(ByVal Target As Range)
Dim d As Object, tablo, i&, x$, resu()
Set d = CreateObject("Scripting.Dictionary")
d.CompareMode = vbTextCompare 'la casse est ignorée
With Feuil4 'CodeName, à adapter
If .FilterMode Then .ShowAllData 'si la feuille est filtrée
With .Range("B4:C" & .Range("B" & Rows.Count).End(xlUp).Row) 'plage à adapter
tablo = .Value 'matrice, plus rapide
For i = 1 To UBound(tablo)
x = CStr(tablo(i, 1)) 'texte
If x <> "" Then d(x) = tablo(i, 2)
Next
End With
End With
If FilterMode Then ShowAllData 'si la feuille est filtrée
With Range("B10:B" & Range("B" & Rows.Count).End(xlUp).Row) 'plage à adapter
tablo = .Resize(, 2) 'matrice, plus rapide, au moins 2 éléments
ReDim resu(1 To UBound(tablo), 1 To 1)
For i = 1 To UBound(resu)
resu(i, 1) = d(CStr(tablo(i, 1))) 'convertit les nombres en textes
Next
'---restitution---
Application.EnableEvents = False 'désactive les évènements
.Columns(13) = resu 'en colonne N
Application.EnableEvents = True 'réactive les évènements
.EntireColumn.AutoFit 'ajuste les largeurs de colonnes
End With
End Sub