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 :

Listes qui en alimentent d'autres


Sujet :

IHM

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2014
    Messages : 43
    Points : 11
    Points
    11
    Par défaut Listes qui en alimentent d'autres
    Bonsoir!

    Il y a quelques temps, j'ai créé avec l'aide de ClaudeLeloup une DB qui me permettait de rechercher des données grâce à des cases et des menus déroulants.

    Cependant, je souhaiterais faire en sorte que lorsque je choisis un critère, les autres champs se mettent à jour automatiquement avec les données correspondantes. J'ai donc utilisé ce tutoriel. J'ai d'abord fait l'exemple donné pour comprendre et ensuite j'ai voulu adapter les données avec ma DB et changer deux trois choses.

    Mais cela n'a pas fonctionné donc j'ai fait avec les mêmes lignes que dans le tuto et ça ne fonctionne pas non plus du coup je suis repassée à l'ancien.

    Voici le 1er code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     Private Sub cmbRechMachine_AfterUpdate()
    Dim lngcodMa  As Long
    Dim SQL       As String
     
    If Not IsNumeric(Me!cmbRechMachine) Then Exit Sub
    lngcodMa = Me!cmbRechMachine
    SQL = "SELECT codMarque, Marque, codMachine FROM Marques WHERE codMachine =" & lngcodMa & "ORDER BY Marque"
    cmbRechMarque.RowSource = SQL
    cmbRechMarque.SetFocus
     
    End Sub
    Et le second:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub cmbRechMachine_AfterUpdate()
    Dim lngcodMac As Long
    Dim SQL As String
     
    If Not IsNumeric(Me!cmbRechMachine) Then Exit Sub
    lngcodMac = Me!cmbRechMachine
    SQL = "SELECT codMarque, Marque, codMachine FROM Marques WHERE codMachine =" & lngcodMac & "ORDER BY Marque"
    cmbRechMarque.RowSource = SQL
    cmbRechMarque.Enabled = True
    cmbRechMarque.SetFocus
    cmbRechMarque.Dropdown
     
    End Sub
    Lorsque je veux exécuter mon formulaire, le message suivant apparait:



    L'interface de mon formulaire:



    Et ma DB déconfidentialisée (Celle que Claude m'a adapté) en état de marche et sans le code que je cherche à insérer (il manque le critère "Année" et la modif du code qui va avec par rapport à ma db actuelle mais je le rajouterais ensuite):

    20140529Merellys.7z

    (PS: Le tuto prend en compte deux critères mais je voudrais pourvoir l'adapter pour tous mes menus déroulants.)

    Merci de m'avoir lue et je vous remercie pour votre future aide.

    Merellys

    PS2: encore un grand merci à Claude qui m'a beaucoup aidée pour la première partie de mon problème

  2. #2
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    Merellys bonjour,

    Plusieurs erreurs et à la fois de conception et dans l'utilisation du code VBA.

    Pourquoi le nom de la machine dans la table composant et pas l'ID ? Pourquoi également le nom du fournisseur et l'ID ?
    Dans un modèle correctement conçu seules les clés (clés étrangères) doivent être insérées dans les tables dérivées et ce pour raison de maintenance évidente.

    Ensuite j'ai réadapté une partie de ton code afin de faire fonctionner celui-ci, il sera à améliorer certes mais il est fonctionnel, mais avant de te livrer la solution parcourons en détail tes erreurs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If Not IsNumeric(Me!cmbRechMachine) Then Exit Sub
    lngcodMa = Me!cmbRechMachine
    SQL = "SELECT codMarque, Marque, codMachine FROM Marques WHERE codMachine =" & lngcodMa & "ORDER BY Marque"
    Donc ici erreur 1 : Me!cmbRechMachine ne peut être de type numérique puisque dans les propriétés de ton contrôle tu as colonne liée = 2 (Me!cmbRechMachine te renvoie donc une châine de type string : cheval, chat...). Dans ton cas 2 solutions, récupérer l'id (mettre colonne liée à 1) ou chercher la valeur de la colonne 2 que tu aurais obtenu ainsi : Me!cmbRechMachine.column(1).

    Regarde ici : http://access.developpez.com/faq/?pa...#ListBoxColumn

    Erreur 2 : Dans ta requête codMachine n'est pas un champ de ta table marques, donc cela ne peut pas fonctionner. Dans ce cas il faut réaliser une jointure. D'autre part les associations marques-machines sont fournies dans la table composants, tu ne dois plus chercher dans la table marques mais filtrer les marques associées à la machine choisie (seule la table composants te le permets).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cmbRechMarque.RowSource = SQL
    Dans cette partie le contrôle cmbRechMarque n'étant pas visible, cela provoque une erreur. Avant de modifier le contenu, il est donc impératif de rendre le contrôle visible Me.cmbRechMarque.Visible = True et de rafraîchir le contenu (Me.cmbRechMarque.Requery).

    Par ailleurs je te déconseilles fortement d'utiliser SQL comme variable (plutôt sSQL). Tu trouveras ci-dessous les mots réservés :

    http://office.microsoft.com/fr-fr/ac...sreservedwords

    Le code corrigé ici :

    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
    Private Sub cmbRechMachine_AfterUpdate()
      '
      Dim sSQL       As String
      '
      ' errreur dans cette requête une jointure est nécessaire car codmachine n'appartient pas à la table
      ' SQL = "SELECT codMarque, Marque, codMachine FROM Marques WHERE codMachine = " & lngcodMa & " ORDER BY Marque"
      '
      ' requête corrigée et protégée par des ' car il s'agit d'un champ string
      '
      sSQL = "SELECT Marques.codMarque, Marques.Marque FROM Marques INNER JOIN Composants ON Marques.codMarque = Composants.IdMarque "
      sSQL = sSQL & " WHERE (((Composants.Machine) = '" & Me!cmbRechMachine.Column(1) & "')) GROUP BY Marques.codMarque, Marques.Marque ORDER BY Marques.Marque;"
      '
      Me.cmbRechMarque.RowSource = sSQL
      '
      Me.cmbRechMarque.Requery          ' actualise la source de données
      Me.cmbRechMarque.Visible = True   ' rend visible le contrôle
      Me.cmbRechMarque.SetFocus         ' rend le contrôle actif
      Call RefreshQuery
    End Sub
    Afin de trouver tes erreurs plus facilement, je te conseilles de lire cet excellent article de Cafeine : http://cafeine.developpez.com/access...el/debugprint/

    Ci-joint la base corrigée, je te laisse prendre connaissance de tout çà et revenir vers nous si tu le souhaites.

    Ici la base : Merellys_2014_07_04.zip

    JimboLion
    N'oubliez pas le Tag si la réponse donnée vous a été utile et pour une réponse pertinente.
    Retrouvez-moi sur le chat en salon base de données

  3. #3
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2014
    Messages : 43
    Points : 11
    Points
    11
    Par défaut
    Bonjour!

    Tout d'abord merci pour ta réponse et deuxièmement avant d'attaquer à regarder la base que tu as corrigée, j'aimerais poser deux trois questions afin de mieux comprendre.

    Pourquoi le nom de la machine dans la table composant et pas l'ID ? Pourquoi également le nom du fournisseur et l'ID ?
    Dans un modèle correctement conçu seules les clés (clés étrangères) doivent être insérées dans les tables dérivées et ce pour raison de maintenance évidente.
    - Ici je ne comprends pas trop ce que tu veux dire par l'id. Tu veux parler du numéro qu'il y a en face de chaque fournisseur ou machine?

    Donc ici erreur 1 : Me!cmbRechMachine ne peut être de type numérique
    - Bon là ok, c'est une erreur que j'aurais pu détectée moi même, je n'ai pas réfléchi sur le coup et c'est vrai que je n'ai pas tous les réflexes, déjà ça va m'y faire penser pour les prochains, merci.


    - La fonction "column" correspond à "colonne"?

    - Pour les sSQL, je les avaient mis suivant le conseil de Claude il me semble et après voyant que ça ne changeait rien, j'ai remis SQL tout court mais je m'en souviendrais aussi.

    J'attaque à regarder la base, merci

  4. #4
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    Merellys,

    - Ici je ne comprends pas trop ce que tu veux dire par l'id. Tu veux parler du numéro qu'il y a en face de chaque fournisseur ou machine?
    oui dans un modèle seules les clés doivent redescendre, si tu regardes ta table composant machine est de type texte court alors qu'on aurait dû recevoir la valeur de codMachine (2 en lieu et place de cheval)

    Dans cette même table tu as le fournisseur et son id (Gamm Vert et 290), seul 290 aurait suffit.

    - La fonction "column" correspond à "colonne"?
    Oui

    Jimbolion
    N'oubliez pas le Tag si la réponse donnée vous a été utile et pour une réponse pertinente.
    Retrouvez-moi sur le chat en salon base de données

  5. #5
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2014
    Messages : 43
    Points : 11
    Points
    11
    Par défaut
    Tu voudrais que je retrouve le fournisseur par l'ID dans mon formulaire?

  6. #6
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    Merellys,

    non on cherche par le nom mais le stockage dans la base se fait par des id !

    jimbolion
    N'oubliez pas le Tag si la réponse donnée vous a été utile et pour une réponse pertinente.
    Retrouvez-moi sur le chat en salon base de données

  7. #7
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2014
    Messages : 43
    Points : 11
    Points
    11
    Par défaut
    Ok ok je n'avais pas bien compris

  8. #8
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    N'oubliez pas le Tag si la réponse donnée vous a été utile et pour une réponse pertinente.
    Retrouvez-moi sur le chat en salon base de données

  9. #9
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2014
    Messages : 43
    Points : 11
    Points
    11
    Par défaut
    J'ai travaillé un peu dessus en essayant de comprendre, et j'ai compris que c'était plus ou moins le même principe qu'attribuer les valeurs dans les menus déroulants. enfin, je crois x)

    je l'ai fait pour un autre exemple suivant le tiens:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub cmbRechSecteur_AfterUpdate()
     '
     Dim sSQL   As String
     '
     sSQL = "SELECT TBLSecteur.codSecteur, TBLSecteur.Secteur FROM TBLSecteur INNER JOIN Composants ON TBLSecteur.codSecteur = Composants.IdSecteur"
     sSQL = sSQL & " WHERE (((Composants.Fournisseur) = '" & Me!cmbRechSecteur.Column(1) & "')) GROUP BY TBLSecteur.Secteur;"
     '
     Me.cmbRechSecteur.RowSource = sSQL
     '
     Me.cmbRechSecteur.Requery
     Me.cmbRechSecteur.Visible = True
     Me.cmbRechSecteur.SetFocus
      Call RefreshQuery
    End Sub
    Donc là j'ai essayé d'avoir le rapport entre "Secteur" et "Fournisseur".

    Cependant, lorsque je décoche une case, ça garde la valeur prise avant en tête et ça ne reset pas les menus déroulants...

    Rajout: Lundi je passe sous Access 2013, est-ce que ça va poser des problèmes?

  10. #10
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    Merellys,

    Que retourne ta variable sSQL ?

    en faisant un debug.print de celle ci tu devrais trouver facilement ton erreur !

    regarde ce tuto concernant la partie debug : http://cafeine.developpez.com/access...el/debugprint/

    pour access 2013 aucun soucis, il te faudra convertir ta base tout simplement

    Jimbolion
    N'oubliez pas le Tag si la réponse donnée vous a été utile et pour une réponse pertinente.
    Retrouvez-moi sur le chat en salon base de données

  11. #11
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2014
    Messages : 43
    Points : 11
    Points
    11
    Par défaut
    Bonjour!

    J'ai un petit soucis...

    Nom : Sans titre.jpg
Affichages : 68
Taille : 7,1 Ko

    Pourtant avec le code que tu m'as donné, et pareil avec celui que j'ai fais pour l'autre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub cmbRechSect_AfterUpdate()Dim sSQL	As String
     ‘
     sSQL = “SELECT TBLMachine.codMachine, TBLMachine.Reference INNER JOIN Composants ON TBLMachine.codMachine = Composants.IdMachine”
     sSQL = sSQL & “ WHERE (((Composants.Secteur) = ‘” & Me!cmbRechSect.Column(1) & “’)) GROUP BY TBLMachine.codMachine, TBLMachine.Reference ORDER BY TBLMachine.Reference;”
     ‘
     Me.cmbRechSect.RowSource = sSQL
     ‘
     Me.cmbRechSect.Requery
     Me.cmbRechSect.Visible = True
     Me.cmbRechSect.SetFocus
     Call RefreshQuery
    End sub

  12. #12
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    Merellys,

    Quel est donc le contenu de sSQL (utilises donc un debug.print), que renvoie la liste lorsque tu copies-colles dans l'éditeur QBE (Assistant requête) ?

    Jimbolion
    N'oubliez pas le Tag si la réponse donnée vous a été utile et pour une réponse pertinente.
    Retrouvez-moi sur le chat en salon base de données

  13. #13
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2014
    Messages : 43
    Points : 11
    Points
    11
    Par défaut
    Bonjour

    bon je ne m'en sors vraiment pas avec ce projet. donc je vais abandonner pour le moment et passer au formulaire de saisi, je vais donc faire un nouveau sujet si je ne m'en sors pas. Je laisse ce sujet ouvert car je reviendrais sur le problème dès que j'aurais terminé celui de saisie.

    Le temps me manque, certes, c'est un bonus assez pratique mais je préfère me concentrer plus particulièrement sur la seconde partie du projet.

    En 2 semaines, c'est possible de réaliser un formulaire de saisie + les listes qui en alimentent d'autres? (sachant que je suis une débutante)

  14. #14
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    Merellys,

    Avances donc sur ton formulaire de saisie si tu le souhaites, on reprendra à l'issue de ce travail la requête et les différents éléments qui te posent problème.

    Jimbolion
    N'oubliez pas le Tag si la réponse donnée vous a été utile et pour une réponse pertinente.
    Retrouvez-moi sur le chat en salon base de données

  15. #15
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2014
    Messages : 43
    Points : 11
    Points
    11
    Par défaut
    D'ac

    Je préfère rendre le travail à temps et quitte à bosser un peu pendant les vacances pour boucler le "bonus" je pense que c'est un peu plus judicieux vis à vis du chef...

    Merci pour ton aide en tout cas Jimbolion

  16. #16
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    Merellys,

    peux tu poster la dernière version de la base afin de reprendre le sujet en profondeur.

    pour la partie fonctionnelle, on essaie de se retrouver sur le chat.

    cordialement

    jim
    N'oubliez pas le Tag si la réponse donnée vous a été utile et pour une réponse pertinente.
    Retrouvez-moi sur le chat en salon base de données

Discussions similaires

  1. Concevoir une liste qui en alimente une autre
    Par argyronet dans le forum IHM
    Réponses: 17
    Dernier message: 14/08/2020, 17h21
  2. Réponses: 8
    Dernier message: 23/06/2011, 17h58
  3. [AC-2007] Inserer la valeur dans une table avec une liste qui en alimente une autre
    Par DidoFido dans le forum VBA Access
    Réponses: 6
    Dernier message: 03/12/2009, 11h39
  4. Probleme avec liste qui en alimente un autre
    Par DidoFido dans le forum IHM
    Réponses: 1
    Dernier message: 30/11/2009, 22h24
  5. Réponses: 3
    Dernier message: 30/07/2008, 16h51

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