Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Modélisation
Modélisation Le forum qui vous aide à résoudre vos questions relatives à la modélisation (tables et relations) de votre base de données sous Access. Pour les états et les formulaires, postez dans le forum IHM.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 26/09/2011, 10h16   #1
Invité de passage
 
Inscription : juillet 2011
Messages : 9
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Secteur : Conseil

Informations forums :
Inscription : juillet 2011
Messages : 9
Points : 0
Points : 0
Par défaut Formulaire relations plusieurs à plusieurs

Bonjour,

Dans le cadre de mon projet en entreprise, je dois créer une base de données sous Access qui permettra aux utilisateurs de suivre leur activité et de gérer le stock de toutes les pièces qu'ils recevront en fonction de leur(s) service(s) d'affectation.

J'ai donc créé plusieurs tables.
Un utilisateur pouvant appartenir à au plus deux services et un service pouvant contenir un ou plusieurs utilisateurs, il existe donc une relation plusieurs à plusieurs entre les tables Services et Utilisateurs.

Pour effectuer cette relation, j'ai créé une table de jointure ServUtilisateurs.

Structure des tables :
Utilisateurs (#IdUtilisateur, Nom, Prenom)
Services (#IdService, NomService)
ServUtilisateurs(#IdUtilisateur, #IdService)

Mon problème est le suivant, je voudrais pouvoir créer un formlaire qui permettra d'affecter le ou les service(s) à un utilisateur en me basant sur les tables créées.

J'ai essayé plusieurs techniques :
- Formulaire principal -> table Utilisateurs et sous-formulaire -> Table de jointure mais je veux avoir le libellé du service et non l'identifiant qui n'est pas très explicite.
-Formulaire principal -> table Utilisateurs et sous formulaire -> table Services. Mais il m'est impossible d'affecter le service à l'utilisateur sélectionné.

Merci de votre aide.
Fifille est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2011, 12h05   #2
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 178
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 178
Points : 2 807
Points : 2 807
Bonjour Fifille,

La bonne technique est celle-ci :
Citation:
Envoyé par Fifille
Formulaire principal -> table Utilisateurs et sous-formulaire -> Table de jointure mais je veux avoir le libellé du service et non l'identifiant qui n'est pas très explicite.
mais, la source de données doit être une requête liant ta table de jointure aux tables concernées (et non la table de jointure elle-même), ceci afin de retrouver le libellé de la table du sous-formulaire.
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2011, 11h24   #3
Invité de passage
 
Inscription : juillet 2011
Messages : 9
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Secteur : Conseil

Informations forums :
Inscription : juillet 2011
Messages : 9
Points : 0
Points : 0
Bonjour Richard_35,

Merci pour ta réponse, par contre mon problème n'est pas résolu.

En fait, je voudrais que mes tables soient alimentées automatiquement lorsqu'on sélectionne l'utilisateur et le service auquel il doit être affecté (la sélection doit se faire sur libellé du service et non l'id qui n'est pas du tout explicite).

J'ai mis dans la table de jointure les clés IdService et IdUtilisateur pour empêcher qu'il y ait des doublons dans la saisie.

Par contre en passant par une requête, j'affiche le libellé mais lorsque je le choisis dans le formulaire il n'alimente pas automatiquement ma table Services ni la table de jointure.

As-tu une idée pour le faire? Si oui merci de me donner un exemple concret car je sèche vraiment à ce niveau.
Fifille est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2011, 15h18   #4
Invité de passage
 
Inscription : juillet 2011
Messages : 9
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Secteur : Conseil

Informations forums :
Inscription : juillet 2011
Messages : 9
Points : 0
Points : 0
Les suggestions de d'autres contributeurs sont les bienvenues.
Fifille est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2011, 15h34   #5
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 178
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 178
Points : 2 807
Points : 2 807
Suggestion :

F1 : Un formulaire basé sur Utilisateurs.
F2 : Un formulaire basé sur une requête ServUtilisateurs liée à Services.

Dans F1, faire glisser en sous-formulaire F2, liés entres eux par IdUtilisateur.

Cela fonctionne, aussi, dans l'autre sens (Service => Utilisateur).

Ceci effectué en 2 minutes via les assistants. Ensuite, à toi d'améliorer les formulaires en question.
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2011, 16h22   #6
Invité de passage
 
Inscription : juillet 2011
Messages : 9
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Secteur : Conseil

Informations forums :
Inscription : juillet 2011
Messages : 9
Points : 0
Points : 0
J’ai créé une requête dans le but de récupérer le libellé du service pour toutes les occurrences dont l’IdService est le même dans les tables Services et ServUtilisateurs.

Syntaxe : "SELECT distinct Services.Nom FROM Services INNER JOIN ServUtilisateurs ON Services.IdService = ServUtilisateurs.IdService;"

Est-ce de cette requête qu’il s’agit ? Si oui, elle ne me retourne pas le résultat désiré(uniquement les libellés dont l'Id est compris dans la table de jointure pourtant j'ai besoin de tous les libellés de la table Service) et en plus, dans le F2, je n’ai pas les libellés en liste déroulante.

En passant par la requête, mes tables de jointure et Services ne seront pas alimentées ce qui me gêne car mon but est de les alimenter pour chaque enregistrement.

Peut-être que pour les tables ayant des relations plusieurs à plusieurs il faudrait procéder autrement en ce qui concerne la conception des formulaires?

Je suis à l'écoute de toutes autres propositions; ce point me bloque dans l'avancé de mon projet.

Merci
Fifille est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2011, 16h46   #7
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 178
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 178
Points : 2 807
Points : 2 807
Dans le processus que je t'ai indiqué, le couple Service/Utilisateur est créé automatiquement dans la table de jointure ainsi que dans la table Service : à toi, ensuite, d'affiner.

Citation:
Envoyé par Fifille
Code sql :
SELECT DISTINCT Services.Nom FROM Services INNER JOIN ServUtilisateurs ON Services.IdService = ServUtilisateurs.IdService
Est-ce de cette requête qu’il s’agit ?
==> non.
Code sql :
1
2
SELECT Utilisateur_Service.Id_Utilisateur, Utilisateur_Service.Id_Service, Service.Nom_Service
FROM Utilisateur_Service LEFT JOIN Service ON Utilisateur_Service.Id_Service = Service.Id_Service ;

Passes par l'assistant, c'est plus pratique.
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2011, 17h54   #8
Invité de passage
 
Inscription : juillet 2011
Messages : 9
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Secteur : Conseil

Informations forums :
Inscription : juillet 2011
Messages : 9
Points : 0
Points : 0
Merci beaucoup pour ton aide Richard_35 !

Cette solution je l'avais trouvée en procédant autrement. Mais je l'ai abandonnée car je rencontrais un problème (que je rencontre toujours); en fait, lorsque je sélectionne un service (le libellé), il incrémente IdService ce qui donne des doublons dans ma table Services (Exemple : Id : 1 - Libellé : Gestion, Id : 2 - Libellé : Gestion); Lorsque je sélectionne l'Id, c'est ok mais mon problème est toujours le même car ma sélection doit se faire sur le libelllé et non sur l'Id qui sera masqué par la suite.

Pour pallier ce problème, dans les propriétés du NomService de la table Services, j'ai indexé à "Oui Sans doublon". Néanmoins çà ne résout pas le problème parce que je voudrais affecter un service existant à un utilisateur et non créer un nouveau service à chaque fois que je veux affecter un service à un utilisateur.

Merci une fois de plus de votre aide.
Fifille est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2011, 12h03   #9
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 178
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 178
Points : 2 807
Points : 2 807
Bonjour Fifille,

Autre suggestion :
  • dans ta table ServUtilisateurs(#IdUtilisateur, #IdService), déclarer IdUtilisateur et IdService en tant que liste déroulante sur les tables concernées ;
  • dans le formulaire de gestion des utilisateurs, via l'assistant, un bouton appelant un formulaire de gestion de ta table ServUtilisateurs (requête pour trouver les libellés) avec IDUtilisateur verrouillé ;
  • dans le formulaire de gestion des services, via l'assistant, un bouton appelant un formulaire de gestion de ta table ServUtilisateurs (requête pour trouver les libellés) avec IDService verrouillé.

==> de cette manière, tu attaques ta table de liaison par les deux bouts... si j'ose dire.

Je te laisse découvrir tout cela via les assistants.
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2011, 13h54   #10
Invité de passage
 
Inscription : juillet 2011
Messages : 9
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Secteur : Conseil

Informations forums :
Inscription : juillet 2011
Messages : 9
Points : 0
Points : 0
Bonjour Richard_35,

Merci pour ton intérêt; cette suggestion ne m'aide pas plus que çà; je souhaite affecter un service existant à un utilisateur bien défini sur le formulaire de gestions des utilisateurs.

La solution proposée hier me convient mais je voudrais plutôt faire une recherche sur les libellés (existants) du service et non sur l'id; cette recherche sur les libellés me pose problème car elle duplique les libellés du service chaque fois que je voudrais en affecter à un utilisateur ce qui n'est pas du tout correct....

Peut-être qu'il faudrait que je pense à procéder autrement, mais ce qui me gêne c'est le fait de gérer la relation plusieurs à plusieurs qui existe entre ces tables dans un formulaire. Personne n'a jamais géré une relation plusieurs à plusieurs dans un formulaire?

Je vous remercie par avance pour vos propositions.
Fifille est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2011, 14h24   #11
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 178
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 178
Points : 2 807
Points : 2 807
Citation:
Envoyé par Fifille
je souhaite affecter un service existant à un utilisateur bien défini sur le formulaire de gestions des utilisateurs
est en contradiction avec
Citation:
Envoyé par Fifille
Un utilisateur pouvant appartenir à au plus deux services
==> donc, une liste déroulante sur le formulaire utilisateur ne suffit pas : il faut une liste, avec chaque ligne de la liste comportant le choix du service.
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2011, 15h44   #12
Invité de passage
 
Inscription : juillet 2011
Messages : 9
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Secteur : Conseil

Informations forums :
Inscription : juillet 2011
Messages : 9
Points : 0
Points : 0
Je m'explique :

Citation:
Envoyé par Fifille Un utilisateur pouvant appartenir à au plus deux services
=> Pour un utilisateur donné, on peut affecter un ou deux services max; c'est-à-dire que sur le formulaire, dans le SF2, on va sélectionner dans une liste déroulante les services existants dans la limite d'un choix de deux services par utilisateur; d'où ma citation:

Citation:
Envoyé par Fifille
je souhaite affecter un service existant à un utilisateur bien défini sur le formulaire de gestions des utilisateurs
Mais le problème que j'ai actuellement c'est que lorsque je déroule la liste pour sélectionner un service, l'id s'incrémente dans la table Services ce qui crée des doublons dans cette table alors que je voudrais qu'on se limite aux services existants dans la table donc visibles dans la liste de choix du service et si un service n'existe pas, on le créera mais il fera l'objet d'un nouvel id.

J'espère que j'ai été plus claire.

Merci
Fifille est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2011, 15h57   #13
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 178
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 178
Points : 2 807
Points : 2 807
Oui, c'est clair depuis le début...

Citation:
.../... lorsque je déroule la liste pour sélectionner un service, l'id s'incrémente dans la table Services .../...
==> la liste que tu présentes doit interdire la création dans Service.
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2011, 16h19   #14
Invité de passage
 
Inscription : juillet 2011
Messages : 9
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Secteur : Conseil

Informations forums :
Inscription : juillet 2011
Messages : 9
Points : 0
Points : 0
Citation:
Envoyé par Richard_35 Voir le message
==> la liste que tu présentes doit interdire la création dans Service.
Comment puis-je faire celà? Dans la propriété "limiter à la liste", j'ai mis "oui" mais çà ne change rien.....

Je sèche vraiment dessus pourtant j'ai l'impression de ne pas être loin de la solution
Fifille est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2011, 17h35   #15
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 178
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 178
Points : 2 807
Points : 2 807
Vite fait, uniquement avec les assistants (par la force des choses : je ne connais pas VBA...).

Formulaire Service :
  • gère les services ;
  • affiche la liste des utilisateurs de ce service ;
  • double-click sur Id_Utilisateur => ajout de l'utilisateur dans Utilisateur_Service ;
  • rafraîchir le formulaire initial (click-droit : Afficher tous les enregistrements).

Formulaire Utilisateur :
  • gère les utilisateurs ;
  • affiche la liste des services de cet utilisateur ;
  • double-click sur Id_Service => ajout du service dans Utilisateur_Service ;
  • rafraîchir le formulaire initial (click-droit : Afficher tous les enregistrements).

Je t'invite à affiner la chose...
Fichiers attachés
Type de fichier : zip Utilisateur_Service.zip (19,8 Ko, 9 affichages)
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h05.


 
 
 
 
Partenaires

Hébergement Web