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 :

Affichage infos dans un formulaire après sélection dans une zone de liste


Sujet :

IHM

  1. #1
    Nouveau membre du Club
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2008
    Messages : 53
    Points : 38
    Points
    38
    Par défaut Affichage infos dans un formulaire après sélection dans une zone de liste
    Bonjour,

    Je suis débutant sur Access.
    Je souhaite créer un fomulaire avec un une zone de liste dans laquelle je peux sélectionner un nom de personne. En cliquant sur ce nom, je souhaiterais que les infos relatives à la personne s'affiche dans une zone à côté (qui peut-être un sous-formulaire) et bien sûr pouvoir modifier les infos et sauver ces modifications.
    Je n'ai qu'une seule table 'Personne' avec comme attributs Id, nom, prénom, âge, etc.

    Comment faire pour que lorsque je choisis un nom les infos correspondantes s'affichent dans une zone à côté?

    Merci par avance pour votre aide.

    Julien

  2. #2
    Membre actif
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2008
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 221
    Points : 244
    Points
    244
    Par défaut
    Tu peux faire un truc du genre :

    -Créer une procédure "sur double click" sur ta zone de liste et mettre :
    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
    17
    18
    Dim SQL as string
    Dim rs as recordset
    Dim NomRecup as string
     
    If TaZoneDeListe.Value <> empty then
    NomRecup = TaZoneDeListe.Value
     
    'création d'une requete pour aller chercher les données que l'ont récupère dans un recordset
    SQL = "SELECT * FROM Personne WHERE nom = """ & NomRecup & """;"
    Set rs = application.currentdb.OpenRecordset(SQL, dbOpenDynaset)
     
    'remplissage de textbox que tu places ou tu veux sur ton formulaire
    TextBoxNom = rs.Fields("nom")
    TextBoxPrenom = rs.Fields("prenom")
    TextBoxAge  = rs.Fields("Age")
    '...
     
    End if
    La partie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NomRecup = TaZoneDeListe.Value
    peut différer si ce n'est pas le nom que te retournes ta zone de liste mais l'id.
    Donc à toi de me dire ce que te retourne ta zone de liste pour savoir si je dois changer mon code.

    Pour la partie avec les textbox tu peux désactivé la propriété visible de chaque textbox et les rendre visibles une fois que tu as choisi un nom dans la liste. (ce qui permet de ne pas avoir des textbox inutiles dans ton formulaire tout le temps)

    Enfin ce n'est qu'un exemple a toi de dire si ca te convient pour que je pousse un peu plus les explications

  3. #3
    Nouveau membre du Club
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2008
    Messages : 53
    Points : 38
    Points
    38
    Par défaut
    Merci pour ta réponse.

    Ma zone de liste contient seulement les noms de personnes avec l'Id qui est clé primaire. Seule la colonne nom est affiché dans ma zone de liste. L'id est caché.
    Pour la partie affichage des infos détaillées, j'ai créé un sous formulaire avec pour source ma table 'Personne', qui contient les champs suivants :
    - nom (type texte)
    - prénom (type texte)
    - statut actif (type Oui/non).
    J'ai retiré les autres champs pour simplifier mon pb.

    Pour les textbox je voudrais que ce soit tjs les memes qui s'affichent dans mon sous-form. Mais bien sûr les infos seront différentes suivant le nom de la personne que j'aurais au préalable choisi dans ma liste déroulante.
    Le nom de ma liste est 'Liste14'.

    J'ai créé une macro liée à un évenement sur clic dans les propriétés de Liste14où j'ai copié ton code. Est-ce cela qu'il faut faire?
    Peux-tu également me préciser les éléments à changer dans ton code pour que cela fonctionne dans mon cas?

    Merci.

  4. #4
    Membre actif
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2008
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 221
    Points : 244
    Points
    244
    Par défaut
    Bonjour,

    Déja si j'ai bien lu, on peut en déduire que ta zone de liste va te renvoyer la clé primaire (soit l'id). Mon code est donc a modifié de cette manière :
    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
    17
    18
    19
    Dim SQL as string
    Dim rs as recordset
    Dim NomRecup as Integer
     
    If TaZoneDeListe.Value <> empty then
         NomRecup = TaZoneDeListe.Value
     
         'création d'une requete pour aller chercher les données que l'ont récupère dans un recordset
         SQL = "SELECT * FROM Personne WHERE id = " & NomRecup & ";"
         Set rs = application.currentdb.OpenRecordset(SQL, dbOpenDynaset)
     
         'remplissage de textbox que tu places ou tu veux sur ton formulaire
         TextBoxNom = rs.Fields("nom")
         TextBoxPrenom = rs.Fields("prenom")
         TextBoxAge  = rs.Fields("Age")
         '...
     
         rs.close
    End if
    De plus tu n'es pas obligé de créer de sous formulaire, a part si tu souhaites que les infos s'affichent dans un sous formulaire de forme tableau de données. Si tu souhaites seulement les afficher par exemple dans trois texbox, il te suffit de créér tes trois textbox dans le même formulaire que ta liste (il faut que tu donnes des noms cohérents à tes textbox) et d'aller mettre la propriété Visible (des textbox) dans l'onglet Format à Non.
    Ensuite tu va dans les propriétés de ta zone de liste, dans l'onglet évenement, et sur la ligne "sur double clic" (ou "sur clic" au choix) tu clics sur les trois petits points pour créér la procédure (génération de code)

    Pour finir tu y place mon code et tu rajoutes à la fin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
         rs.close
     
         TextboxNom.Visible = true
         TextboxPrenom.Visible = true
         TextboxAge.Visible = true
         'et ca autant de foois que tu as de textbox
     
    End if
    Si tout se passe bien cela devrait fonctionner ..! Si tout se passe bien
    Enfin tiens moi au courant y'aura peu être quelque bidouillage à faire

  5. #5
    Nouveau membre du Club
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2008
    Messages : 53
    Points : 38
    Points
    38
    Par défaut
    Merci pour toutes tes explications.
    Je me suis bien inspiré de ton code et ça marche.
    J'ai qd même utilisé un sous-formulaire à côté de ma zone de liste avec mes textbox toujours visibles.

    Je fais face à de nouveaux problèmes maintenant ;-)
    Je souhaiterais créer plusieurs boutons réalisant les fonctions suivantes :
    - ajout d'un nouvel enregistrement (nouvelle personne)
    - pouvoir sauvegarder cet enregistrement.
    - sauvegarder les modifs sur un enregistrement déjà existant.

    Je voudrais désactiver la fonction de sauvegarde en tps réel de access (dès que je rentre de nlles infos ou modifie des infos existantes, il sauvegarde tout seul) et passer uniquement par des boutons.

    Un des mes soucis est notamment lorsque je clique sur mon bouton 'ajouter un nouvel enregistrement', les box se vident, je les complete mais tout est sauvegardé automatiquement par access (ce que je ne veux pas)
    et surout la zone de liste n'est pas mise à jour par la suite.

    Je vais fouiller sur le forum car je pense que ces pbs ont déjà été posés mais si tu as des solutions, je suis preneur.

    Merci bcp pour ton aide.

  6. #6
    Membre actif
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2008
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 221
    Points : 244
    Points
    244
    Par défaut
    Access sauvegarde automatiquement parce que tes textbox sont directement liées à ta table, il faut que tu en créé des nouvelles avec la boîte à outils, et que tu les nommes comme celles qui sont actuellement sur ton formulaire.

    C'est pour ca que je te disais de ne pas créer de sous formulaire
    Mais c'est pas grave

  7. #7
    Nouveau membre du Club
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2008
    Messages : 53
    Points : 38
    Points
    38
    Par défaut
    Ok je vais supprimer mon sous-form alors et faire comme tu m'as dit.
    Sinon pour rafraichir ma zone de liste j'ai trouvé dans le FAQ :

    "Vous possédez une zone de liste contenant les données d'une table.

    Vous insérez alors une ligne dans cette même table, mais elle n'apparaît pas dans la liste.

    Il suffit de rafraîchir les données de la zone de liste en utilisant la méthode requery.

    ' Me.Refresh sert dans le cas où le contenu de la zone de liste
    ' prend en compte les données actuelles du formulaire
    ' Comme par exemple si une zone de liste utilise dans sa requête source
    ' la valeur d'une autre zone de liste du formulaire.
    Me.Refresh
    Me.MaZoneListe.Requery"

    As-tu une idée où je peux utiliser le code? dans un évènement à partir des propriétés de ma zone de liste je suppose...

    Merci pour ton aide précieuse et ta réactivité.

  8. #8
    Membre actif
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2008
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 221
    Points : 244
    Points
    244
    Par défaut
    Tu peux utiliser ca dès que tu fais un changement sur un changement sur une zone de liste, après l'envoi d'une requête d'ajout ou de mise a jour, dans tes boutons par exemple.

  9. #9
    Nouveau membre du Club
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2008
    Messages : 53
    Points : 38
    Points
    38
    Par défaut
    J'ai supprimé mon sous-form et créé les 3 textebox. Mais lorsque je clique sur un nom dans ma liste j'ai une erreur de code au nivo de cette ligne.

    TextBoxNom = rs.Fields("nom")

    Ma box a comme nom : Nom.
    Est-ce bon?
    De plus comment faire dans le cas où je n'ai pas de champ texte mais un champ oui/non (case à cocher) comme pour l'attribut 'statut actif' de ma table (voir plus haut).

    Merci

  10. #10
    Membre actif
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2008
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 221
    Points : 244
    Points
    244
    Par défaut
    Si ta textbox a pour nom "Nom" le code se transforme en :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Nom.Value = rs.fields("Nom")
    'pour remplir des textbox c'est en général :
    NomDeLaTextBox.Value = LaValeurAMettre
    C'est la même chose pour les CheckBox, il te suffit de lui donner un nom compréhensible et de faire comme pour une textbox
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NomDeLaCheckBox = rs.fields("statut actif")

  11. #11
    Nouveau membre du Club
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2008
    Messages : 53
    Points : 38
    Points
    38
    Par défaut
    Merci pour tes explications et ta gentillesse.
    Mais je bloque tjs.
    J'ai donc les lignes de code suivantes (j'ai mis les autres lignes textbox en commentaire) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Box_Nom_personne.Value = rs.Fields("Box_Nom_personne")
    rs.Close 
    Box_Nom_personne.Visible = True
    Sachant que j'ai ma zone de liste et ma txt box qui n'ont pas de source contrôle. En revanche j'ai mis comme source 'Personne' pour le formulaire.
    La textbox que j'ai créé a pour étiquette "Nom :" et la boîte elle-même a pour nom : Box_Nom_personne.
    Enfin l'information que je cherche à afficher dans la boîte est le champ "nom" de ma table 'Personne', qui change à chaque fois que je sélectionne un "nom" de personne différent dans ma zone de liste. Ma zone de liste n'affiche que les noms des personnes et les Id correspondants n'apparaissent pas (colonne cachée).
    Voilà.

    J'imagine que mes questions semblent parfois un peu "débiles".
    Par avance j'en suis désolé...

  12. #12
    Nouveau membre du Club
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2008
    Messages : 53
    Points : 38
    Points
    38
    Par défaut
    C'est bon ça marche, j'ai réglé mon pb. Ca venait de la ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQL = "SELECT * FROM Personne WHERE nom = """ & NomRecup & """;"
    Je l'ai remplacé par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQL = "SELECT * FROM Personne WHERE id = " & NomRecup & ";"
    Car même si dans ma zone de liste juste la colonne avec les champs "nom" s'affichent apparemment, la colonne 'Id' qui est cachée est à prendre en compte dans le select à la place de 'nom'.

    De même que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Box_Nom_personne.Value = rs.Fields("Box_Nom_personne")
    était incorrect.
    A remplacer par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Box_Nom_personne.Value = rs.Fields("nom")
    Merci pour ton aide.

  13. #13
    Nouveau membre du Club
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2008
    Messages : 53
    Points : 38
    Points
    38
    Par défaut
    Comment régler maintenant le pb d'ajout d'un nouvel enregistrement, de sauvegarde de celui-ci et de la sauvegarde de modifs sur un enregistrement existant? Et bien sûr par la suite comment faire une MAJ sur la zone de liste?

  14. #14
    Membre régulier
    Inscrit en
    Mars 2007
    Messages
    175
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 175
    Points : 76
    Points
    76
    Par défaut
    Bonjour,

    Je cherche a faire le même formulaire que toi.
    J'ai une table nommée Op, qui contient pour chaque client, son numéro, son nom, le service auquel il appartient, sa date d'entrée, ...

    J'ai donc fais un formulaire basé sur ma table OP.
    En affichant tous les champs de la table.
    J'ai remplacée la zone de texte nom par une zone de liste déroulante, avec comme colonne liée le nom (le numéro client est invisible).

    J'ai insérer le même code que toi sur click.
    Une erreur apparait quand je clique sur ma zone de liste déroulante:
    Erreur de compilation: variable non définie
    Le compilateur pointe sur : DdOpenDynaset.

    Que dois-je modifier??
    Merci d'avance.

  15. #15
    Nouveau membre du Club
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2008
    Messages : 53
    Points : 38
    Points
    38
    Par défaut
    Bonjour Antoine1504,

    Je vais regarder un peu en détail mais je te promets rien. Je suis vraiment débutant. Mais déjà dans la réponse que tu me donnes, il y a peut-être une erreur au niveau de ton code :

    dbOpenDynaset au lieu de DdOpenDynaset.

    Dis moi si ça change quelque chose.

  16. #16
    Membre régulier
    Inscrit en
    Mars 2007
    Messages
    175
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 175
    Points : 76
    Points
    76
    Par défaut
    Excuse moi j'ai fait une erreur de frappe, j'ai bien Db.
    Merci!

  17. #17
    Membre régulier
    Inscrit en
    Mars 2007
    Messages
    175
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 175
    Points : 76
    Points
    76
    Par défaut
    Quelqu'un a t'il une idée d'où vient le problème??
    Merci d'avance.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 04/08/2014, 12h16
  2. Réponses: 4
    Dernier message: 22/06/2009, 12h12
  3. Réponses: 1
    Dernier message: 01/05/2009, 09h12
  4. Réponses: 8
    Dernier message: 04/11/2008, 11h05
  5. [MySQL] Paramètrer ma requete après sélection dans un formulaire
    Par philippef dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 08/11/2006, 13h39

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