Private Sub Worksheet_Change(ByVal Target As Range)
Dim pl As Range 'déclare la variable pl (PLage)
Dim r As Range 'déclare la variable r (Recherche)
'si la modification a lieu ailleurs qu'en B21, sort de la procédure
If Target.Address <> "$B$21" Then Exit Sub
'si B21 est effacée, C21 est effacée également, sort de la procédure
If Target.Value = "" Then Target.Offset(0, 1).Value = "": Exit Sub
With Sheets("Fournisseurs") 'prend en compte l'onglet "Fournisseurs"
Set pl = .Range("A2:A" & .Range("A65536").End(xlUp).Row) 'définit la plage de recherche
End With 'fin de la prise en compte de l'onglet "Fournisseurs"
Set r = pl.Find(Target.Value, , xlValues, xlWhole) 'définit la recherche
If Not r Is Nothing Then 'condition : si il existe au moins une occurrence de B21 dans la plage pl
'place le résultat en C21 (tu adapteras à ton cas en modifiant les valeurs des offset (Ligne, Colonnes))
Target.Offset(0, 1).Value = r.Offset(0, 1).Value
Else 'sinon
MsgBox "Code non trouvé !" 'message
Range("B21").Select 'place le curseur dans la cellule B21
End If
End Sub