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

Macros et VBA Excel Discussion :

Userform liste déroulante a mettre a jour


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Infirmier
    Inscrit en
    Octobre 2018
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Belgique

    Informations professionnelles :
    Activité : Infirmier

    Informations forums :
    Inscription : Octobre 2018
    Messages : 90
    Par défaut Userform liste déroulante a mettre a jour
    Bonjour,
    Dans mon user form j'ai une liste déroulante "combobox" mais j'aimerais supprimer les doublons dans cette liste:

    Nom : Capture.JPG
Affichages : 1473
Taille : 14,9 Ko

    Comment faire cela ?

    pour info cette liste s'ajoute dans ma base de données...il peu y avoir plusieurs fois le même item dans ma base de données mais pas dans la liste déroulante que propose le useform

    BAV.
    Olivier.

  2. #2
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    bonsoir
    c'est quoi la source des données ???
    il faut etre plus precis et complet dans tes questions sinon c'est pas gagné
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  3. #3
    Membre confirmé
    Homme Profil pro
    Infirmier
    Inscrit en
    Octobre 2018
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Belgique

    Informations professionnelles :
    Activité : Infirmier

    Informations forums :
    Inscription : Octobre 2018
    Messages : 90
    Par défaut
    Voici les étapes:
    * j'encode les données via un userform (combobox2) qui se répercutent dans ma bases de données (colonne L) après avoir enregistrer via un bouton de commande

    cette combobox doit donc permettent l'encodage des items ainsi que des nouveaux item si pas encore dans la liste
    mais doit aussi reprendre les items sans doublons.
    Images attachées Images attachées    

  4. #4
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    en aucun cas tu me montre comment tu remplis ta combobox, mais bon en voyant le tableau en bas a gauche j'en conclu que tes données sont en colonne "L" de la ligne 2 a la derniere
    c'est bien ca ?
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  5. #5
    Membre confirmé
    Homme Profil pro
    Infirmier
    Inscrit en
    Octobre 2018
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Belgique

    Informations professionnelles :
    Activité : Infirmier

    Informations forums :
    Inscription : Octobre 2018
    Messages : 90
    Par défaut
    je rempli directement dans la donnée "MCR" (=combobox2) de l'userform que je t'ai mis en copie...
    Images attachées Images attachées  

  6. #6
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub UserForm_Initialize()
        Dim dico As Object, LC As Worksheet, a&
        Set dico = CreateObject("Scripting.Dictionary")
        With Sheets("Liste Chauffeurs")
            For a = 2 To .Cells(.Rows.Count, "L").End(xlUp).Row
                If Not dico.exists(.Cells(a, "L").Value) Then dico(.Cells(a, "L").Value) = "": ComboBox2.AddItem .Cells(a, "L")
            Next
        End With
    End Sub
    et par pitié arrete de posér des captures pour le code pose le code entre balide code plutot
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut.

    Encore une fois, les problèmes rencontrés résultent d'un problème de conception de fichier. Avec une bonne conception, ton besoin se résume à une ligne de code pour la mise à jour d'un combobox. On arrive, une fois de plus, à une usine à gaz avec dictionary et autres artifices à cause d'un problème de conception...


    Par bonne conception, j'entends:
    • des tableaux structurés reprenant les données souhaitées;
    • la vérification d'absence de doublon et/ou la suppression des doublons dans ces tableaux structurés;
    • le tri des données alimentant les combobox.



    En procédant de cette manière, tu limites ton code VBA à l'essentiel. C'est une ineptie de travailler avec le dictionary dans ce cas. Il faut toujours revenir aux sources, c'est-à-dire aux bonnes pratiques et à la conception.
    Ton truc (au vu notamment d'autres discussions que tu as démarrées) va devenir une usine à gaz ingérable, à coup de code mal maîtrisé.

    Au risque d'en décevoir quelques-uns, les réponses fournies ne sont que de mauvaises emplâtres sur une jambe de bois.

    Ps: Au passage, le ton condescendant de certaines réponses, stupides et ineptes qui plus est, de certain qui se croit probablement sorti de la cuisse de Jupiter...
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  8. #8
    Membre confirmé
    Homme Profil pro
    Infirmier
    Inscrit en
    Octobre 2018
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Belgique

    Informations professionnelles :
    Activité : Infirmier

    Informations forums :
    Inscription : Octobre 2018
    Messages : 90
    Par défaut
    Bonjour,

    Comme déja signaler je suis débutant avec le code vba..j'espère donc ici avoir vos conseils afin de m'améliorer et apprendre...

    Que dois je dans ce cas changer ?
    Que dois je faire si je ne peux me fier aux code que l'on me fourni ?
    Quels sont les règles que je dois respecter ?

    J'ai reçu dans cette discussion pas mal de remarque parfois pas facile a entendre...mais que dois je faire pour finir car je suis perdu...

    BAV.
    Olivier.

  9. #9
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Citation Envoyé par zire478 Voir le message
    [...]
    J'ai reçu dans cette discussion pas mal de remarque parfois pas facile a entendre...mais que dois je faire pour finir car je suis perdu...[...]
    Que dois-tu faire? Confier le développement de ton outil (même en Excel) à un professionnel, seul garant d'une solution pro, qui fera cela de manière plus rapide et plus sûre que toi, et au final pour un coût moindre que les heures que tu vas y passer. Chacun son métier. il ne me viendrait pas à l'idée de porter secours à une personne si je ne suis pas infirmier. Pourquoi vient-il à un infirmier l'idée de développer un outil informatique?

    Au delà, si vraiment tu n'as pas le choix ou que tu as envie d'apprendre, tu dois alors réfléchir, exprimer ce que tu souhaites obtenir, te laisser guider dans la conception de ton outil, mais surtout pas tester des trucs épars à chaque problème rencontré et espérer que tes bouts de code vont te faire une bonne solution lorsque tu les mettras bout à bout.

    Permière étape: Exprimer ton besoin dans le forum Conception (Que dois-tu faire? Quelles sont les données que tu dois enregistrer? ... Montrer un tableau de données final avec les colonnes souhaitées. Cela permettra de dresser la liste des tables à créer, de décider ce qui va constituer l'identifiant dans chaque table créée.

    Seconde étape: Choisir l'interface de saisie. Tu peux saisir dans un tableau structuré, mais aussi dans une feuille Excel qui servirait de "formulaire de saisie" avec très peu de code pour envoyer les données dans le tableau structuré par la suite, mais tu peux t'orienter vers un userform (plus "lourd" à mettre en place et nécessitant souvent plus de connaissances en VBA). Dans 99% des cas avec Excel, tu pourrais saisir dans un tableau structuré avec validation de données, mise en forme conditionnelle, formules de contrôle de saisie.

    Troisième étape: Pas par pas, morceau par morceau, mettre en place ta solution qui, puisqu'elle s'appuie sur une bonne conception, sera légère en terme de code.

    A éviter dans tous les cas: Imaginer des situations qui n'arriveront pas. Les SI et les PEUT-ËTRE, ça ne fait pas bon ménage avec l'informatique.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  10. #10
    Membre confirmé
    Homme Profil pro
    Infirmier
    Inscrit en
    Octobre 2018
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Belgique

    Informations professionnelles :
    Activité : Infirmier

    Informations forums :
    Inscription : Octobre 2018
    Messages : 90
    Par défaut
    Bonjour à vous,

    Merci bcp pour tout ces conseils.
    Je suis en pleine réflexion et lecture...Je lis notamment un livre qui est "Macros et langage VBA" (F Leguen) qui est pas mal je trouve pour moi.

    Je suis tout a fait d'accord que la conception est ma base.
    Pour info le transport de ces patients est déjà une activité en route depuis longtemps avec déjà des données recueillies...
    Voici ma façon global de voir ce projet:
    1 Un tableau pour gérer le listing chauffeur (encodage et modification des coordonnées et liste chauffeur)
    2 un tableau pour encoder les indisponibilité des chauffeurs.

    3. (idem que point 1) concernant les patients
    4. un tableau pour encoder les demandes de transport (date de tranport, qui,..)

    Tout cela afin de lier dans un 5eme tableau les patients et les chauffeurs afin d'éditer des plannings de transports par chauffeur et par jour.

    Il y aura aussi la gestion des factures (édition, impression, impayé,...).

    J'ai choisi d'encoder tout cela par userform afin de faciliter le user a encoder et de le guider par un flux dans tout ces tableaux.

    Qu'en pensez vous ?

    Pour information mon métier de base est infirmier mais je travail dans un paramétrage de programme DPI (dossier patient informatisé) où mes connaissances d'infirmier sont très utiles.
    Je ne soigne donc plus de patients...

    BAV.
    Olivier.

  11. #11
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Je n'ai pas dit que tu ne pouvais pas te fier aux codes fournis. J'ai dit que au départ, c'est un problème de conception et qu'une bonne conception garantit un code VBA léger, maintenable, compréhensible. Surtout si tu es débutant. Autant prendre les bonnes habitudes de suite

    Conception, tout d'abord


    Il faut toujours scinder ton travail en petits morceaux digestes. C'est la garantie de la simplicité de ta solution. Il faut aussi penser que tu es en Excel et donc, que tu peux dois t'appuyer sur les outils Excel.

    Ton fichier doit contenir un tableau structuré reprenant les chauffeurs une seule fois. Il ne faut pas aller les chercher ailleurs, et certainement pas dans le tableau qui prend les prises en charge, dans lequel il vont se retrouver plusieurs fois.




    Mise en place

    Il devient alors très simple d'alimenter ton combobox. Il suffit, dans la procédure d'appel du userform, de trier ton tableau structuré des chauffeurs sur la première colonne.


    Sur base du tableau structuré t_Chauffeurs suivant, et en considérant un userform usrSaisie muni d'un combobox cboChauffeur, ton code devient très simple.

    Nom : 181030_01.png
Affichages : 324
Taille : 52,3 Ko


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub PrepareUserForm()
      Range("t_Chauffeurs").Sort key1:=Range("t_Chauffeurs").Cells(1), order1:=xlAscending, Header:=xlYes
      With usrSaisie
        .cboChauffeur.List = Range("t_Chauffeurs[[ID]:[Nom]]").Value
        .Show
      End With
    End Sub

    Plus simple, c'est difficile.

    PS: Comme dit dans cette discussion, tu cours à la catastrophe avec ces "solutions" proposées sans vue d'ensemble de ton souhait global, notamment lorsque l'on sait que tu souhaites partager ce fichier sur OneDrive entre plusieurs utilisateurs. C'est une aberration totale de "développer" ce genre de trucs en Excel, et il est tout aussi aberrant que cela soit "développé" par jeu de questions-réponses sans une solide réflexion sur la conception du fichier au départ.

    J'ajouterai que si on veut à tout prix de l'Excel, la saisie pourrait être effectuée dans un tableau structuré avec de la validation de données (listes déroulantes, vérifications diverses) et probablement sans VBA.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  12. #12
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    Bonjour
    et comment devrait il faire si il a une combobox "cboPermis" sans doublons et dans l'ordre dans ton exemple avec un peu plus de ligne et que les permis ne soient pas dans l'ordre dans ta colonne "permis"???

    dans son cas d'apres sa capture il me semble que c'est un tableau alimenté regulierement cette colonne "transport" peut donc avoir des doublons et pas forcement dans l'ordre car l'ordre peut etre etabli par une autre colonne de date par exemple

    il faudra bien un écrémage

    sauf (colonne provisoire) et remouve duplicate +sort+tranfert dans combobox
    ou
    tableau prevu a cet effet carrément( solution la plus simple )
    ou
    vba dico/collection
    dans les 3 cas son code ne sera pas aussi simpliste que tu le presente

    a part ca je vois pas comment il pourrait faire
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  13. #13
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Le problème n'est pas de savoir comment il devrait faire SI... Ca ne sert à rien d'inventer des situations. Mon propos, c'est de dire qu'il faut d'abord réfléchir à la conception du fichier:
    • Plusieurs personnes doivent-elles travailler simultanément sur le tableau en saisie?
    • De quelles "tables" a-t-on besoin?
    • Comment les données vont-elles être saisies? Dans un tableau, dans une feuille Excel puis transférées dans une table? Via un formulaire?
    • Comment les données doivent-elles être présentées?
    • Quels sont les outils Excel dont on dispose pour réaliser ces opérations?


    Répondre OUI à la première question devrait déjà aiguiller vers une autre solution qu'Excel, comme cela a déjà été dit des centaines, voire des milliers de fois sur nos forums. Si on persiste à vouloir utiliser Excel (pas le choix de faire autrement, par exemple), on doit alors d'autant plus réfléchir à la conception du fichier:
    • Quel choix de clé primaire (clé unique d'identification) pour chaque table?
    • Comment sont alimentées les tables annexes (chauffeurs, types de transport, ...), bref, les tables dans lesquelles les données "bougent" le moins?
    • Comment vais-je alimenter des listes déroulantes (validation de données ou combobox) selon les choix d'interface et d'ergonomie?
    • ...
    • ...


    Ce n'est bien qu'après cela que l'on commence à mettre en place les tables et les interfaces de saisie et/ou de restitution. On avance alors pas à pas dans l'élaboration de la solution. Pour répondre à ta question sur les permis avec ou sans doublons: C'est un faux problème. On ne devrait pas pouvoir saisir des doublons dans la table des permis, et cela aurait été mis en évidence lors de l'analyse conceptuelle. Utiliser du VBA pour résoudre des problèmes qui n'auraient pas vu le jour si l'on avait réfléchi en amont ne sera jamais (!!) une bonne solution. Ca donne du code mal torché dans une usine à gaz qui fuite de toutes parts. 90% au moins des problèmes décrits sur ce forum ne verraient tout simplement pas le jour si les gens réfléchissaient à la conception de leur solution plutôt que de foncer tête baissée dans la production de code "au petit bonheur la chance".
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

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

Discussions similaires

  1. UserForm liste déroulante - mise à jour
    Par Olivierporcinet dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 23/05/2013, 17h52
  2. Réponses: 6
    Dernier message: 05/10/2010, 22h02
  3. Réponses: 6
    Dernier message: 04/07/2009, 22h41
  4. Liste déroulante éditable et mise à jour table
    Par Nean dans le forum Bases de données
    Réponses: 11
    Dernier message: 03/12/2007, 00h03
  5. [Conception] Liste déroulante a mettre en place
    Par bilou95 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 06/10/2006, 13h58

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