Je souhaite ajouter "validation des données" dans une cellule (variable) à l'aide de VBA et la plage à inclure dans la liste de validation des données est également variable. Jusqu'à présent, je l'utilisais
Ici "range1" est la plage qui doit venir dans la liste de validation des données et "rng" est la cellule où je veux la validation des données
Dim range1, rng As range
Set range1 = range("a1:a5")
Set rng = range("b1")
With rng
With .Validation
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="range1"
End With
End With
Je reçois une "erreur définie par l'application et définie par l'objet"
Est-ce que quelqu'un peut aussi m'expliquer le sens de différents arguments dans
With .Validation
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="range1"
Utilisez celui-ci:
Dim ws As Worksheet
Dim range1 As Range, rng As Range
'change Sheet1 to suit
Set ws = ThisWorkbook.Worksheets("Sheet1")
Set range1 = ws.Range("A1:A5")
Set rng = ws.Range("B1")
With rng.Validation
.Delete 'delete previous validation
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
Formula1:="='" & ws.Name & "'!" & range1.Address
End With
Notez que lorsque vous utilisez Dim range1, rng As range
, seul rng
a le type de Range
, mais range1
est Variant
. C'est pourquoi j'utilise Dim range1 As Range, rng As Range
.
La signification des paramètres que vous pouvez lire est MSDN , mais en bref:
Type:=xlValidateList
signifie le type de validation. Dans ce cas, vous devez sélectionner une valeur dans la liste.AlertStyle:=xlValidAlertStop
spécifie l'icône utilisée dans les boîtes de message affichées lors de la validation. Si l'utilisateur entre une valeur hors de la liste, il recevra un message d'erreur.Operator:= xlBetween
est impair. Il ne peut être utilisé que si deux formules sont fournies pour la validation.Formula1:="='" & ws.Name & "'!" & range1.Address
pour la validation des données de liste fournit l’adresse de la liste avec les valeurs (au format =Sheet!A1:A5
)