Private Sub Worksheet_Change(ByVal Target As Range)
Dim dl As Integer 'déclare la variable dl (Dernière Ligne)
Dim pl As Range 'déclare la variable pl (PLage)
Dim cel As Range 'déclare la variable cel (CELlule)
Dim lt As String 'déclare la variable lt (LisTe de validation)
'si le changement a lieu aillerus que dans la colonne A ou sur les lignes 1 à 2, sort de la procédure
If Target.Column > 1 Or Target.Row < 3 Then Exit Sub
'si la cellule est effacée, efface la cellule en colonne B, sort de la procédure
If Target.Value = "" Then Target.Offset(0, 1).Value = "": Exit Sub
With Sheets("Matrices") 'prend en compte l'onglet "Matrices"
dl = .Cells(Application.Rows.Count, 2).End(xlUp).Row 'définit la dernière ligne éditée de la colonne 2 (=B)
Set pl = .Range("B3:B" & dl) 'définit la plage pl
End With 'fin de la prise en compte de l'onglet "Matrices"
For Each cel In pl 'boucle sur toutes les cellules cel de la plage pl
If cel.Value = Target.Value Then 'condition : si la valeur de la cellule est égale à celle de la cellule éditée
lt = IIf(lt = "", cel.Offset(0, 1).Value, lt & "," & cel.Offset(0, 1).Value) 'définit la liste lt
End If 'fin de la condition
Next cel 'prochaine cellule de la boucle
With Target.Offset(0, 1).Validation 'prend en compte la validadion de données dans la cellule adjacente en colonne B
.Delete 'supprime une éventuelle validation de données existante
.Add Type:=xlValidateList, Formula1:=lt 'ajoute la liste lt comme nouvelle validation de données
End With 'fin de la prose en compte de la validation de données...
'si la liste lt n'est pas vide, affiche le premier élément dans la cellule adjacente en colonne B
If lt <> "" Then Target.Offset(0, 1).Value = Split(lt, ",")(0)
End Sub