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

  1. #1
    Membre du Club
    Femme Profil pro
    Chef de projet en SSII
    Inscrit en
    novembre 2010
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : novembre 2010
    Messages : 90
    Points : 42
    Points
    42

    Par défaut Fusion éléments identique dans une listbox

    Bonjour

    Aujourd'hui je peine sur un problème :

    J'ai deux listbox liées qui me permette d'afficher dans un sous formulaire continu un tableau de données.
    Toutes les données s'affichent bien.

    Malheureusement, dans ma listbox 1, il m'arrive d'avoir plusieurs fois un meme élément affichè (car il existe plusieurs fois en base)

    Serait il possible de fusionner ces éléments identique dans la listbox1, et de laisser l'utilisateur sélectionner le choix qu'il souhaite en listbox2 ?

    En exemple avec les données suivantes :
    ID Nom Prénom
    1 Dupond Marie
    2 Rodriguez Ludovic
    3 Dupond Jean

    Actuellement, dans ma listbox1 j'aurais comme choix:
    Dupond
    Dupond
    Rodriguez

    Et dans la listbox2 le prénom correspondant a la selection de l'utilisateur

    Mon souhait est d'avoir dans la listbox1 :
    Dupond
    Rodriguez

    Et en sélectionnant Dupond, avoir dans la listbox2 :
    Marie
    Jean

    Et tenté un Forms![frm1]![Listbox1] dans le requête de la listbox2 sans succès

    Merci d'avance pour votre expertise

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    octobre 2005
    Messages
    12 305
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : octobre 2005
    Messages : 12 305
    Points : 18 751
    Points
    18 751

    Par défaut

    Bonjour.

    Comme c'est LA solution c'est un peu embétant.

    Qu'as-tu obtenu ?
    1. Pas les données attendues ?
    2. Pas de données du tout ?
    3. Une erreur ?


    Aussi peux-tu poster le SQL de la source de tes 2 listes.

    Enfin, personnellement pour les noms et prénoms je n'offre plus que des sélections combinées (Nom Prenom Ou Prenom Nom selon la préférence de mon client) c'est génaralement aussi efficace et évite d'avoir à gérer 2 listes. Cela me permet de récupérer aussi immédiatement l'identifiant de la personne.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Membre du Club
    Femme Profil pro
    Chef de projet en SSII
    Inscrit en
    novembre 2010
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : novembre 2010
    Messages : 90
    Points : 42
    Points
    42

    Par défaut

    Bonjour marot_r,

    Merci pour ta réponse (encore)
    Le nom/prénom est un exemple, malheureusement les clients veulent 2 listbox, malgré ma proposition d'en faire une avec les deux éléments réunis en début de projet.

    Voici le SQL de la listbox1 ou j'affiche l'ISIN :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT [T_Informations Instruments].TK, [T_Informations Instruments].ISIN
    FROM [T_Informations Instruments]
    ORDER BY [T_Informations Instruments].[ISIN];
    TK est la clef primaire de la table T_Informations Instruments

    Voici le SQL de la listbox2 ou j'affiche le TK
    Etape1 Je crée une querie Q_Combobox_TK
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT [T_Informations Instruments].TK, *
    FROM [T_Informations Instruments]
    WHERE ((([T_Informations Instruments].TK)=[Forms]![F_Confrontation]![Combo73]));
    Combo73 est le nom de la listbox1

    Etape2 J'intégre dans la listbox2 ce SQL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT Q_Combobox_TK.TK
    FROM Q_Combobox_TK;
    Résultat, j'ai des doublons dans la listbox1, et un seul résultat pour chaque selection dans la listbox2

    J'ai essayé également d'aller plus vite en mettant dans la listbox2 juste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT [T_Informations Instruments].TK, [T_Informations Instruments].ISIN
    FROM [T_Informations Instruments]
    WHERE ((([T_Informations Instruments].ISIN)=[Forms]![F_Confrontation]![Combo73]));
    Mais la il ne m'affiche plus rien dans la listbox2

  4. #4
    Modérateur

    Homme Profil pro
    Inscrit en
    octobre 2005
    Messages
    12 305
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : octobre 2005
    Messages : 12 305
    Points : 18 751
    Points
    18 751

    Par défaut

    Bonjour.

    La bonne solution pour ta 2ième liste est celle-là, pas de doute.

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT [T_Informations Instruments].TK, [T_Informations Instruments].ISIN
    FROM [T_Informations Instruments]
    WHERE ((([T_Informations Instruments].ISIN)=[Forms]![F_Confrontation]![Combo73]));

    As-tu bien mis quelque chose comme Me.NomTa2iemeListe.requery dans la procédure événementielle associée à l'événement "Sur reception du focus" de ta 2ième liste ? Si non Access ne met pas ta liste à jour et garde les données lues au moment de l'ouverture du formulaire.

    En passant, pour le nom de ta 1ère liste, je te recommande quelque chose de plus signficatif comme lstISIN plutôt que Combo73. Cela facilite la compréhension de ton code et donc la maintenance.

    Est-ce que tu es dans un formulaire en mode continu ou feuille de données ?

    Enfin, tu peux tester ta requête dans l'éditeur de requêtes si tu gardes ton formulaire ouvert.
    Cela va permettre de savoir un peu ce que fait Access et de d'avoir une piste.

    Donc

    • Tu ouvres ton formulaire et tu choisis une valeur dans ta 1ère liste.
    • Tu crées une nouvelle requête.
    • Tu bascules l'affichage en mode SQL (le bouton en haut à gauche avec l'équerre te permet cela).
    • Tu colles :
      Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      SELECT [T_Informations Instruments].TK, [T_Informations Instruments].ISIN, [Forms]![F_Confrontation]![Combo73] as AffChoix, 
      FROM [T_Informations Instruments]
      Et tu demandes à voir le résulat.
      Le champ AffChoix va te montrer ce que Access lit dans le formulaire.
      Tu devrais y voir ton numéro ISIN.
    • Puis si c'est correct, tu ajoutes la condition
      Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      SELECT [T_Informations Instruments].TK, [T_Informations Instruments].ISIN, [Forms]![F_Confrontation]![Combo73] as AffChoix, 
      FROM [T_Informations Instruments]
      WHERE ((([T_Informations Instruments].ISIN)=[Forms]![F_Confrontation]![Combo73]));
      Et tu regardes le résulat.
    • Si c'est bien ce que tu attends, tu as probablement un problème de format dans ta liste déroulante.
      Vérifie si le nombre de colonne est correct (devrait être 2)
      Vérifie si la largeur des colonnes est correcte. Une colonne à la largeur 0 ne s'affiche pas même si la donnée est disponible.
    • Si ce n'est pas le cas, explique ce que tu obtiens :
      1. Pas de données ?
      2. Pas les données attendues ? Quel est "l'écart" entre ce qui était attendu et ce que tu as eu ?
      3. Une erreur ? Laquelle ?


    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  5. #5
    Membre du Club
    Femme Profil pro
    Chef de projet en SSII
    Inscrit en
    novembre 2010
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : novembre 2010
    Messages : 90
    Points : 42
    Points
    42

    Par défaut

    Bonjour marot_r,

    J'étais sur d'autres sujets plus "urgent" pour les utilisateurs je n'ai pas eu l'opportunité de te lire avant, je m'en excuse.

    J'ai vraiment du mal à comprendre.
    Dans ma listbox2 je n'ai pas d'événement "On got focus" mais un "After Update" dans listbox1 ce qui m'affiche la bonne donnée dans la lixtbox2 (juste un problème de doublons dans la listbox1 qui ne se concatène pas dans la litsbox2).

    Mon formulaire est en continu, cela peut changer quelque chose ? (Les listbox et le formulaire ne sont d'ailleurs pas dans le même userforms)

    Pour ma 2eme liste, ce code ne fonctionne pas (la listbox2 n'affiche plus rien)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT [T_Informations Instruments].TK, [T_Informations Instruments].ISIN
    FROM [T_Informations Instruments]
    WHERE ((([T_Informations Instruments].ISIN)=[Forms]![F_Confrontation]![Combo73]));
    Je vais continuer à essayer

    J'ai d'ailleurs regardé ta méthode de test, mais je n'ai pas vraiment saisie comment tu pouvais ajouter une requête (et d'ailleurs ou) pendant que le formulaire est en mode "Form view"

    Merci beaucoup

  6. #6
    Modérateur

    Homme Profil pro
    Inscrit en
    octobre 2005
    Messages
    12 305
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : octobre 2005
    Messages : 12 305
    Points : 18 751
    Points
    18 751

    Par défaut

    Bonjour.

    L'idée est de simuler ce que Access fait sans te le montrer.
    Donc tu ouvres ton formulaire et tu choisis un élément dans la liste.
    Après (cela suppose que ton formulaire n'est pas ouvert en mode modale) tu bascules dans la fenêtre de base de données.
    Là tu peux faire ce que tu veux tout en guardant le formulaire "vivant".

    Pour la liste c'est vraiment la solution et elle marche depuis des années.
    Vérifie que tu as bien un contrôle de type liste déroulante pas un champ multi-valué.
    Aussi pratiquement tous les contrôles ont un événement On Get Focus (sur réception du focus) donc il devrait exister.
    Ci-joint un exemple fonctionnel
    TestListeDeroulante.zip

    Pour le formulaire continu, oui, cela peut avoir une influence car si tu utilises une liste déroulante dépendante, si l'élément n'est plus dans la liste, le contrôle reste blanc. La valeur enregistrée n'est pas perdu mais tu ne la vois plus.

    La seule solution que j'ai trouvée est d'avoir 2 champs : 1 pour la sélection et 1 pour l'affichage.
    Ma solution préférée est d'avoir 2 listes déroulantes : une filtrée pour le choix et une non filtrée pour l'affichage.
    Tu peux aussi avoir une liste et un champ texte ainsi qu'une jointure sur ta table de référence.
    Et avec cette solution, dans un formulaire en mode continu, tu peux supperposer la liste dont tu as rendu le fond transparent au contrôle texte. Cela donne l'illusion qu'il n'y a qu'un champ. La maintenance et la gestion des déplacements et des focus sont plus compliqués qu'avec les 2 contrôles côte à côte.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

Discussions similaires

  1. [XL-MAC 2016] Vérifier l'existence d'un élément précis dans une listbox
    Par Mél3790 dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 25/01/2018, 15h16
  2. [XL-2010] Désélectionner les éléments sélectionnés dans une ListBox à sélection multiple
    Par modus57 dans le forum Macros et VBA Excel
    Réponses: 20
    Dernier message: 26/10/2016, 00h05
  3. Réponses: 12
    Dernier message: 09/11/2009, 19h56
  4. Réponses: 5
    Dernier message: 18/09/2008, 15h02
  5. éléments identiques dans une matrice
    Par isidore dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 11/12/2006, 21h02

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