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 :

Mise à jour de la table avec une liste déroulante alimentée par une autre liste déroulante


Sujet :

IHM

  1. #1
    Membre à l'essai Avatar de Carclin
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Avril 2010
    Messages : 26
    Points : 17
    Points
    17
    Par défaut Mise à jour de la table avec une liste déroulante alimentée par une autre liste déroulante
    Bonjour à tous,

    Mon problème est le suivant:

    j'ai créé deux listes déroulantes dans le même formulaire.
    La première est une liste de Maîtres d'ouvrages qui est alimentée par une table du même nom.
    La seconde est une liste de contacts qui est aussi alimentée par une tables mais qui est filtrée par la sélection de la liste précédente.
    J'ai utilisé le tutoriel : http://argyronet.developpez.com/offi...ectitemlistAB/
    et ça fonctionne bien.

    Le problème est que dans mon formulaire à double affichage, lorsque je fait un nouvel enregistrement et que je choisit le Maitre d'ouvrage par le biais de la liste, l'aperçut de la table en bas du formulaire efface le contenu du champs de contact MO des autres enregistrements qui n'ont pas ce MO là.

    C'est juste l'affichage qui catouille car lorsque je fais une requête de listage de contenu de la table toutes les infos sont bien là.

    Avez vous une solution ?
    Merci d'avance
    Cordialement.

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Une solution simple que j'utilise c'est d'avoir 2 champs affichés qui pointent sur la même donnée : une liste déroulante qui présente les choix disponibles et un champ qui affiche la valeur retenue.

    Du genre : Choix Personne, Personne.

    Losrque le critère qui allimente la liste n'est pas rempli l'info disparait de la liste mais reste visible dans la colonne d'affichage.

    Une solution plus accrobatique de cette solution est de faire un formulaire en mode continu et à supperposer une liste déroulante à fond transparent sur un TextBox.

    La liste présente les choix, le TextBox affiche la valeur voulue.

    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 à l'essai Avatar de Carclin
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Avril 2010
    Messages : 26
    Points : 17
    Points
    17
    Par défaut
    Bonjour,

    Effectivement cela me parait une bonne solution mais je ne parviens pas à la mettre en place.

    Comment faire pour que mon champ de texte reçoive la valeur de la liste de choix?

    Si je passe par la source de contrôle le champs de texte m'affiche l'ID.
    Comment pallier à ce problème?

    Merci d'avance.

  4. #4
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Tu peux procéder de 2 façons :

    La plus simple : au lien d'un champ texte, tu mets une seconde liste déroulante qui ne fait qu'afficher les données sans filtrage. Tu as donc 2 listes côte à côte, une pour le choix et une pour l'affichage.

    Plus complexe : tu fais une jointure sur la table qui sert à allimenter ta liste déroulante dans la requête qui allimente la ton formulaire. Ce champ 'joint' devient la source de ton champ texte.

    As-tu besoin de plus de détail ?

    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 à l'essai Avatar de Carclin
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Avril 2010
    Messages : 26
    Points : 17
    Points
    17
    Par défaut
    Bonjour,

    Je souhaiterais un peu plus de précisions dans la mesure du possible.

    Sur quelle table ou requête est basée la seconde liste ?
    Cette nouvelle liste est elle indépendante ?
    Quand dois-je mettre à jour cette liste ?
    "Sans filtrage" c'est à dire sans clause "Where" dans la requête ?

    Ne puis-je tout simplement pas passé par un champs de texte. Pour le moment mon champs de texte m'affiche l'ID, n'est-il pas possible d'avoir la valeur sélectionnée dans la liste déroulante à la place de l'ID ?

    Merci d'avance pour ces précisions.
    Cordialement.


    Edit:

    Voilà une solution envisagée:

    Ma liste déroulante nommée Contact du Maître d'Ouvrage me permet de sélectionnez l'option souhaitée. un champs texte nommé ValueContact qui récupère la valeur sélectionnée par l'intermédiaire de cette requête:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Contact_du_Maître_d_Ouvrage_AfterUpdate()
    Dim Query As String
     
    Query = "SELECT [Contact MO].[ID Contact Mo], [Contact MO].[Nom Contact] FROM [Contact MO] WHERE ((([Contact MO].[ID Contact Mo])=[Forms]![Dossier].[Contact du Maître d'Ouvrage]));"
    Me.ValueContact = Query
     
    End Sub
    car [Forms]![Dossier].[Contact du Maître d'Ouvrage] est égal à l'ID de la valeur sélectionnée dans la liste déroulante.

    Mais cela ne fonctionne pas car en fait la requête ne s'exécute pas et du coup le champs reçoit le texte de la requête (et non son résultat).

    une idée ??
    Merci d'avance.

    Cordialement.

  6. #6
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Citation Envoyé par Carclin Voir le message
    Bonjour,

    Je souhaiterais un peu plus de précisions dans la mesure du possible.

    Sur quelle table ou requête est basée la seconde liste ?
    Cette nouvelle liste est elle indépendante ?
    Quand dois-je mettre à jour cette liste ?
    "Sans filtrage" c'est à dire sans clause "Where" dans la requête ?

    Ne puis-je tout simplement pas passé par un champs de texte. Pour le moment mon champs de texte m'affiche l'ID, n'est-il pas possible d'avoir la valeur sélectionnée dans la liste déroulante à la place de l'ID ?

    Merci d'avance pour ces précisions.
    Cordialement.


    Edit:

    Voilà une solution envisagée:

    Ma liste déroulante nommée Contact du Maître d'Ouvrage me permet de sélectionnez l'option souhaitée. un champs texte nommé ValueContact qui récupère la valeur sélectionnée par l'intermédiaire de cette requête:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Contact_du_Maître_d_Ouvrage_AfterUpdate()
    Dim Query As String
     
    Query = "SELECT [Contact MO].[ID Contact Mo], [Contact MO].[Nom Contact] FROM [Contact MO] WHERE ((([Contact MO].[ID Contact Mo])=[Forms]![Dossier].[Contact du Maître d'Ouvrage]));"
    Me.ValueContact = Query
     
    End Sub
    car [Forms]![Dossier].[Contact du Maître d'Ouvrage] est égal à l'ID de la valeur sélectionnée dans la liste déroulante.

    Mais cela ne fonctionne pas car en fait la requête ne s'exécute pas et du coup le champs reçoit le texte de la requête (et non son résultat).

    une idée ??
    Merci d'avance.

    Cordialement.
    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.

  7. #7
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Citation Envoyé par Carclin Voir le message
    Sur quelle table ou requête est basée la seconde liste ?
    La seconde liste est basée sur ta table de référence. Par exemple si tu choisis une personne alors elle est basées sur la table 'Personne'.

    Cette nouvelle liste est elle indépendante ?
    Non, sa source est la même que celle de la liste de choix (ex : ClefPersonne).

    Quand dois-je mettre à jour cette liste ?
    Comme elle pointe sur une table de référence tu ne devrais pas à avoir à la mettre à jour.

    "Sans filtrage" c'est à dire sans clause "Where" dans la requête ?
    Exemple de source :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    select [Personne].[ClefPersonne],[Personne].[nom], [Personne].[Prenom] from personne;

    Le nombre de colonne est 3 et le format des colonnes : 0;Taille nécessaire pour afficher le nom, Taille nécessaire pour afficher le prénom.

    Ne puis-je tout simplement pas passé par un champs de texte. Pour le moment mon champs de texte m'affiche l'ID, n'est-il pas possible d'avoir la valeur sélectionnée dans la liste déroulante à la place de l'ID ?
    L'idée c'est que l'utilisateur voit l'information en clair mais que toi tu puisses récupérer ou exploiter l'ID. Passer par une liste évite d'avoir à faire une jointure dans la source de données du formulaire.

    Query = "SELECT [Contact MO].[ID Contact Mo], [Contact MO].[Nom Contact] FROM [Contact MO] WHERE ((([Contact MO].[ID Contact Mo])=[Forms]![Dossier].[Contact du Maître d'Ouvrage]));"
    Me.ValueContact.RowSource = SQL
    La propriété par défaut de presque tous les contrôles est 'Value', si tu ne précises rien c'est celle que tu obtients ou assignes c'est pour cela que tu voyais le SQL et non le résultat de ta requê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.

  8. #8
    Membre à l'essai Avatar de Carclin
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Avril 2010
    Messages : 26
    Points : 17
    Points
    17
    Par défaut
    Ok donc si j'ai bien tout compris:

    J'ai une liste Maitre d'ouvrage qui prends ses infos dans une table du même nom.

    J'ai une liste Contact Maitre d'ouvrage qui prends ses infos dans une table du même nom mais qui est filtrée par le choix de la liste Maitre d'ouvrage.

    j'ai une troisième liste nouvellement créée qui prend sa source dans la table Contact Maitre d'ouvrage mais qui n'est pas filtrée. la largeur de colonne permet bien de n'afficher que les noms et prénoms comme tu me l'as expliqué.

    J'utilise un formulaire à double affichage. Dans la pratique l'utilisateur choisis le Maitre d'Ouvrage (liste 1) puis choisis le Contact (liste 2). Jusque là tout fonctionne. Lorsqu'il y a plusieurs enregistrements l'aperçut de la table en bas de mon formulaire me vide la colonne de Contact lorsque je saisi un nouvel enregistrement et que j'utilise la liste de Maitre d'ouvrage. Pourtant si je fais une requête qui liste le contenu de la table toutes les infos sont bien là.

    Comment dois-je utiliser la troisième liste pour corriger ce problème?

    En tout cas je te remercie pour ta patience et l'attention que tu portes à mes problèmes, Merci.
    Cordialement.

Discussions similaires

  1. [AC-2007] Ajout élément Liste déroulante alimenter par une requête
    Par morinxav dans le forum VBA Access
    Réponses: 1
    Dernier message: 18/04/2012, 11h35
  2. Réponses: 4
    Dernier message: 28/12/2009, 15h37
  3. Réponses: 3
    Dernier message: 12/05/2009, 14h22
  4. [AJAX] lier deux listes déroulantes alimenté par une base de données (Mysql)
    Par arnaudperfect dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 23/04/2007, 01h06
  5. Réponses: 1
    Dernier message: 20/03/2007, 09h24

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