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 :

[Formulaire] Formulaire dynamique avec zone de liste modifiable


Sujet :

IHM

  1. #1
    Membre à l'essai
    Inscrit en
    Novembre 2003
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 33
    Points : 24
    Points
    24
    Par défaut [Formulaire] Formulaire dynamique avec zone de liste modifiable
    Bonjour,

    je dispose de 2 tables:

    - DOMAINE ( N°_Domaine, Nom_Domaine)
    - MATIERE ( N°_Matiere, Nom_Matiere, N°_Domaine)

    Ces deux tables sont liées par la clée primaire N°_Domaine.DOMAINE et la clée étrangère N°_Domaine.MATIERE.

    Je cherche à réaliser un formulaire dans lequel j'aurais:
    - une zone de liste modifiable où s'afficherait le champ Nom_Domaine (facile).
    _ une autre zone de liste modifiable où s'afficherait UNIQUEMENT les Champs Nom_Matiere ayant la clée étrangère identique à l'option choisie dans la première liste modifiable. Je souhaiterais que celà soit dynamique.

    Il m'a semblé qu'un sous formulaire était la solution mais rien n'y fait il m'affiche tous les enregistrements du champ Nom_Matiere et se moque éperdument de la donnée Nom_domaine.

    Je me doute bien que j'en suis le fautif mais je ne sais pas comment m'y prendre.

    En substance la question est:

    comment afficher un ou plusieurs enregistrements dans une liste modifiable lorsque cette dernière dépend d'une option préalablement définit par une zone de liste modifiable ou des boutons radio ou que sais-je encore ?

    Quelqu'un peut-il m'aider ? Par avance merci MarcoO !

  2. #2
    Membre actif Avatar de zEndymion
    Homme Profil pro
    Responsable des applications
    Inscrit en
    Avril 2006
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable des applications
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2006
    Messages : 162
    Points : 203
    Points
    203
    Par défaut
    Bonjour,

    Tu peux mettre sur l'evenement Afterpdate de ta première liste :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    me.MaListe2.RowSource = "SELECT Zone1, Zone2 FROM MaTable Where CleEtrangere = '" & me.MaListe1 & "'"
    me.MaListe2.Requery

  3. #3
    Membre à l'essai
    Inscrit en
    Novembre 2003
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 33
    Points : 24
    Points
    24
    Par défaut
    Merci, cependant j'espérais bien me passer du code VB.

    Bon j'ai besoin d'explications complémentaires.

    - suis-je obligé de travailler avec un sous formulaire ?

    - dans le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     me.MaListe2.RowSource = "SELECT Zone1, Zone2 FROM MaTable Where CleEtrangere = '" & me.MaListe1 & "'"
    me.MaListe2.Requery
    Que sont Zone1 et Zone 2 ?

    Par avance merci MarcoO!

  4. #4
    Membre actif Avatar de zEndymion
    Homme Profil pro
    Responsable des applications
    Inscrit en
    Avril 2006
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable des applications
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2006
    Messages : 162
    Points : 203
    Points
    203
    Par défaut
    Bonjour,


    Qui a parler de sous-formulaire ?

    Zone1 & 2 sont le nom des champs de ta table ou de ta requète que tu veux afficher dans ta liste.

    Pour info liste1 & 2 sont tes 2 zone de liste

    A+

  5. #5
    Membre à l'essai
    Inscrit en
    Novembre 2003
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 33
    Points : 24
    Points
    24
    Par défaut
    Bonjour,

    Merci à toi MacGiver pour l'intérêt que tu portes à mon petit problème.

    Ta réponse ne m'enchante pas car c'est exactement ce que je pensai et après avoir modifié la première zone modifiable, lors de l'intervention sur la deuxième une erreur s'affiche "type de données incompatibles avec le critère"

    En regardant la requête que tu m'offres je m'aperçois que Clée étrangère (numérique)= Nom_Domaine (Texte).

    Je pense que le problème se situe là.

    Je te redonne l'énoncé :

    - DOMAINE ( N°_Domaine, Nom_Domaine)
    - MATIERE ( N°_Matiere, Nom_Matiere, N°_Domaine)

    Ces deux tables sont liées par la clée primaire N°_Domaine.DOMAINE et la clée étrangère N°_Domaine.MATIERE.

    Je cherche à réaliser un formulaire dans lequel j'aurais:
    - une zone de liste modifiable où s'afficherait le champ Nom_Domaine (facile).
    _ une autre zone de liste modifiable où s'afficherait UNIQUEMENT les Champs Nom_Matiere ayant la clée étrangère identique à l'option choisie dans la première liste modifiable. Je souhaiterais que celà soit dynamique.

    Peux-tu m'aider pour la réécriture du code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    me.MaListe2.RowSource = "SELECT Zone1, Zone2 FROM MaTable Where CleEtrangere = '" & me.MaListe1 & "'"

  6. #6
    Membre actif Avatar de zEndymion
    Homme Profil pro
    Responsable des applications
    Inscrit en
    Avril 2006
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable des applications
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2006
    Messages : 162
    Points : 203
    Points
    203
    Par défaut
    Bonsoir,

    Il suffit de l'enlever les cotes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    me.MaListe2.RowSource = "SELECT Zone1, Zone2 FROM MaTable Where CleEtrangere = " & me.MaListe1
    Pour rappel :
    • Filtre = '" & Val(String) & "'" --> Pour du texte
    • Filtre = " & Val(Numéric) --> Pour du numeric
    • Filtre = #" & Format(Val,"MM/DD/YYYY") & "#" --> Pour les dates
    En espérant t'avoir aidé

  7. #7
    Membre à l'essai
    Inscrit en
    Novembre 2003
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 33
    Points : 24
    Points
    24
    Par défaut
    Bonjour MacGiver, et tout à chacun

    J'avance grace à tes conseils, je touche au but mais je rencontre une nouvelle difficulté, je l'expose :

    2tables
    - DOMAINE ( N°_Domaine, Nom_Domaine)
    - MATIERE ( N°_Matiere, Nom_Matiere, N°_Domaine)

    Ces deux tables sont liées par la clée primaire N°_Domaine.DOMAINE et la clée étrangère N°_Domaine.MATIERE.

    Lorsque je réalise la requête imbriquée suivante dans l'application requête d'ACCESS elle fonctionne et me renvoie les deux enregistrements voulus:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT [Nom_Matiere]
    FROM MATIERE
    WHERE [N°_Domaine]=(SELECT [N°_ Domaine] FROM DOMAINE WHERE [Nom_Domaine]="Transversalité");
    Mais quand je l'insère dans mon code liée à ma zone de liste modifiable la deuxième liste m'affiche tous les enregistrement et non les deux voulus:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Zone_Liste_Domaine_AfterUpdate()
    Me.Zone_Liste_Matiere.RowSource = "SELECT [Nom_Matiere] FROM MATIERE WHERE [N°_Domaine]=(SELECT [N°_Domaine] FROM DOMAINE WHERE [Nom_Domaine]='Transversalité')"
    Me.Zone_Liste_Matiere.Requery
    End Sub
    Pour Quelle raison ?

  8. #8
    Membre actif Avatar de zEndymion
    Homme Profil pro
    Responsable des applications
    Inscrit en
    Avril 2006
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable des applications
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2006
    Messages : 162
    Points : 203
    Points
    203
    Par défaut
    Bonjour,

    Remplace le "=" par un "In" dans


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT [Nom_Matiere] FROM MATIERE WHERE [N°_Domaine] In (SELECT [N°_Domaine] FROM DOMAINE WHERE [Nom_Domaine]='Transversalité')

  9. #9
    Membre à l'essai
    Inscrit en
    Novembre 2003
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 33
    Points : 24
    Points
    24
    Par défaut
    Merci MacGiver

    Eh bien Non ça ne marche pas, mais ça ne m'étonne pas: les requêtes fonctionnent hors d'un code VB mais dans un sub le fonctionnement est différent.

    Je me demande si je ne devrais pas passer par Recordset peux-tu m'aider?

    Merci MarcoO !

  10. #10
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311

  11. #11
    Membre à l'essai
    Inscrit en
    Novembre 2003
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 33
    Points : 24
    Points
    24
    Par défaut
    Merci pour la redirection mais je ne perçois pas en quoi mon code est incorrect même après avoir lu ce lien. Pourtant ça coince....

    2tables
    - DOMAINE ( N°_Domaine, Nom_Domaine)
    - MATIERE ( N°_Matiere, Nom_Matiere, N°_Domaine)

    Ces deux tables sont liées par la clée primaire N°_Domaine.DOMAINE et la clée étrangère N°_Domaine.MATIERE.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Private Sub Zone_Liste_Domaine_AfterUpdate() Zone_Liste_Matiere.RowSource = "SELECT [Nom_Matiere] FROM MATIERE WHERE [N°_Domaine]=(SELECT [N°_Domaine] FROM DOMAINE WHERE [Nom_Domaine]='"& Zone_liste_Domaine &"')" 
    Zone_Liste_Matiere.Requery End Sub
    Merci d'avance

  12. #12
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Le filtre devrait plutot être appliqué à N° Domaine plutot que nom_domaine non ?

  13. #13
    Membre à l'essai
    Inscrit en
    Novembre 2003
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 33
    Points : 24
    Points
    24
    Par défaut
    En fait je ne pense pas car:

    Zone_Liste_1 affiche le nom d'un domaine (Mathématiques,.....) et non un identifiant car pour l'utilisateur cela ne représente rien.

    Je récupère L'Identifiant correspondant au nom sélectionné par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (SELECT [N°_Domaine] FROM DOMAINE WHERE [Nom_Domaine]='"& Zone_liste_1 &"')"
    et recherche toutes les matières (calcul, problèmes, géométrie...) afférentes au domaine choisi et ce sont ces matières qui s'affichent dans Zone_Liste_2 grace à la première partie de la requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "SELECT [Nom_Matiere] FROM MATIERE WHERE [N°_Domaine]=( l'identifiant trouvé dans la requete du dessus
    Mais je réitère mon constat ça marche Lorsque je réalise la requête imbriquée dans l'application requête d'ACCESS mais pas issu du code VBA:

    Pourquoi ? je n'en sais rien

  14. #14
    Membre à l'essai
    Inscrit en
    Novembre 2003
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 33
    Points : 24
    Points
    24
    Par défaut
    Merci à chacun d'entre-vous

    Ne cherchez plus en bidouillant ça marche mais la logique m'échappe

    j'ai écrit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Zone_Liste_Domaine_AfterUpdate() 
    Me.Zone_Liste_Matiere.RowSource = "SELECT [Nom_Matiere] FROM MATIERE WHERE [N°_Domaine]="&Zone_Liste_Domaine&";"
    Me.Zone_Liste_Matiere.Requery 
    End Sub
    Car N°_Domaine est un numérique et Zone_Liste_Domaine est un texte ????

    Peut-être ai-je joué sur les propriétés de Zone_Liste_Domaine et qu'il ne renvoie pas une chaine de caractère mais l'identifiant ?????

    @ Bientôt MarcoO

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

Discussions similaires

  1. Conception form avec zone de liste modifiable
    Par Rifton007 dans le forum IHM
    Réponses: 11
    Dernier message: 03/03/2013, 19h41
  2. Réponses: 1
    Dernier message: 08/10/2008, 08h51
  3. Difficulté avec Zone de Liste modifiable
    Par YOP33 dans le forum IHM
    Réponses: 2
    Dernier message: 17/01/2008, 19h24
  4. Réponses: 45
    Dernier message: 06/03/2007, 16h30
  5. Sous formulaire avec zone de liste modifiable
    Par Krakotte dans le forum IHM
    Réponses: 7
    Dernier message: 20/01/2006, 10h21

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