[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" de poser une question. Cela fait 4 heures que je pédale dans la choucroute pour un truc qui me semble bête comme chou. J'ai fait un nombre incalculable de recherches pour trouver une réponse, mais en vain, ou alors je cherche mal

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 Sub

J'espère que c'est plus ou moins clair D'avance merci à tous ceux qui prendront le temps de me lire et/ou me répondre Et je débute en VBA et je n'ai aucune notion de programmation, donc si vous pouviez me donner des explications qui ne soient pas trop alambiquées ça serait vraiment cool !

226liste-deroulante.xlsm (31.92 Ko)

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 Sub

Waouw, 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.Address

J'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 (partie surlignée) !

  • 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
Rechercher des sujets similaires à "vba liste deroulante donnees variable feuille"