Liste de Validation en VBA prenant en source une variable Range

Bonjour à tous,

je suis nouveau en VBA mai aussi sur ce Forum, j'espère donc ne pas avoir crée un sujet qui à déjà été traiter.

Mais si je crée ce sujet c'est que j'ai passer déjà plusieurs heures à chercher sur ce forum et aussi sur internet en générale.

Voici donc mon problème :

je veux crée une liste de validation de donnée en VBA, jusque là je crois avoir trouver comment faire :

With Range("V1").Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="=S2:S6"
        .IgnoreBlank = True
        .InCellDropdown = True    
        .ShowInput = True
        .ShowError = True
    End With

Mais j'aimerais avoir la possibilité de remplacer la plage de valeur qui sert de source a la liste (ici "S2:S6") par une variable car dans le fichier que je souhaite crée cette plage vas bouger.

j'ai essayer quelque chose comme ça mais cela ne fonctionne pas :

Dim plage as range
set plage = Range("S2:S6")

With Range("V1").Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="=plage"
        .IgnoreBlank = True
        .InCellDropdown = True        
        .ShowInput = True
        .ShowError = True
    End With

Bonjour à tous,

A tester...

Sub test_Liste()
 Dim plage As Range, nom As String

   With Worksheets("Feuil1") 'nom de la feuille à adapter
    Set plage = .Range("S2:S6"): nom = .Name
     With .Range("V1").Validation
     .Delete
     .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
      xlBetween, Formula1:="=" & nom & "!" & plage.Address
     .IgnoreBlank = True
     .InCellDropdown = True
     .ShowInput = True
     .ShowError = True
     End With
    End With
End Sub

Cordialement,

Milles merci,

Vraiment super c'est exactement ce qu'il me fallait.

je me suis juste permis de remplacer .Range("S2:S6"): nom = .Name

par une variable comme suit

Sub liste()

Dim plage As Range, nom As String
Dim test As Range
Set test = Range("R2:R6")

   With Worksheets("Feuil1") 'nom de la feuille à adapter
    Set plage = test: nom = .Name
     With .Range("V1").Validation
     .Delete
     .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
      xlBetween, Formula1:="=" & nom & "!" & plage.Address
     .IgnoreBlank = True
     .InCellDropdown = True
     .ShowInput = True
     .ShowError = True
     End With
    End With

End Sub

Ce qui me permet d'utiliser ton code d'un seul bloque et de modifier la plage de cellule a n'importe qu'elle moment grasse a ma variable test.

Je ne sais pas si c'est très pertinent mais dans mon code complet ça fonctionne parfaitement.

en tout cas encore merci de ta réponse et super rapide qui plus es ^^.

Je me permet de revenir suite à un petit problème inattendue la solution ne doit pas être compliquer mais je ne trouve pas, mon problème est le suivant :

lorsque j'active ma macro dans une feuille ou le nom de cette dernier contiens un espace ou un caractère spéciale (-=+,) la macro plante et m'indique une erreur '1004' Erreur définie par l'application ou par l'objet

ci dessous mon code complet :

Sub liste_trigrame_testeurs()

Dim plage As Range, nom As String
Dim test As Range
Dim liste_trigrame As Range
Dim testeur As Range

For Each testeur In ActiveSheet.UsedRange 

    Select Case testeur

        Case "*Testeurs R486*"
            Set liste_trigrame = Range(testeur.Offset(1, -1), testeur.Offset(1, 2))

                With ActiveSheet 'nom de la feuille à adapter
                    Set plage = liste_trigrame: nom = .Name
                     With .Range(testeur.Offset(-11, -1), testeur.Offset(-15, -1)).Validation
                     .Delete
                     .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                      xlBetween, Formula1:="=" & nom & "!" & plage.Address
                     .IgnoreBlank = True
                     .InCellDropdown = True
                     .ShowInput = True
                     .ShowError = True
                     End With
                End With
            End Select
Next testeur

End Sub

il me permet de générer une liste de validation de donnée en partant d'une cellule dans la qu'elle est inscrit un texte spécifique.

Je vous joint mon fichier pour aider.

Bonjour,

met le nom entre 2 simples quotes ' '
..., Formula1:="='" & nom & "'!" & plage.Address
eric

Bonjour merci eriiic ça marche parfaitement, je vais mettre en résolut car techniquement je n'ai plus de problème.

Mais je n'ai pas vraiment compris ce que faisais cette partie du code exactement "='" & nom & "'!" & plage.Address, je me doute qu'elle stipule le nom de la plage a utiliser mais sans plus je serais intéresser par quelque explication pour mieux comprendre.

Bonsoir

pour vba un espace est un séparateur des mots clés.
S'il y en a dans le nom de ta feuille, vba est perdu dans l'analyse.
Avec ce code Ma Feuille qui le perturbe s'écrit 'Ma Feuille'.
Les ' ' lui permettent de voir le début et la fin de la chaine, l'espace en faisant partie ne le gêne plus.

Pour valider le sujet coche plutôt le post de xorsankukai, celui qui résout ta question initiale.
Mon apport a été bien modeste
eric

Bonjour Eriiic,

Merci pour cette explication c'est effectivement beaucoup plus claire maintenant.

En effet xorsankukai a apporter la solution à mon problème de départ et je l'en remercie une fois de plus,

Mais sans ta participation, cette solution je n'aurais pas pue l'appliquer pleinement a mon tableau.

Donc je rend a César ce qui appartient a César en validant vos poste a tout les deux

bonne continuation et peux être à bientôt dans un prochain poste ;)

Rechercher des sujets similaires à "liste validation vba prenant source variable range"