web-dev-qa-db-fra.com

Comment ajouter la validation de données à une cellule à l'aide de VBA

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"
21
Gajju

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.
  • dans votre code d'origine, 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)
31
Dmitry Pavliv