[VBA] Liste déroulante à données variable sur autre feuille
Bonjour à toutes et tous !
Après une semaine à lire plein de post pour faire mes débuts en VBA, je suis aujourd'hui "obligée"
Mon souci est le suivant : je cherche à faire une liste déroulante sur les cellules B3 à B55 de la feuille Liste de tâches. Les données qui alimentent cette liste se trouvent sur une autre feuille intitulée Données, sur la colonne A, de A4 à A9999.
Mais afin d'exclure les cellules vides de la liste déroulante, j'ai voulu utiliser ceci:
Worksheets("Données").Range(Range("A4"), Range("A9999").End(xlUp))Cela semble fonctionner, car si je met un .Select derrière ce truc, cela sélectionne bel et bien ma liste de A4 jusqu'à la dernière cellule non vide de la colonne A.
Mais seulement voilà, je ne sais pas comment faire comprendre à ma function (si j'ai bien compris, à Formula1), que je veux cette plage de données variable. J'ai une erreur de données 1004
Voici mon code (il y a également le fichier en pièce jointe), et j'aimerai pouvoir comprendre comment le faire fonctionner:
Sub validationList()
'Définition des variables
Dim userRange As Range
'Définition de la plage de données variable afin d'exclure les cellules vides
Set userRange = Worksheets("Données").Range(Range("A4"), Range("A9999").End(xlUp))
'Liste déroulante pour le choix du chimiste
With Worksheets("Liste de tâches").Range("B5:B33").Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=" & userRange.Address
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = "Sélection"
.ErrorTitle = ""
.InputMessage = "Choisissez une personne"
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
End SubJ'espère que c'est plus ou moins clair
Bonjour
Modifies ta macro
Sub validationList()
'Définition des variables
Dim userRange As Range
'Définition de la plage de données variable afin d'exclure les cellules vides
Set userRange = Worksheets("Données").Range(Worksheets("Données").Range("A4"), Worksheets("Données").Range("A9999").End(xlUp))
'Liste déroulante pour le choix du chimiste
With Worksheets("Liste de tâches").Range("B5:B33").Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=Données!" & userRange.Address
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = "Sélection"
.ErrorTitle = ""
.InputMessage = "Choisissez une personne"
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
End SubWaouw, extra !! Merci beaucoup Banzaï64 !
J'aurai cependant une petite question, peux-tu m'expliquer ce que ça fait ce =Données! ? Je "comprend" à quoi il sert, mais je peine à saisir pourquoi on doit le mettre
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=Données!"& userRange.AddressJ'aimerai comprendre en fait pourquoi il a besoin d'être mentionnée, alors qu'il est aussi mentionné dans le userRange plus haut. Je ne sais pas si ma question est très clair
Bonjour
La plage de données est située dans la page "Données", c'est pour cela qu'il faut bien marquer la page
Fais l'expérience manuellement de faire une validation de donnée avec des données en dehors de la page
Valable pour 2007 et plus (impossible avec XL 2003)
Regardes dans la validation de donnée tu verras que la page est bien inscrite
Ah oui en effet !
Super, et ben merci beaucoup beaucoup
Bonjour,
Tout d'abord merci pour cette solution, j'ai exactement le même problème et je n'arrive pas à voir d'où vient mon erreur
- J'ai une feuille 11 nommée "Configuration" qui contient des plages de données variables que je souhaite mettre dans une liste déroulante (d'où entre autre le "Range(.Cells(2, 3), .Cells(2, 3).End(xlDown)) )
- J'ai une feuille 1 nommée "Accueil" qui contient la future liste déroulante dans la cellule B11
Je vous remercie par avance
'Définition des variables
Dim Liste As Range
'Définition de la plage de données des activités pour la liste déroulante
With ThisWorkbook.Sheets(11)
Set Liste = .Range(.Cells(2, 3), .Cells(2, 3).End(xlDown))
End With
'Liste déroulante recherche activité dans feuille 1 (accueil)
With ThisWorkbook.Sheets(1).Cells(11, 2).Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=Configuration!" & Liste.Address
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = "Sélection"
.ErrorTitle = ""
.InputMessage = "Choisissez une personne"
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With