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 WithMais 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 WithBonjour à 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 SubCordialement,
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 SubCe 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 Subil 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 ;)