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

Access Discussion :

Problème de mise à jour d'un sous formulaire [AC-2010]


Sujet :

Access

  1. #1
    Membre du Club
    Homme Profil pro
    Ingénieur Projet
    Inscrit en
    Mai 2017
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Projet
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2017
    Messages : 59
    Points : 40
    Points
    40
    Par défaut Problème de mise à jour d'un sous formulaire
    Bonjour à tous,

    Je débute sur Access et c'est malheureux car je dois réaliser une base de donnée pour faire un suivi documentaire.
    Contexte:


    Ma base de données doit permettre le suivi de documents que nous recevons d'un client. Ces documents sont revus en interne par 1 pilote et 1 ou plusieurs contributeurs.
    Le pilote et les contributeurs sont choisis dans la même table : "Agent"
    J'ai donc un lien direct entre ma table Document et ma table Agent et j'ai un lien via une table de jonction pour les contributeurs.



    Voilà la structure:
    Nom : Capture.PNG
Affichages : 571
Taille : 12,5 Ko


    Je souhaite réaliser un formulaire qui récapitule la majorité des informations relatives à chaque document (NumDoc, Livrable, nom du pilote, nom des contributeurs...)
    J'ai donc créé un formulaire contenant les 3 premiers champs et j'ai inséré un sous formulaire pour les contributeurs.
    Nom : Capture2.PNG
Affichages : 584
Taille : 33,2 Ko


    La colonne de gauche correspond au num unique du document (répété en bas à droite ) la colonne du milieu contient le nom du contributeur et la colonne de droite le num unique du contributeur dans la table "Agent"

    J'ai deux problèmes:

    Problème n°1:


    Mon sous formulaire, rempli par liste déroulante, n'enrichit pas ma "table de jonction contributeur" mais ma table "Agent". Autrement dit je créé un doublon dans ma table "Agent " à chaque fois que je sélectionne un contributeur (d'ou les num unique 69,70... alors qu'en réalité ma liste ne couvre que 20 numéro).
    Je pensais que l'idée c'était que l'association des deux clefs étrangères forme une clef unique dans la table de jonction. Pourquoi alors lorsque je sélectionne un contributeurs cela créé un doublon dans la table agent au lieu d'utiliser l'enregistrement déjà existant?

    Problème n°2
    Je ne parviens pas à ajouter des contributeurs à un document. Ceux inclus dans la table actuellement ont soit été introduit manu militari dans la table de jonction soit lors de précédents essais présentant d'autres problèmes. Si je vais tout en bas de mon sous formulaire et que je sélectionne un nouveau contributeur, le champs va se remplir normalement mais pas le num unique du doc (colonne de gauche). Par conséquent l'enregistrement n'est pas pris en compte.

    J'espère avoir fait un énoncé clair.

    Si vous pouviez m'aider vous me sauveriez d'un ulcère!

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

    Je pense que les problèmes viennent du fait que tu n'as pas basé ton sous-formulaire sur ta table de jonction mais sur ta table de contributeurs.

    Si tu fais un sous-formulaire lié par le numéro de document et que tu présentes une liste déroulante basée sur ta table des agents cela devrait faire ce dont tu as besoin.

    Il faudra que tu ajoutes les nouveaux agents dans la table Agent avant de pouvoir les utiliser dans ta table de jonction.

    Suggestion : Rennomer le champ Pillote en Clef_Agent pour mettre plus en évidence la relation.
    Il est recommandé de garder des noms identiques pour désigner les mêmes informations, cela réduit le travail de compréhension de l'application.
    Tu peux garder l'étiquette "Pilote" dans le formulaire de saisie mais en interne simplifie toi la vie :-).
    Même chose pour Clef_Contributeur dans ta table de jonction.

    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
    Homme Profil pro
    Ingénieur Projet
    Inscrit en
    Mai 2017
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Projet
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2017
    Messages : 59
    Points : 40
    Points
    40
    Par défaut Pb2 OK mais PB1 persiste!
    Bonjour Marot_r et merci beaucoup pour ta réponse!

    J'ai reconfiguré mes relations pour suivre ton conseil, merci, c'est effectivement plus clair.

    Problème 2: Check
    Problème 1: Toujours présent hélas...

    Ma sous-requête prend source dans les tables "JonctionDocumentContributeurs" et "Agent"
    Je prends tous les champs de la table jonction puisqu'elle réalise le lien et je prends les champs de la table "agent" pour réaliser la liste déroulante.
    Le lien père fils est réalisé sur les champs "Clefs_Document" de ma table "Document " et ma table Jonction.

    Pourtant, A chaque fois que je sélectionne un agent dans la table déroulante ça renseigne la table jonction avec une nouvelle clef_agent (et ça créé un doublon dans ma table agent). Je suis perdu!

  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
    Peux-tu poster le SQL de la source de données de ton sous-formulaire ?

    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
    Homme Profil pro
    Ingénieur Projet
    Inscrit en
    Mai 2017
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Projet
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2017
    Messages : 59
    Points : 40
    Points
    40
    Par défaut
    Bonjour Marot_r,

    Bien sûr, voilà le code SQL de mon sous formulaire et en dessous je met le code SQL de ma liste déroulante:

    Sous formulaire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT T_JonctionDocumentContributeurs.*, T_Agent.*
    FROM T_Agent INNER JOIN T_JonctionDocumentContributeurs ON T_Agent.Clef_Agent = T_JonctionDocumentContributeurs.Clef_Agent;
    

    Liste déroulante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT T_Agent.Agent, T_Agent.Pôle
    FROM T_Agent;

    Merci!

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

    Si tu ne veux pas afficher autre chose que le nom dans ton formulaire, tu n'as pas besoin de la table agent.
    Pour la liste :
    • Source : select T_Agent.* from T_Agent
    • Nombre de colonnes 3
    • Largeur des colonnes 0;10;10 (le 0 cache la 1ère colonne, les autres je l'ai mis selon ce que je fais d'habitude)
    • Largeur liste : 10,44 (le ,44 permet de tenir compte de la barre de défilement verticale.)

    La liste déroulante te permet de se passer de la jointure.

    Sinon essaye :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT T_JonctionDocumentContributeurs.*, T_Agent.*
    FROM T_JonctionDocumentContributeurs  INNER JOIN T_Agent ON T_Agent.Clef_Agent = T_JonctionDocumentContributeurs.Clef_Agent;

    La table principale doit être ta table de jonction et change la source de ta liste pour :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    select T_Agent.* from T_Agent
    Actuellement tu ne récupères pas la Clef_Agent dans ta liste or c'est elle que tu veux enregistrer dans ta table de jonction.

    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.

  7. #7
    Membre du Club
    Homme Profil pro
    Ingénieur Projet
    Inscrit en
    Mai 2017
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Projet
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2017
    Messages : 59
    Points : 40
    Points
    40
    Par défaut
    Je deviens chèvre.

    J'ai remplacé la source de mon sous formulaire pour le remplacer par cette requête SQL mais automatiquement, Access corrige la requête pour retourner à celle que j'ai indiqué plus haut. J'imagine que c'est déterminé par les relations non?

    J'ai supprimé ma liste "agent" et je l'ai recréé sur le champs "clef_agent" et là, nouveau blocage, je ne peux pas sélectionner un membre de la liste alors que pourtant elle est active et non verrouillée.

    Nom : Capture.PNG
