[Excel Liste déroulante VBA [Résolu/Fermé]

Signaler
Messages postés
405
Date d'inscription
mercredi 11 juillet 2007
Statut
Membre
Dernière intervention
11 novembre 2017
-
Messages postés
23558
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
12 octobre 2020
-
Bonjour,

J'aimerai savoir comment faire pour créer une liste déroulante à partir de valeurs présentes dans une même feuille en VBA.
Je sais la créer à partir de "données> validation> liste" mais j'aimerai pouvoir la créer directement à l'aide d'une macro.

En fait dans mon programme, l'utilisateur est invité a saisir des données concernant des produits et après une vérification le programme indique quels sont les champs erronés (ils sont comparés avec une base de données située sur la même feuille).
Et ce que je souhaite c'est qu'après cette vérification, les cellules des champs erronés dispose d'une liste déroulante proposant à l'utilisateur de choisir parmi les choix de la base de donnée.

Ex : Je demande tout d'abord la marque du téléphone de l'utilisateur. Son choix est libre dans un premier temps. Si il rentre "dsijf" cette marque n'étant pas répertoriée, le champ correspondant est affiché en rouge et j'aimerai pouvoir mettre une liste déroulante dans ce champ afin qu'il est le choix entre les marques répertoriée plus bas dans la feuille.


J'espère ne pas avoir été trop confus :P

Merci d'avance.

ps: je suis sous Excel 2003


5 réponses

Messages postés
867
Date d'inscription
mardi 24 mai 2011
Statut
Membre
Dernière intervention
8 février 2015
202
'Sélection de la case qui doit contenir la liste
Cells(1, 5).Select
    With Selection.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="=$A$1:$A$8"
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = "Sélection"
        .ErrorTitle = ""
        .InputMessage = "Choisissez une valeur"
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With
8
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 60511 internautes nous ont dit merci ce mois-ci

Messages postés
867
Date d'inscription
mardi 24 mai 2011
Statut
Membre
Dernière intervention
8 février 2015
202
  ActiveSheet.DropDowns.Add(246, 28.5, 57, 15.75).Select
    With Selection
        .ListFillRange = "$A$1:$A$8"
        .LinkedCell = "$A$9"
        .DropDownLines = 8
        .Display3DShading = False
    End With


Entre les parenthèse se trouve la taille et la position de la liste
listfillrange se trouve la plage de cellule qui vont remplir la liste
.linkedcell se trouve la cellule qui va prendre la valeur sélectionner dans la liste
dropdownline= nombre de ligne
display3dsading= image ombré en 3d (visuel)
Messages postés
23558
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
12 octobre 2020
6 402
Bonsoir,

Le mieux est de faire ta validation avec =liste1
liste1 étant un nom que tu auras défini sur une autre feuille 'Listes', sur A1:A3 par exemple.

En vba tu inscris ta liste validée dans Listes!A1:A15 (si tu as 15 éléments) et tu redéfinis la plage de la liste :
ActiveWorkbook.Names.Item("liste1").RefersTo = [Listes!A1:A15]

eric
tres bien vu comme contournement ;)
> ced
bonjour,
je débute en langage VBA, j'ai pas tout tout saisi??? tu le mets où cette action???

ActiveWorkbook.Names.Item("liste1").RefersTo = [Listes!A1:A15]

dans ce qu'à proposer :

Christof422 19 juin 2012 à 17:01
ActiveSheet.DropDowns.Add(246, 28.5, 57, 15.75).Select
With Selection
.ListFillRange = "$A$1:$A$8"
.LinkedCell = "$A$9"
.DropDownLines = 8
.Display3DShading = False
End With
Messages postés
23558
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
12 octobre 2020
6 402
Bonjour,

Ce sont 2 propositions indépendantes.
Pour moi il est plus simple de faire la validation manuellement avec =Liste une fois pour toute, et de redéfinir juste le nom quand la liste change.

Mais si c'est une simple liste que tu modifies manuellement pas besoin de vba.
Créer un nom dynamique qui s'adapte au nombre de saisies et c'est bon.
Ex : https://www.cjoint.com/c/DKDqqKVXW9J

eric
Messages postés
405
Date d'inscription
mercredi 11 juillet 2007
Statut
Membre
Dernière intervention
11 novembre 2017
222
Merci bien, sur le principe c'est ce que je cherche. Mais est-il possible d'avoir une liste "incrustée" dans la cellule et non une "image" au premier plan.
C'est assez délicat de gérer la position avec ses coordonnées.
Messages postés
405
Date d'inscription
mercredi 11 juillet 2007
Statut
Membre
Dernière intervention
11 novembre 2017
222
Merci beaucoup Christof422 c'est exactement ce que je cherchais !!

Merci pour la rapidité et l'efficacité ;) je marque le sujet "résolu"

A+
Messages postés
23558
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
12 octobre 2020
6 402
Bonjour,

tu n'as qu'à regarder ma proposition au dessus qui n'a eu aucun commentaire de ta part...
eric
Messages postés
405
Date d'inscription
mercredi 11 juillet 2007
Statut
Membre
Dernière intervention
11 novembre 2017
222
J'ai essayé de voir ta solution mais j'ai pas tout suivi en fait.
Je suis (totalement) débutant dans Excel et je dois faire quelques modifications sur des fichiers excel donc je récupère sur le net les différentes syntaxes etc..

En fait là je dois maintenant copier une partie du tableau mais sans les listes dans une nouvelle feuille. J'ai réussi à créer la feuille, sélectionner la plage de mon tableau (contenant les listes), le copier dans la nouvelle feuille mais j'aimerai pouvoir coller uniquement le texte et la mise en forme.
Peut être qu'il existe un collage spécial pour ça, je vois pas trop comment m'y prendre.

Merci pour vos réponses :)

edit: j'avais bien vu ta solution mais la deuxième me semblait plus simple étant donné que le code fonctionnait directement :P
Messages postés
405
Date d'inscription
mercredi 11 juillet 2007
Statut
Membre
Dernière intervention
11 novembre 2017
222
Bon, avec l'enregistrement de macro j'ai bidouillé les validations et ça fonctionne même si je pense que c'est un code bien bourrin.
Avec l'experience je pourrai mieux faire je pense :P
Messages postés
23558
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
12 octobre 2020
6 402
edit: j'avais bien vu ta solution...
et dans ce cas le merci on se le carre au c...
ok, je note ton pseudo pour m'en rappeler.
eric
Messages postés
405
Date d'inscription
mercredi 11 juillet 2007
Statut
Membre
Dernière intervention
11 novembre 2017
222
Le Merci pour la rapidité et l'efficacité ;) t'était destiné puisque j'ai remercié Christof dans la phrase précédente....

Enfin bon quoi qu'il en soit, j'ai toujours remercier tout ceux qui répondait intelligemment à mon problème et tu en fais partie.
Si tu veux ajouter mon pseudo à ta black list, libre à toi de le faire :)

Sur ce je pense que je n'ai pas grand chose à ajouter.
Ah si ! MERCI BEAUCOUP ERIC Pour ta rapidité de réponse et ton efficacité :)