IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Excel Discussion :

créer une liste déroulante avec autoremplissage [XL-2007]


Sujet :

Excel

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 7
    Points : 6
    Points
    6
    Par défaut créer une liste déroulante avec autoremplissage
    Bonjour,

    Mon titre n'est pas très explicite et je vais résumer ce que je recherche.

    Dans un tableau commercial, il y a bien entendu une colonne avec le nom des clients.
    Chaque ligne correspond a une affaire et jusqu'à présent, on écrit entièrement le nom du client concerné sur chaque ligne dans la cellule qui va bien de la colonne "nom".
    Comme nous sommes plusieurs à utiliser le tableau et que l'on a chacun ses petites manies, il y en a un qui écrit en majuscule, l'autre en minuscule et le dernier qui fait une faute au nom.
    Bilan, impossible de faire de synthèses futures avec option de tri si le même client n'est jamais écrit pareil.
    Voilà le décors.

    Ce que je veux, c'est que dans chaque cellule de la colonne "nom", apparaisse la liste des clients sous forme de liste déroulante et que chacun sélectionne le nom qui va bien. Sa je sais faire, mais ou je bloque et ce que je cherche a faire, c'est un système qui me permet, au cas ou le client ne soit pas rentré (nouveau client), que l'on l'écrive dans cette même cellule, celle ou devrait se mettre le nom choisi si on avait l'avait pris par le biais de la liste déroulante et que ce nom s'ajoute automatiquement à la liste des noms déjà rentrés pour pouvoir le retrouver, sous la même forme, la prochaine fois par le biais de la liste.

    j'espère ne pas avoir était trop brouillon dans mon explication.

    Ce que j'avais trouvé au préalable, c'est que j'avais créé une liste des noms des clients dans une colonne cachée puis par la biais de "validation" etc..., on voyez les noms dans la liste déroulante. Le gros problème c'est que lorsque l'on veut ajouter le nom d'un nouveau client, faut retourner dans cette colonne, l'ajouter et revenir ensuite sur la feuille de saisie initiale... Les collègues ne veulent pas de ce système, trop lourd.

    merci de vos conseils

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Âge : 61
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 563
    Points : 1 691
    Points
    1 691
    Par défaut
    voici ce que tu peux faire
    créer une feuille masquée .nommée parametre pour l'exemple
    A1 est écrit clients en entete donc la liste client commence en A2.
    tu nomme cette liste avec une fonction décaler pour qu'elle soit dynamique et prenne en compte les nouveaux clients
    gestionnaire de nom :listeclients
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    =DECALER(Paramètres!$A$2;;;NBVAL(Paramètres!$A:$A)-1)
    pour chaque cellule de la colonne noms, évidement, tu place validation de donnée: liste : = listeclients

    puis tu insere ce code dans le code de la feuille
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    Private Sub Worksheet_Change(ByVal Target As Range)
    Set I = Application.Intersect(Range("b2:b15"), Range(Target.Address))
    If Not I Is Nothing Then
            If Target <> "" Then
            p = Target.Value
                    If IsError(Application.Match(Target.Value, [les_plats], 0)) Then
                            If MsgBox("Ce client n'existe pas dans la liste. voulez vous l'ajouter?", vbYesNo) = vbYes Then[listeclient].End(xlDown).Offset(1, 0) = Target.Value
                            Sheets("Paramètres").[listeclient].Sort key1:=Sheets("Paramètres").Range("A2")
                            Else
                            Application.Undo
                            End If
                End If
                 End If
                   End If
    End Sub
    au final, si l'inscription est dans la liste, il l'accepte, si elle ne l'est pas, il te demande a l'ajouter, si c'est une erreur, il reviens a l'ffichage précédent
    bon dimanche

    ps: pour moi b2:b15 est l'endroit ou l'on écrit les nom, tu corrige a ta guise

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Points : 2 443
    Points
    2 443
    Par défaut
    Salut pascal38 et le forum
    Un truc m'interpelle :
    Comme nous sommes plusieurs à utiliser le tableau et que l'on a chacun ses petites manies, il y en a un qui écrit en majuscule, l'autre en minuscule et le dernier qui fait une faute au nom.
    Quelque soit la méthode employée, si tu écris avec des fautes, le nom sera différent s'il est écrit différemment => il sera reconnu par Excel comme nouveau nom. Et tu auras donc deux noms pour un seul client.

    Faut arrêter d'espérer qu'Excel va résoudre tous tes problèmes... Impose que seule, une personne peut modifier ta liste, et assures-toi qu'elle ne soit pas quelqu'un qui espère que tout va se faire tout seul. Et si les autres ne sont pas d'accord, demandent leur "la solution" et n'hésite pas à la critiquer aussi violemment.

    Excel peut résoudre des problèmes logiques. Pas des problèmes d'orthographe de noms propres. Quelque soit le système que tu emploieras, Excel ne corrigera pas un "sabotage" qu'il soit volontaire ou involontaire!!!
    A+

  4. #4
    Expert confirmé
    Avatar de pc75
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3 662
    Points : 4 047
    Points
    4 047
    Par défaut
    Bonjour,

    Tu places le curseur dans la colonne et tu fais Alt + Flèche bas.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Bonjour à tous,

    D'abord, merci de vos réponses.

    Pour Gorfael, j'ai bien noté les pertinences de ta réflexion et j'y adhère sans réserve.
    cependant, ce n'est pas si simple et la gestion humaine au sein d'une entreprise et sans doute la partie la plus difficile et délicate et c'est pas toujours évident de faire passer les messages....

    je m'y attéle et ne desepére pas.

    je vais essayer les techniques indiquées dans vos posts et je vous tiens au courant.

    Merci a tous

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Voila, je viens de tester le code de ALSIMBAD.

    avec une adaptation (un end If en trop) et des difficultés, j'ai réussi à faire marcher le bidule 1 fois.
    J'avais rentré des clients bidons pour les tests. Ensuite, je suis revenu dans la liste des clients, les ai effacés à la main pis depuis sa marche plus du tout.
    dans la case avec la liste, on voit bien les quelques clients que j'ai déjà rentré mais a chaque fois que j'en sélectionne un qui existe déjà, j'ai toujours le message m'indiquant que le client n'existe pas et me demande si je veux l'ajouter...

    Dans cette ligne de code: If IsError(Application.Match(Target.Value, [les_plats], 0)) Then

    Je ne comprends pas ce que veux dire [les_plats] ?

    J'ai pas tout compris et j'ai vérifier plusieurs fois le code mais je passe a côté de quelque chose...
    Il est clair que ma méthode d'effacement des noms "un peu sauvage" risque de se reproduire car au fils du temps, des clients disparaissent et il est nécessaire de faire le ménage afin d'éviter avoir une liste de choix longue comme le bras

    des idées????

    Autre chose, pourriez-vous me donner un bout de code à ajouter à la suite du code déjà rentré afin que lorsque un nouveau client est entré, la liste de client qui s'allonge automatiquement puisse, dans l'élan, se reclasser par ordre alphabétique??

    merci a tous

  7. #7
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Âge : 61
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 563
    Points : 1 691
    Points
    1 691
    Par défaut
    hello
    les plats, c'est parceque chez moi, la liste n'est pas une liste de client mais une liste de plats, j'ai du etre un peu sauvage dans la réduction de mon code. si tu ne t'en sort pas mais si ça a l'air de te convenir, tu dis, je te le retravaille

  8. #8
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Âge : 61
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 563
    Points : 1 691
    Points
    1 691
    Par défaut
    bon, je te joins le fichier exemple. effectivement ce n'est pas tres au point, et il produit des bugs si tu vide entierement la liste et si tu selectionne plusieur nom de la feuille, mais bon, ça peut te faire une bonne base de départ, l'essentiel n'est pas dans le programme mais dans l'utilisation de la fonction match
    bonne soirée

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Bonjour,

    merci beaucoup pour toutes ces infos qui m'ont permissent de réaliser très exactement ce que je voulais. je débute en VBA et j'ai même réussi à faire le système de tri que je demandais dans mon dernier post.

    a bientôt

  10. #10
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Âge : 61
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 563
    Points : 1 691
    Points
    1 691
    Par défaut
    pas de quoi
    à la fois pour le tri, c'était pas trop difficile, il est dans mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Sheets("Paramètres").[listeclient].Sort key1:=Sheets("Paramètres").Range("A2")
    n'oublie pas de mettre résolu si c'est fini

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] Créer une liste déroulante avec une condition
    Par Ness1706 dans le forum Excel
    Réponses: 5
    Dernier message: 10/07/2014, 14h34
  2. Réponses: 8
    Dernier message: 16/06/2014, 12h14
  3. [XL-2007] Créer une liste déroulante avec des titres sur Excel
    Par Super Fanja dans le forum Conception
    Réponses: 3
    Dernier message: 22/09/2012, 16h35
  4. Créer une liste déroulante avec jquery et json
    Par beegees dans le forum jQuery
    Réponses: 2
    Dernier message: 30/04/2012, 11h46
  5. Réponses: 2
    Dernier message: 20/03/2012, 16h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo