Salut d'abord créer un Champ nommé sur une colonne d'un tableau structuré par exemple, ou une plage.
ThisWorkbook.Names.Add Name:="vr_City", RefersToR1C1:="=Tableau1[City]" ' // Pour un TS
ThisWorkbook.Names.Add Name:="vr_City", RefersToR1C1:="=DECALER(Feuil3!$B1;;;NBVAL(Feuil3!$B:$B)-1;1)" ' // Pour une plage normale avec entête de colonne.
Ensuite tu crée ta zone de liste dans la cellule de ton choix
'ThisWorkbook.Names.Add Name:="vr_City", RefersToR1C1:="=Tableau1[City]" ' // pour un TS
'ThisWorkbook.Names.Add Name:="vr_City", RefersToR1C1:="=DECALER(Feuil1!$A$2;;;NBVAL(Feuil1!$A:$A)-1;1)" ' // pour valeur sur une colonne avec entêtes
Dim rng As Range
' // Idem pour définir la plage des zone de liste
Set rng = Feuil2.Range("J2:J15") ' // A adapter ou trouver la dernierre ligne
'Set rng = Range("Tableau1[City]") ' // Si tableau structuré
'Set rng = Range("vr_City") ' Si Champ Nommé avec un valeur du style Autoriser:=Liste, Données:= =DECALER(Feuil1!$A$2;;;NBVAL(Feuil1!$A:$A)-1;1)
With rng.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=vr_City"
.IgnoreBlank = True
.InCellDropdown = True
End With
Je pense ne pas m'être trompé.