[Excel Liste déroulante VBA

Résolu/Fermé
Triton circus
Messages postés
405
Date d'inscription
mercredi 11 juillet 2007
Statut
Membre
Dernière intervention
11 novembre 2017
- 19 juin 2012 à 16:17
eriiic
Messages postés
24408
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
23 juin 2022
- 29 nov. 2014 à 16:10
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


A voir également:

5 réponses

Christof422
Messages postés
867
Date d'inscription
mardi 24 mai 2011
Statut
Membre
Dernière intervention
8 février 2015
212
20 juin 2012 à 09:02
'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
Christof422
Messages postés
867
Date d'inscription
mardi 24 mai 2011
Statut
Membre
Dernière intervention
8 février 2015
212
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


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)
6
eriiic
Messages postés
24408
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
23 juin 2022
7 089
19 juin 2012 à 23:51
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
4
tres bien vu comme contournement ;)
0
worship > ced
29 nov. 2014 à 15:02
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
0
eriiic
Messages postés
24408
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
23 juin 2022
7 089
29 nov. 2014 à 16:10
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
0
Triton circus
Messages postés
405
Date d'inscription
mercredi 11 juillet 2007
Statut
Membre
Dernière intervention
11 novembre 2017
245
19 juin 2012 à 18:45
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.
2

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Triton circus
Messages postés
405
Date d'inscription
mercredi 11 juillet 2007
Statut
Membre
Dernière intervention
11 novembre 2017
245
20 juin 2012 à 11:28
Merci beaucoup Christof422 c'est exactement ce que je cherchais !!

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

A+
0
Christof422
Messages postés
867
Date d'inscription
mardi 24 mai 2011
Statut
Membre
Dernière intervention
8 février 2015
212
20 juin 2012 à 11:32
Dr, lorsque tu a un problème pense à utiliser l'enregistrement de macro et regarde le code formulé par la suite.
0
Triton circus
Messages postés
405
Date d'inscription
mercredi 11 juillet 2007
Statut
Membre
Dernière intervention
11 novembre 2017
245
20 juin 2012 à 14:48
oui j'y penserai :)
Et dernière question, est il possible de mettre les éléments de la liste sur une autre feuille ?
Dans mon exemple précédent, mettre dans une seconde feuille un tableau avec le nom des marques.

Merci
0
eriiic
Messages postés
24408
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
23 juin 2022
7 089
Modifié par eriiic le 20/06/2012 à 14:52
Bonjour,

tu n'as qu'à regarder ma proposition au dessus qui n'a eu aucun commentaire de ta part...
eric
0
Triton circus
Messages postés
405
Date d'inscription
mercredi 11 juillet 2007
Statut
Membre
Dernière intervention
11 novembre 2017
245
Modifié par Triton circus le 20/06/2012 à 16:51
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
0
Triton circus
Messages postés
405
Date d'inscription
mercredi 11 juillet 2007
Statut
Membre
Dernière intervention
11 novembre 2017
245
20 juin 2012 à 17:13
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
0