Private Sub Worksheet_Change(ByVal Target As Range)
Dim lv As String 'déclare la variable lv (Liste de Validation)
'si le changement a lieu ailleur que dans la plage R5:R35 ou si la sélection contient plus d'une seule cellule, sort de la procédure
If Application.Intersect(Target, Range("R5:R35")) Is Nothing Or Selection.Cells.Count > 1 Then Exit Sub
For Each cel In Range("A5:A35") 'boucle sur toutes les cellules de la plage A5:A35
'si la cellule correspondante de la colonne R de cel est "oui", définit la liste de validation lv
If cel.Offset(0, 17).Value = "oui" Then lv = IIf(lv = "", cel.Value, lv & "," & cel.Value)
Next cel 'prochaine cellule de la boucle
With Range("A65:A129").Validation 'prend en compte la validation données de la plage A65:A129
.Delete 'supprime une éventuelle liste éxistante
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=lv 'attribue la liste de validation lv
End With 'fin de la prise en compte de...
End Sub