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:B100, sort de la procédure
If Not Intersect(Target, Range("B21:B100")) Is Nothing Then
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 B dans la plage pl
'place le résultat en D,E,F (tu adapteras à ton cas en modifiant les valeurs des offset (Ligne, Colonnes))
Target.Offset(0, 2).Value = r.Offset(0, 1).Value
Target.Offset(0, 3).Value = r.Offset(0, 2).Value
Target.Offset(0, 6).Value = r.Offset(0, 4).Value
Else 'sinon
MsgBox "Code non trouvé !" 'message
Range("B21").Select 'place le curseur dans la cellule B21
End If
'si B est effacée, D,E,F sont effacées également, sort de la procédure
If Target.Value = "" Then
Target.Offset(0, 2).Value = ""
Target.Offset(0, 3).Value = ""
Target.Offset(0, 6).Value = ""
: Exit Sub
End If
End If
If Not Intersect(Target, Range("F21:F100")) Is Nothing Then
Cells(Target.Row, 10).Value = Cells(Target.Row, 6).Value * Cells(Target.Row, 8).Value
End If
End Sub