Ajout automatique nom dans menu déroulant

Résolu/Fermé
nlbmoi Messages postés 434 Date d'inscription samedi 26 août 2006 Statut Membre Dernière intervention 3 décembre 2023 - 14 févr. 2014 à 17:10
Le Pingou Messages postés 12044 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 25 avril 2024 - 19 août 2014 à 16:09
Bonjour,

J'ai une base de données dans une feuille de calcul avec des noms ; dans une autre feuille je crée un menu déroulant avec les noms de ma base de données.
Je souhaiterais faire en sorte que si je tape un nom dans ma cellule au menu déroulant différent d'un de ceux de la liste, celui-ci s'ajoute dans ma base de données me permettant ainsi de le retrouver dans mon menu déroulant.
Si quelqu'un peut m'aider.

merci

10 réponses

Le Pingou Messages postés 12044 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 25 avril 2024 1 426
14 févr. 2014 à 17:58
Bonjour,
Au passage, s'il s'agit juste du nom il faut l'ajouter dans la base de données.

0
Gyrus Messages postés 3334 Date d'inscription samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016 523
14 févr. 2014 à 17:59
Bonjour,

Une proposition
https://www.cjoint.com/?DBor6ozzzUy

A+
0
nlbmoi Messages postés 434 Date d'inscription samedi 26 août 2006 Statut Membre Dernière intervention 3 décembre 2023 24
17 févr. 2014 à 17:13
Bonjour

Merci de ta réponse qui convient parfaitement à ce que je souhaite. Pourrais-tu détailler un peu les lignes de code (pour que je puisse comprendre ce que tu as fait et que je le refasse !)
Merci encore.
0
Gyrus Messages postés 3334 Date d'inscription samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016 523
17 févr. 2014 à 17:52
Bonjour,

J'ai ajouté quelques commentaires pour la compréhension
Private Sub Worksheet_Change(ByVal Target As Range)
'Si la plage modifiée concerne plusieurs cellules, on sort de la procédure
If Target.Count > 1 Then Exit Sub
'Si la modification concerne la cellule A1
If Target.Address = "$A$1" Then
With Worksheets("Base")
'Si la valeur de A1 n'est pas une valeur de la plage nommée "Noms"
If Application.CountIf(.Range("Noms"), Target) = 0 Then
'On ajoute cette valeur à la plage nommée "Noms"
.Range("A" & Rows.Count).End(xlUp).Offset(1) = Target
End If
End With
End If
End Sub

A noter que la plage nommée "Noms" est une plage dynamique définie par la formule
=DECALER(Base!$A$1;;;NBVAL(Base!$A:$A))


A+
0
nlbmoi Messages postés 434 Date d'inscription samedi 26 août 2006 Statut Membre Dernière intervention 3 décembre 2023 24
17 févr. 2014 à 22:34
Je comprends mieux maintenant sauf peut-être la première ligne "Si la plage modifiée concerne plusieurs cellules, on sort de la procédure" : je ne vois pas à quoi ça correspond.
Est-ce qu'il est possible d'avoir une saisie pré-automatique : par exemple, si ma liste est longue et que je souhaite sélectionner un élément en bas de la liste, peut-on taper la ou les premières lettres et faire en sorte que n'apparaissent que les éléments de la liste commençant par ses lettres ?

Merci de prendre du temps en tout cas.
0

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

Posez votre question
Gyrus Messages postés 3334 Date d'inscription samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016 523
18 févr. 2014 à 10:54
Bonjour,

