Private Sub Worksheet_Change(ByVal Target As Range)
'
' Variable qui contiendra soit la liste des communes soit "Communes non trouvées"
Dim liste As Variant
'
' La cellule doit être dans la plage C10:C100 ( à adapter )
If Target.Count = 1 And Not Intersect(Target, Range("C10:C100")) Is Nothing Then
'
' Son type doit être un numérique (les valeurs numériques pour excel sont en type Double)
If TypeName(Target.Value) = "Double" Then
'
' Appel à la fonction pour obtenir la liste
liste = CommunesParNumDepartement(CInt(Target.Value))
'
' Travailler sur la celllule à droite de la cellule qui a changé
With Target.Offset(, 1)
'
' Si la fonction a retourné un tableau
If IsArray(liste) Then
'
' Ajouter l'item "Choisir une commune en fin de liste"
liste(UBound(liste)) = "Choisir une commune"
'
' Transformer la liste en chaîne de caractères
' dont chaque nom de commune sera séparé par une virgule
' pour la liste de validation
liste = Join(liste, ",")
Else
'
' Si la liste n'est pas un tableau elle devient :
liste = "Communes non trouvées"
End If
'
' Sélection et valorisation de la cellule
.Select
.Value = Empty
'
' suppression de validation existante, création de la nouvelle
With .Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
Operator:=xlBetween, Formula1:=liste
End With
End With
End If
End If
End Sub