Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False 'désactive les événements
On Error GoTo fin
If Not Intersect(Target, Range("A3:A10")) Is Nothing And Target.Count = 1 And _
Not IsEmpty(Target) Then 'si l'on sélectionne une cellule de la plage A3:A10
Set ref = [ref] 'définit la plage ref comme reprenant les valeurs de la plage nommée ref
Set valeur = [valeur] 'définit la plage valeur comme reprenant les valeurs de la plage nommée valeur
Target.Offset(0, 1).Validation.Delete 'efface la liste déroulante en B3
rep = Application.Match(Target, ref, 0) 'trouve la position de la valeur de A3 dans valeur
Target.Offset(0, 1).Value = valeur(rep) 'place la valeur trouvée en B3
If Target.Offset(0, 1).Value = "" Then 'si la valeur en B3 est une chaîne vide alors
Target.Offset(0, 1).Validation.Add xlValidateList, Formula1:="=autre_valeur" 'créé une liste de validation dont les valeurs sont ceux de la plage nommée "autre_valeur"
Target.Offset(0, 1).Select 'sélectionne B3
End If
Else
If IsEmpty(Target) And Not IsEmpty(Target.Offset(0, 1)) Then Target.Offset(0, 1) = ""
End If
fin:
Application.EnableEvents = True 'réactive les événements
End Sub