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

IHM Discussion :

Ajout éléments dans une zone de liste


Sujet :

IHM

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 66
    Points : 12
    Points
    12
    Par défaut Ajout éléments dans une zone de liste
    Salut à tous

    Je voudrai savoir comment faire pour ajouter des éléments qui se trouveraient dans une zone de liste déroulante vers une zone de liste.

    Et ensuite, une fois dans cette zone de liste, comment faire pour que cela soit stocké quelque part ?

    Je vous remercie !

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Pour la première question, je te propose une petite lecture sur nos sources http://access.developpez.com/sources...terListeValeur et là http://access.developpez.com/sources...erListeRequete, cela concerne le transfert de données entre zones de listes (applicable également aux combobox).

    Pour stocké, il suffite de parcourir les items de ta zone, et d'ajouter les éléments dans une table à l'aide de DAO.

    Starec

  3. #3
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 66
    Points : 12
    Points
    12
    Par défaut
    merci starec, je regarde ca

  4. #4
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 66
    Points : 12
    Points
    12
    Par défaut
    Petite précision, qu'est ce que DAO ?

  5. #5
    Membre éclairé Avatar de ft035580
    Profil pro
    Inscrit en
    Août 2004
    Messages
    689
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 689
    Points : 799
    Points
    799

  6. #6
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 66
    Points : 12
    Points
    12
    Par défaut
    merci à toi

  7. #7
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 66
    Points : 12
    Points
    12
    Par défaut
    J'aimerai adapter ce type de liste à un cas un peu " particulier "

    Admettons, on a une table client, et qui peut avoir une ou plusieurs passions.

    on aura la table clients et la table passions.

    Et évidemment, les clients n'ont pas tous les memes passions...

    Comment faire pour faire coïncider tout ce petit monde ?

    Merci !

  8. #8
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 66
    Points : 12
    Points
    12
    Par défaut
    bon le processus de base focntionne parfaitement, reste maintenant à savoir comment stocker les informations individuellement pour chaque utilisateur

  9. #9
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2003
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2003
    Messages : 53
    Points : 73
    Points
    73
    Par défaut
    hello,

    à mon humble avis, tu dois passer par une table intermédiaire (que l'on nomme par exemple TBL_PASSION_CLIENT ) qui va servir à stocker les passions de tes clients.... c'est elle qui va faire la jointure entre les 2

    Tu auras à chaque enregistrement l'association d'un client à une passion.
    Tu peux avoir plusieurs enregistrement au nom du même client pour des passions différentes.

    CQFD

    bon travail

  10. #10
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 66
    Points : 12
    Points
    12
    Par défaut
    salut a toi GCUSSE

    j'ai donc essayé ta tachnique, qui me semble tout à fait appropriée à la situation.

    Reste encore un petit problème, l'affichage. Lorsque je circule entre les clients, la zone de liste de droite ne change pas, donc, les données sont bien dans la table de stockage, mais les particuliers ont toujours les memes passions pour l'utilisateur qui voit la zone de lsite de droite.

    Voici les codes utilisés :

    Liste de gauche ( contenant les passion séléctionnables )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT tbl_passion.num_passion, tbl_passion.libel_passion
    FROM tbl_passion
    WHERE (((tbl_passion.num_passion) Not In (SELECT num_passion FROM tbl_passion_client)));
    La zone de liste de droite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT tbl_passion_client.num_passion, tbl_passion.libel_passion
    FROM tbl_passion INNER JOIN tbl_passion_client ON tbl_passion.num_passion = tbl_passion_client.num_passion;
    Le bouton qui envoie les passions de gauche vers la droite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub GaucheDroite_Click()
    TransposerElement lst1, lst2, , True
    DoCmd.RunSQL ("insert into tbl_association_client_passion (num_client, num_passion) values ( " & Me![txt_client_num] & ", " & Me![lst1] & " )")
    End Sub
    le "txt_client_num" est un champ texte ayant comme source le numéro auto du client en cours.

    J'ai fait une table parallèlement à l'exemple donné en haut, qui se nomme tbl_association_client_passion, et qui stocke, lorsque je clike sur le bouton, le numéro du client en cours, et le numéro de la passion séléctionnée.

    J'espère que j'ai été clair et que le code ne vous fera pas mal aux yeux...lol

    Merci !

  11. #11
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2003
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2003
    Messages : 53
    Points : 73
    Points
    73
    Par défaut
    salut...

    Je suppse que ta liste de droite est lst2

    Tu dois donc prévoir à chaque déplacement entre tes clients une commande

    pour rafraichir la zone..

    Au niveau de la source de ta zone de lst2.... personnelement je mettrai pour la condition, ton champs de formulaire contenant le numéro de client.

    Je ne sais pas comment tu te déplaces. moi personnelement sur mes 2 jambes non plus sérieusement, moi je me déplace dans mes forms via une zone de liste de tout mes clients.... et j'associe le déplacement sur le click d'un élément et j'effectue donc ce "requery" au moment du click...

    si j'ai plusieurs sous-forms à rafraichir.... au lieu de lancer toujours ces requery à chaque endroit.... je crée une fonction ToutRafraichir par exemple ou je lance tout mes requery.... j'appelle donc cette fonction chaque fois que j'en ai besoin.

    salut et bon taf

  12. #12
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 66
    Points : 12
    Points
    12
    Par défaut
    'lut !

    Je suppse que ta liste de droite est lst2
    Oui, c'est bien ça.

    Donc ce code, je le met dans le bouton " > " ? ( j'ai pas encore fait la supression des passions, en cas d'erreur de l'utilisateur ou autre.. )

    Au niveau de la source de ta zone de lst2.... personnelement je mettrai pour la condition, ton champs de formulaire contenant le numéro de client.
    Que veut tu dire par là ? Quelle condition ?

    Je ne sais pas comment tu te déplaces.
    A dos de chameau, spa mal non plus =)

    Merci a toi ! =)

  13. #13
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2003
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2003
    Messages : 53
    Points : 73
    Points
    73
    Par défaut
    Re-salut,

    C'est vrai, à dos de chameau c'est pas mal

    Pour la source de ta zone de liste, elle doit comprendre une requete selection qui contiendra des datas venant à la fois de la table d'association des passions et des passions elles-mêmes pour que le résulta affiche, les passions par client.

    Le critère pour l'affichage dont je parle est le champs contenant le numéro de client.... En effet dans cette zone, tu veux afficher les passions du client et uniquement lui... donc il est normal que le critère soit le numéro du client actif sur ton formulaire.

    Pour contruire ta requete, place toi sur le formulaire en construction, supprime la source de ta zone de lst2 et appelle le générateur de requete.... là tu ajoutes les 2 tables précitées (table d'association et table passion), tu ajoutes les données que tu veux voir afficher dont le num_client de ta table association, là dans la zone de critère tu appelles le générateur d'expression, tu vas dans formulaire, formulaire actif et tu cherche dans la colone du milieu ton champs et dans la colone de droite, [valeur].

    Tu refermes, le générateur d'expression et ainsi le tour est joué.

    Tu auras ainsi dans le sql généré quelquechose comme ceci dans la condition :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .... ON tbl_passion.num_passion = [Formulaires]![Nom_du_form]![nom_du_champs_contenant_le_num_du_client];
    Au niveau du rafraichissement de la zone de liste, tu dois executer le code que je t'ai donné ( me.lst2.requery) à chaque fois que son contenu est suscptible d'avoir changé..... donc:
    • a chaque fois que tu insères un nouveau client
    • a chaque fois que tu changes de client
    • a chaque fois que tu ajoutes une passion à un client
    • a chaque fois que tu supprime un client


    Voilà, j'espère avoir été assez clair....

    bon taf et n'hésite pas si tu as besoin.


    Tiens nous au courant et n'oublies pas le tag resolu quand tu auras solutionné

  14. #14
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 66
    Points : 12
    Points
    12
    Par défaut
    re-re salut

    J'ai beau chercher, je ne comprend pas toujours ce qu'il se passe.

    Déjà:
    Le critère pour l'affichage dont je parle est le champs contenant le numéro de client.... En effet dans cette zone, tu veux afficher les passions du client et uniquement lui... donc il est normal que le critère soit le numéro du client actif sur ton formulaire.
    Exact.

    J'ai un formulaire client, sur celui là, on rempli des champs ( adresse etc ), ce client a des passions, donc une ou plusieurs, j'ai une zone de liste (lst1) qui affiche le contenu de la table des passions (tbl_passions), à droite de cette première zone de liste, j'ai une autre zone de liste prévue pour recueillir les passions du client en cours (lst2).

    Au milieu de ces deux listes, j'ai deux boutons :
    • un bouton qui envoie la passion séléctionnée de la tbl_passions vers la zone de liste qui recueille les passions du client en cours : "->"
    • un autre bouton, qui enlève une passion au client en cours, et la remet dans la lsite de la table passions : "<-".


    Pour que chaque client aies ses passions, et non pas tous les clients aient les mêmes passions, il me faut une "table de stockage" appellée ici "tbl_associations_passions".

    Comme source de la liste de gauche, celle comprenant le contenu de la table passions(lst1], j'ai ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT tbl_passions.num_passions, tbl_passions.libel_passions
    FROM tbl_passions;
    Comme source de la liste de droite, qui doit afficher les passions de chaque client (lst2), j'ai ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT tbl_passions.libel_passion, tbl_association_client_passion.num_cli
    FROM tbl_passions INNER JOIN tbl_association_client_passion ON tbl_passions.num_passion = tbl_association_client_passion.num_passion
    WHERE (((tbl_association_client_passion.num_cli)=[Formulaires]![formu_client]![num_cli]));
    Soit, ton astuce précedemment énoncée,a vec le numclient du formulaire actif.

    Et ensuite, pour le bouton ">", je n'ai plus de code, car j'arrive à m'embrouiller tout seul...

    J'ai mis un petit extrait ( du moins, le problème qui concerne ce post dans une base de donées, si tu veux jeter un coup d'euil, c'est ici. Et sur cette base, le code "procédure" est volontairement le meme que dans l'exemple de la FAQ, parceque là non plus, je ne sais plus quoi mettre, ni comment faire pour que cela soit cohérent.

    Je te remercie par avance de ton temps passé sur mon "cas".


  15. #15
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2003
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2003
    Messages : 53
    Points : 73
    Points
    73
    Par défaut
    Re,

    Bon j'ai un peu cerné ton problème qui est en fait minime.... tu avais fait une petite erreur dans la commande sql au iveau d'un nom de champs... ca arrive parfois

    voici le code corrigé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub GaucheDroite_Click()
    'TransposerElement lst1, lst2, , True
    DoCmd.RunSQL ("insert into tbl_association_client_passion (num_cli, num_passion) values ( " & Me![txt_client_num] & ", " & Me![lst1] & " )")
    Me.lst2.Requery
    End Sub
    Comme tu l'auras remarqué.... j'ai commenté la 1ere ligne concernant la commande transposer élèment....(effet visuel de disparition de la colonne de gauche vers la colone de droite je suppose)

    Au niveau de l'erreur de création d'enregistrement... ton champs est num_cli et non pas num_client dans ta table d'association....

    je n'ai pas analysé le reste du code... mais tu veras... avec cette petite modif... cela fonctionne au niveau de la création de l'enregistrement et du rafraichissement.

    Pour le reste.... je tenterai d'y jeter un coup d'oeil si j'ai le temps aujourd'hui...

    Bon travail

  16. #16
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2003
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2003
    Messages : 53
    Points : 73
    Points
    73
    Par défaut
    re

    Je comprends enfi ce que tu as voulu faire avec la procédure "TransposerElement"...

    Tu as juste omis une chose.....

    Cas d'une application multi-utilisateurs

    Dans le cas d'une application mutli-utilisateurs, il est impossible de rajouter un champs sur la table source. En effet si le champ Selection est égal à True, il l'est pour tous les utilisateurs. Ils auront donc tous la même sélection dans leur zones de listes.

    L'idée est alors de rajouter une table tblClientsSelectionnes dans l'application frontale. Je vous rappelle que l'application frontale est celle qui se trouve sur chaque poste client et qui contient entre autres : les formulaires, les états, ainsi que les tables permettant de stocker les préférences de l'utilisateur. La base dorsale quant à elle se trouve sur le serveur et contient les données partagées. Le lien entre les deux se fait par l'intermédiaire des tables liées.

    Cette table tblClientsSelectionnes, ne possèdera qu'un seul champ : code_client (de même type que celui de la table tblClients)
    c'est d'ajouter cette fameuse table tblClientsSelectionnes..... forcément la procédure bloque sur cette table qui n'existe pas....

    bon taf ;-)

Discussions similaires

  1. Réponses: 13
    Dernier message: 26/11/2009, 16h28
  2. Réponses: 2
    Dernier message: 29/07/2008, 18h47
  3. supprimer un élément dans une zone de liste
    Par mawelle dans le forum IHM
    Réponses: 8
    Dernier message: 03/06/2008, 15h05
  4. Cacher des éléments dans une zone de liste
    Par toto10 dans le forum IHM
    Réponses: 11
    Dernier message: 19/07/2006, 15h03
  5. Réponses: 8
    Dernier message: 24/02/2006, 09h59

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