Création de liste déroulante via fonction VBA

Bonjour les gens

J'aurais aimé savoir si il était possible de créer une liste déroulante via fonction vba.

Je m'explique. Pour l'instant, j'ai créé des listes déroulantes manuellement (création via gestionnaire des noms ...). Le problème pour l'utilisateur, c'est que dans le cas présent, si il souhaite rajouter une valeur à la liste déroulante (ce qui peut être courant), il est obligé de faire les modifications dans le gestionnaire des noms de façon à modifier la plage de sélection.

J'aurais voulu savoir si il était possible de créer une fonction vba qui permettrait de créer une liste déroulante dans n'importe quelle cellule en lui passant en paramètre la première cellule de la liste (et que la sélection se fasse automatiquement jusqu'à la dernière cellule non vide de la colonne de cette première cellule).

J'ai commencé à chercher de mon côté: je suis tombé sur des notions de "dropdown" inconnu pour moi ou sur des parties de code du type:

    With Selection.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="=$A$1:$A$9"
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With

Mais je ne vois pas comment mettre ça sous forme de fonction (si possible).

Merci pour votre aide

bonjour

pourquoi penser que VBA va tout solutionner ?

moi je fais hyper-simple : les listes déroulantes sont définies sur 200 lignes si par ex on débute avec 10 mots et qu'on pense en ajouter 1/mois.

ou 1000 lignes si on pense plus

tu peux aussi créer des noms dynamiques, c'est plus propre. Mais plus complexe.

Salut jmd,

J'ai bien pensé définir une centaine de ligne dans la définition de ma plage dans le gestionnaire de nom, mais je me retrouve avec une liste déroulante contenant "X" lignes vides.

re

c'est un petit inconvénient qu'on accepte 'moi je l'impose à mes clients, car c'est tellement simple)

mais voici de vraies solutions propres :

http://www.lecfomasque.com/excel-creer-une-liste-de-validation-dynamique-avec-les-donnees-dune-autre-feuille/

y compris au travers d'un "mettre sous forme de tableau" que je pense moi aussi bientôt adopter pour faire joli et propre.

Merci pour ton aide.

Je pense effectivement que je me complique la vie pour pas grand chose.

Bonne soirée

Bonsoir le fil, bonsoir le forum,

En pièce jointe deux petits exemples :

Exemple 1 : Nom dans onglet Données

La liste de validation de données de la plage est créé à l'aide d'une plage nommée dynamiquement.

Voir le Gestionnaire de noms et la formule DECALER qui permet d'obtenir le résultat.

C'est pour moi la solution idéale.

Exemple 2 : Catégorie dans l'onglet Données

J'ai commencé par faire la première validation de données manuellement

ensuite, si on ajoute/supprime une donnée dans la liste, la macro événementielle Change modifie la liste de validation automatiquement...

C'est tout aussi efficace mais nécessite du VBA qui en effraie certains...

22yuplop-v01.xlsm (18.92 Ko)
ThauThème a écrit :

Bonsoir le fil, bonsoir le forum,

C'est tout aussi efficace mais nécessite du VBA qui en effraie certains...

salut ThauThème,

VBA devient complexe dès qu'il y a 3 ou 4 macros qui agissent dans un fichier.

VBA n'est pas un bon langage (trop Basic, pas Visual du tout et pas assez pro).

VBA nécessite beauuuuucoup de temps de développement et le résultat n'est pas à l'abri de problèmes.

VBA n'est pas "fiable", c'est à dire stable d'un ordinateur à un autre (selon les OS).

d'ailleurs Excel est développé en C++ et non en VBA

Bonjour le fil, bonjour le forum,

jmd a écrit :

VBA n'est pas un bon langage (trop Basic, pas Visual du tout et pas assez pro).

Arf, merci Jmd ! Je comprends enfin pourquoi c'est le seul langage que je connaisse. Je me complais dans ma médiocrité mais faut dire que souvent les vrais pros m'em***dent (contrairement à toi qui m'instruit)...

te fâche pas

je disais pas "pro" au sens de "pas fiable ou pas durable". Rien à voir avec le professionnalisme du développeur.

Tout le monde ici reconnaît ton savoir-faire en VBA. Pas de problème.

Si VBA pose tant de problèmes, ce n'est pas à cause des développeurs, mais à cause de Microsoft qui en est le créateur.

Te voila rassuré.

Reste la question délicate : si tu devais conseiller à un jeune (ton fils ou ta fille par exemple), lui conseillerais-tu d'apprendre VBA ou C++ ?

amitiés excelliennes à toi et à tous

bon dév et bonne journée

Re,

Non, non ! Pas fâché du tout ! Ce que j'ai écrit est la triste réalité.

Je suis complètement autodidacte et ne connais que le VBA. Bien conscient des problèmes que pose ce langage car je le pratique depuis pas mal d'année maintenant, mais malheureusement bien incapable de le comparer à un autre. Alors tu penses bien que quand je réussis une petit bout ce code je me prends pour un vrai programmateur !...

Quant aux conseils pour mon fils, ado, en informatique il est 'ach'ment balèze, surtout en YouTube...

Bonjour les gens et merci pour l'intérêt apporté à mon sujet.

Merci ThauThème pour ton fichier.

J'avais commencé à étudier la question de "plage dynamique" sans toutefois mettre de côté la possibilité VBA.

Dans ton exemple 2, lorsque je rajoute une données dans la colonne C de l'onglet Liste, j'ai une erreur : "Pas de cellules correspondantes" sur la ligne:

With D.Columns(3).SpecialCells(xlCellTypeAllValidation).Validation

Re,

J'ai fait une petite modification sur la ligne concernée et tout fonctionne nickel:

With D.Columns(3).SpecialCells(xlCellTypeVisible).Validation

Merci beaucoup Thauthème, c'est exactement ce que j'avais en tête

Rechercher des sujets similaires à "creation liste deroulante via fonction vba"