La première ligne "Si la plage modifiée concerne plusieurs cellules, on sort de la procédure" permet d'éviter de générer une erreur si l'opérateur effectue une modification sur un ensemble de cellules (sélection d'une plage et effacement par exemple).

Pour la saisie semi-automatique tu peux utiliser la méthode proposée dans ce lien
https://www.commentcamarche.net/applis-sites/bureautique/549-creer-des-listes-deroulantes-dans-excel/

En voici une application.
https://www.cjoint.com/c/DBskZbAgaP4
Pour obtenir un fonctionnement satisfaisant, il faut que a liste soit triée. J'ai donc ajouté un tri automatique dans la procédure.

A+
0
nlbmoi Messages postés 434 Date d'inscription samedi 26 août 2006 Statut Membre Dernière intervention 3 décembre 2023 24
18 févr. 2014 à 11:09
Bonjour

J'ai testé le fichier que tu as envoyé : lorsque je sélectionne un élément de la liste, j'ai une erreur de compilation et il me surligne xlSortOnValues
0
Gyrus Messages postés 3334 Date d'inscription samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016 523
18 févr. 2014 à 11:31
Essaie avec ce code

Private Sub Worksheet_Change(ByVal Target As Range)
'Si la plage modifiée concerne plusieurs cellules, on sort de la procédure
If Target.Count > 1 Then Exit Sub
'Si la modification concerne la cellule A1
If Target.Address = "$A$1" Then
Application.ScreenUpdating = False
With Worksheets("Base")
'Si la valeur de A1 n'est pas une valeur de la plage nommée "l_noms"
If Application.CountIf(.Range("l_noms"), Target) = 0 Then
'On ajoute cette valeur à la plage nommée "l_noms"
.Range("A" & Rows.Count).End(xlUp).Offset(1) = Target
End If
'On effectue le tri de la liste
.Range("l_noms").Sort Key1:=.Range("A1"), Order1:=xlAscending, Header:=xlNo, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
End With
End If
End Sub

A+
0
nlbmoi Messages postés 434 Date d'inscription samedi 26 août 2006 Statut Membre Dernière intervention 3 décembre 2023 24
18 févr. 2014 à 17:38
Re

Le code marche nickel.
J'ai essayé de le mettre à ma sauce pour l'adapter à mon fichier mais ça ne marche pas : je joins mon fichier https://www.cjoint.com/?3BsrFCTaNPC
SUr mon fichier :
- j'ai plusieurs listes de choix : une pour les clubs (qui couvrent 2 colonnes dans la 1ere feuille), une pour les arbitres (qui couvrent 2 colonnes dans la 1ere feuille) et une pour les marqueurs (pour les autres, la liste est connue, je n'ai pas besoin de l'ajouter via la première feuille).
- j'aimerais que la pré-saisie et l'ajout d'un nom dans une liste soit possible quelque soit la ligne dans une même colonne (par ex, comme je vais avoir plusieurs matchs, j'aurais plusieurs lignes et j'aimerais pouvoir faire en sorte que l'ajout dans une liste se vérifie pour chaque ligne saisie)

Merci beaucoup pour ton aide
0
Gyrus Messages postés 3334 Date d'inscription samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016 523
19 févr. 2014 à 11:11
0
nlbmoi Messages postés 434 Date d'inscription samedi 26 août 2006 Statut Membre Dernière intervention 3 décembre 2023 24
19 févr. 2014 à 15:51
Merci pour ta réactivité !
J'ai réussi à tout mettre à jour.
Il y a juste une attention à avoir : il faut décocher la case "Saisie semi-automatique d'entrées de cellule" dans les options d'Excel sinon la liste de choix se restreint aux données déjà présentes dans la colonne.
Merci beaucoup pour tout.
0
Bonjour, j'ai suivi votre conversation et je travaille sur un fichier pour mon stage qui me pose le même problème.

Le code a l'air bien mais je m'y connais pas suffisamment pour le modifier tout seul. Je voulais juste savoir si il était possible que lorsque l'utilisateur rentre à la main une nouvelle donnée, un message apparaisse du genre "cette donnée ne fait pas partie de la liste. Souhaitez-vous l'ajouter?" avec "oui" ou "annuler" en boutons.

Par ce petit message j'espere éviter l'ajout automatique de tout et n'importe quoi dans les listes déroulantes, au moins ca évite les coquilles.

Comment faire pour intégrer ce message dans le code proposé par Gyrus?

Merci d'avance
0
Le Pingou Messages postés 12044 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 25 avril 2024 1 426
Modifié par Le Pingou le 19/08/2014 à 16:09
Bonjour,
Juste au passage, vous pouvez compléter le code de Gyrus (salutations) comme suit :
Juste après la ligne :
If Application.CountIf(Liste, Target) = 0 Then
Vous insérez ces 2 lignes de code :
choix = MsgBox("Cette donnée [" & Target & "] ne fait pas partie de la liste." & Chr(13) & " Souhaitez-vous l'ajouter?", vbYesNo, "Votre choix est nécessaire..!")
If choix = vbNo Then Exit Sub


Salutations.
Le Pingou
0