Variable dans macro créant un menu déroulant

Résolu
Bonjour,

Je ne sais pas si le titre est assez explicite, difficile de résumer en quelques mots !
Pour être précis, je crée un menu déroulant en VBA (me suis servi de l'enregistreur), dont la plage de cellules est - pour l'instant - fixée.

En parallèle, j'ai un UserForm qui contient plusieurs TextBox.
Les valeurs entrées par l'utilisateur correspondent à la plage de cellules à valider, qui devront apparaitre par la suite dans le menu déroulant.

Donc ma question est : Comment introduire des variables à l'intérieur de la macro qui crée le menu déroulant ?

Voici mon code :

With Selection.Validation
                                .delete
                                .Add Type:=xlValidateList, AlertStyle:=xlValidAlertWarning, Operator _
                                :=xlBetween, Formula1:="=X120:X134"
                                .IgnoreBlank = False
                                .InCellDropdown = True
                                .InputTitle = ""
                                .ErrorTitle = "Valeur inexistante"
                                .InputMessage = ""
                                .ErrorMessage = _
                                "Cette valeur ne fait pas partie de la liste." & Chr(10) & "Etes-vous sur de vouloir continuer ?"
                                .ShowInput = True
                                .ShowError = True
                            End With


Je ne sais même pas si c'est vraiment possible d'ailleurs ?
J'ai essayé de mettre ma variable sous la forme UserForm1.TextBox1.Value, mais ça ne marche pas.

Sachant que j'ai testé avec un MsgBox les valeur contenues dans les TextBox et tout est ok de ce côté la.
Auriez-vous une idée ...?

Merci pour votre aide !

Cordialement,
Polochon

3 réponses

  1. Modérateur
    Bonjour,
    Il suffit de déclarer une simple variable String (chaine de caractères) et de lui affecter la valeur souhaitée :

    Dim Plage As String
    Plage = "=A10:A20" 'ici tu mets ce que tu veux obtenir dans ta Formula1 ci-dessous
    'ça peut être aussi de la forme : Plage = "=" & TextBox1.Value
    'ce qui te permet d'écrire dans ton textbox1 : A10:A20 et de travailler sur cette plage...
    With Selection.Validation
                    .Delete
                    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertWarning, Operator _
                                    :=xlBetween, Formula1:=Plage  
                    .IgnoreBlank = False
                    .InCellDropdown = True
                    .InputTitle = ""
                    .ErrorTitle = "Valeur inexistante"
                    .InputMessage = ""
                    .ErrorMessage = _
                                    "Cette valeur ne fait pas partie de la liste." & Chr(10) & "Etes-vous sur de vouloir continuer ?"
                    .ShowInput = True
                    .ShowError = True
    End With
    --
    Cordialement,
    Franck P
    1. Salut Franck, et merci beaucoup pour ton aide !

      J'ai donc fait :

      Dim plage As String
      plage = "=" & UserForm11.TextBox1.Value: UserForm11.TextBox2.Value ""

      .Add Type:=xlValidateInputOnly, AlertStyle:=xlValidAlertWarning, _
      Operator:=xlBetween, Formula1:=plage

      Mais j'obtiens une erreur qui me dit "Utilisation incorrecte de la propriété", en faisant référence à :

      plage = "=" & UserForm11.TextBox1.Value: UserForm11.TextBox2.Value ""

      (Le .Value du TextBox2 en fait, qui est surligné)

      Je fais erreur dans la syntaxe ?
      1. Modérateur
        Essaye plutôt ceci : (je précise que je n'ai pas testé...)
        plage = "=" & UserForm11.TextBox1.Value & ":" & UserForm11.TextBox2.Value 

        La saisie dans les textbox doit être simplement, par exemple :
        A1
        A10
        sans guillemets, sans : , sans rien d'autre...
        fais ceci pour vérifier :
        Dim plage As String 
        plage = "=" & UserForm11.TextBox1.Value & ":" & UserForm11.TextBox2.Value
        MsgBpx plage

        Le message qui apparait doit te donner : =A1:A10
    2. C'est bon ça marche !
      Yeeeeeeeees !

      Je te remercie sincèrement, tu m'enlèves un sacré épine du pied ! :)

      Informadream