Affichages : 522
Taille : 13,7 Ko

    Merci de ton temps!

  8. #8
    Membre du Club
    Homme Profil pro
    Ingénieur Projet
    Inscrit en
    Mai 2017
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Projet
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2017
    Messages : 59
    Points : 40
    Points
    40
    Par défaut
    Je crois que je sèche tout le monde avec mon problème. ^^

    Petite précision quand je clique sur une valeur de ma liste déroulante, dans la bande tout en bas de l'écran s'affiche le message suivant "Le contrôle ne peut pas être modifié; il est lié au champ 'uméroAuto 'T_Agent.ClefAgent'".

    Pourquoi cette action (cliquer dans la liste déroulante) équivaut à modifier ma clef primaire?

    Moriceot

  9. #9
    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
    Bonjour.

    Ci-joint une BD exemple qui fait ce que tu demandes ... sans effets bizarres.

    A+
    Fichiers attachés Fichiers attachés
    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.

  10. #10
    Membre du Club
    Homme Profil pro
    Ingénieur Projet
    Inscrit en
    Mai 2017
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Projet
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2017
    Messages : 59
    Points : 40
    Points
    40
    Par défaut
    Bonjour Marot_r,

    En fait ça ne répond pas exactement à mon besoin car je ne peux pas enrichir le formulaire.
    Mais je pense que je n'ai pas été très clair. A force de m'acharner dessus, je pense avoir compris la nature de mon problème.

    En créant mon formulaire je pensais bêtement que ma liste déroulante piloterait tout naturellement mon formulaire. Force est de constater que j'ai été quelque peu naïf.
    Si je ne paramètre pas ma liste déroulante comme étant un contrôle, Access a toutes les raisons de comprendre que je tente de modifier la clef primaire, d'où le fait qu'il me bloque.

    Comment expliquer alors, lorsque ma liste déroulante indique "Document1", que tous les enregistrements du formulaire et du sous-formulaire doivent s'afficher en conséquence?

    Je te joins une version simplifiée de ma BDD. J'aurais du le faire depuis le début car je suis sûr que c'est stupide.

    BDD_exemple developpez_.7z

    J'espère toucher au but!

    Merci de ton temps!

    Moriceot

  11. #11
    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
    Bonjour.

    Je vais essayer de regarder cela à la maison ce soir.

    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.

  12. #12
    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
    Désolé, à la maison j'ai 2007 et je pensais que cela marcherai vu qu'en principe le format et le même mais hélas non.

    Peux-tu décrire ce que tu veux faire ?

    Si je saisi bien ce serait :

    1. J'ouvre le formulaire, le formulaire ne présente aucun document.
    2. Je sélectionne le document qui m'intéresse dans la liste des documents.
    3. Le formulaire affiche le document choisi.
    4. Le sous-formulaire affiche la liste des agents assignés au formulaire.
    5. Je peux
      • Modifier le formulaire
      • Modifier la liste des agents assignés.


    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.

  13. #13
    Membre du Club
    Homme Profil pro
    Ingénieur Projet
    Inscrit en
    Mai 2017
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Projet
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2017
    Messages : 59
    Points : 40
    Points
    40
    Par défaut
    Oui c'est exactement ça.
    Je veux que lorsque je sélectionne un document dans ma liste de numérodoc le nom du livrable s'affiche en face et que le sous-formulaire affiche tous les contributeurs lié au formulaire père.
    A noter que j'ajouterai probablement d'autres champs.

    Je veux également pouvoir renseigner mon sous-formulaire qui peut être amené à être modifié.

    Merci!

  14. #14
    Membre du Club
    Homme Profil pro
    Ingénieur Projet
    Inscrit en
    Mai 2017
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Projet
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2017
    Messages : 59
    Points : 40
    Points
    40
    Par défaut Houra!
    Ca y est enfin!

    J'ai trouvé la solution qui, comme je le pensais était toute bête!

    Le problème venait de mon formulaire Père qui était lié à la table "T_Document". Comme je le pensais, modifier la liste déroulante basée sur ma "Clef_Document" dans ce cas précis était impossible car cela revenait à modifier une clef primaire en numéro automatique.

    Voilà comment j'ai fait:
    J'ai créé un formulaire indépendant qui possède uniquement une zone de liste basée sur la table T_Document et liée à la Clef_Document.
    J'ai ajouté à ce formulaire un sous formulaire "SF_Contributeurs" qui est basée sur la table de jonction.
    Ce sous-formulaire je l'ai lié via les champs Père-Fils à mon formulaire Père sur le champs "Clef-Document".

    En clair il n'y a rien de particulier si ce n'est que le formulaire père doit absolument être indépendant.
    Par contre, là où j'ai eu des difficultés, c'est qu'initialement, dans les propriétés "Père-Fils", en cliquant sur les 3 points pour les définir, Access m'affichait le mesage suivant:" Access ne peut pas lier 2 tables indépendantes".

    J'ai donc cru que c'était impossible et j'ai passé beaucoup de temps à chercher d'autres solutions avant de revenir. Access ne sait pas me proposer des champs pour les lier, certes... mais rien n'empêche de les taper en dur dans les cases.
    J'ai donc tapé le nom de ma zone de liste ne champ père et "SF_Contributeurs.[Clef_Document] en champs fils.

    Voilà! beaucoup d'effort pour quelque chose de très trivial en fin de compte.

    Merci encore pour ton temps Marot_t.

    Bonne journée

  15. #15
    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
    Bonjour et félicitation.


    beaucoup d'effort pour quelque chose de très trivial en fin de compte.
    Oui, ça fait souvent cette impression quand on a trouvé la solution mais tant qu'on ne la trouve pas on a aucune idée de la difficulté pour l'atteindre.

    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.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 12/04/2007, 16h04
  2. Mise à jour table à partir sous-formulaire
    Par Daniel MOREAU dans le forum Access
    Réponses: 6
    Dernier message: 19/05/2006, 09h26
  3. Mise à jour table liée à à sous formulaire
    Par Michel DELAVAL dans le forum Access
    Réponses: 1
    Dernier message: 15/04/2006, 16h26
  4. Mise à jour d'un sous formulaire
    Par tsyfar dans le forum Access
    Réponses: 4
    Dernier message: 31/01/2006, 11h41
  5. [formulaire] Mise à jour d'un sous formulaire
    Par virginie2 dans le forum IHM
    Réponses: 15
    Dernier message: 22/12/2005, 13h30

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