Private Sub Worksheet_SelectionChange(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 lst As String 'déclare la variable lst (LiSTe de validation de données)
If Target.Address <> "$D$1" Then Exit Sub 'si la cellule sélectionnée n'est pas D1, sort de la procédure
dl = Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne éditée dl de la colonne 1 (=A)
Set pl = Range("A2:A" & dl) 'définit la plage pl
For Each cel In pl 'boucle sur toutes les cellules cel de la plage pl
'si la cellule à coté (colonne B) est vide, définit la liste lst
If cel.Offset(0, 1).Value = "" Then lst = IIf(lst = "", cel.Value, lst & "," & cel.Value)
Next cel 'prochaine cellule de la boucle
With Target.Validation 'prend en compte la validation de données de la cellule D1
.Delete 'efface la validation de données existante
.Add (xlValidateList), Formula1:=lst 'ajoute la liste lst comme nouvelle validation de données
End With 'fin de la prise en compte de la validation de données
End Sub