Liste déroulante à données variable

Bonjour,

Je me permets de renouveler ce post par une nouveau sujet. J'ai bien trouver une sujet correspondant, mais malgré une demande de ma part sur ce sujet ancien, personne ne m'a répondu

Je sollicite alors votre aide car je n'arrive pas à voir pourquoi cela de fonctionne pas (partie surlignée) !

  • Mon objectif étant de réaliser une liste déroulante avec une plage de données variable (variable Liste)
  • 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

Bonjour,

Hormis que ton code peut être épuré des éléments inutiles (propriétés à leur valeurs par défaut, arguments non utilisés, passage par noms...), on ne peut voir où réside le problème éventuel. On ne voit pas au simple énoncé du code si Liste sera définie ! De même on ne sait si ta procédure, dépourvue d'instruction de déclaration Sub... End Sub) est complète !

Cordialement.

Effectivement autant pour moi !

Voici ma macro, j'obtient toujours l'erreur 1004 sur la partie surlignée.

Sub ActualiserParametres()

'Définition des variables
Dim msg, title As String
Dim reponse As Integer
Dim Liste As Range

msg = "Voulez-vous appliquer les configurations ?"
title = "Confirmation"
reponse = MsgBox(msg, vbYesNo + vbQuestion + vbDefaultButton2, title)

If reponse = vbNo Then         'Si choix utilisateur "Non"
Else

        '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 = "Recherche rapide"
            .ErrorMessage = ""
            .ShowInput = True
            .ShowError = True
        End With

End If

End Sub

Je pourrais enlever toutes les propriétés que je n'ai pas touché du coup ? (je me suis inspiré de l'enregistreur de macro c'est pour ça !)

Je te remercie !

As-tu testé Liste :

       With ThisWorkbook.Sheets(11)
            Set Liste = .Range(.Cells(2, 3), .Cells(2, 3).End(xlDown))
            MsgBox Liste.Address
        End With

pour vérifier ?

Re, oui ça me donne la plage de donnée que je souhaite pourtant (désolé je peux pas joindre le fichier y'a des données confidentielles )

essai

Si la feuille s'appelle bien Configuration (sans espace parasite), je ne vois rien dans ce code qui explique l'erreur.

J'espère que le fichier épuré pourra t'aider à comprendre, car déjà que je ne suis pas expert, je sèche !

Peut-être que je dois mettre le nom de la feuille "configuration" dans une variable aussi ?

Je devrais peut-être revoir ma façon d'utiliser les feuilles ?

Merci beaucoup de ton retour !

20test.xlsm (40.66 Ko)

Bonsoir,

Que le code puisse être mieux écrit, ou plus optimisé, est une chose, s'il peut fonctionner, bien ou mal écrit il fonctionnera, car c'est un autre ordre de problème...

Et ton code fonctionne parfaitement chez moi, sans que j'ai touché à rien... !

Je ne sais pas si tu l'as testé dans ce classeur allégé mais fais-le ! Car si elle fonctionne chez toi, c'est que ton erreur 1004 est due à ton classeur original.

Ce n'est en tout cas pas le code qui provoque l'erreur. L'erreur 1004 est une erreur Excel, pas une erreur VBA, elle peut être due à une opération qu'Excel ne peut pas faire, ou ne peut pas faire dans les conditions où elle survient, ou dans l'environnement au moment de l'exécution. Dans ce cas, on va essayer de l'écrire autrement... il arrive que cela suffise...

Si tu as aussi l'erreur sur le classeur allégé, vérifie que dans tes paramètres macros, Accès approuvé au modèle d'objet du projet VBA soit coché.

Cordialement.

Voilà toujours ta procédure, un peu allégée d'une part, et d'autre part en procédant au nommage de la plage pour mettre le nom en validation à la place de la référence de la plage.

Excel l'acceptera peut-être mieux chez toi.

Sub test()
    Dim Lst As Range
    If MsgBox("Voulez-vous appliquer les configurations ?", vbYesNo + vbQuestion _
     + vbDefaultButton2, "Confirmation") = vbNo Then Exit Sub
    With Worksheets("Configuration")
        Set Lst = .Range(.Cells(2, 3), .Cells(.Rows.Count, 3).End(xlUp))
    End With
    ThisWorkbook.Names.Add "Liste", "=Configuration!" & Lst.Address
    With Worksheets("Accueil").Range("B11").Validation
        .Delete
        .Add xlValidateList, , , "=Liste"
        .InputTitle = "Sélection"
        .InputMessage = "Recherche rapide"
    End With
End Sub

Cordialement.

36adrienv-test.xlsm (34.25 Ko)

Bonsoir,

Super merci !! Tes modifications marches à merveilles !

Par contre juste pour info je n'ai pas réussi à trouver le paramètre macro "Accès approuvé au modèle d'objet du projet VBA soit coché."

Merci encore pour toutes ces explications !

Sur l'onglet Développeur, tu devrais avoir une commande Sécurité des macros, qui te fait accéder directement aux Paramètres des macros. (Sinon en passant par les options : Centre de gestion de la confidentialité > Paramètres du Centre...)

Cordialement.

Rechercher des sujets similaires à "liste deroulante donnees variable"