Activation sur clic d'un formulaire

Résolu/Fermé
jollyjohn Messages postés 100 Date d'inscription mercredi 16 juin 2010 Statut Membre Dernière intervention 18 janvier 2016 - 16 juin 2010 à 20:01
blux Messages postés 26020 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 3 mai 2024 - 17 juin 2010 à 12:51
Bonjour,

Dans la cadre d'un stage, je dois fabriquer des formulaires a partir d'une base de données Access.
Voilà mes tables :
- REGION (Code Region, Region)
- CENTRE (Code Centre, Centre, #Code Region)
- SITE (Code site, Site, Adresse, Code Postal, Ville, Propiete Location exploitation, #Code centre)
- MATÉRIEL (Code Materiel, Fournisseur, #Code Centre, #Code Region)

J'ai 2 listes déroulantes dans un formulaire :
- Une 1ère qui liste les régions.
- Une 2ème qui liste les centres situés dans la région choisie dans la 1ère liste


J'affiche en dessous dans un sous-formulaire les matériels qui répondent au 2 critères ci-dessus. Seul bémol, pour que les enregistrements répondant aux critères des listes s'affichent je suis obligé de sélectionner un centre qui appartient à la région sélectionnée précédemment.

Voilà ce que j'aimerais faire :
Une fois que l'utilisateur a choisi la région dans la 1ère liste, je souhaite que tous les matériels relatifs a cette région s'affichent dans mon sous formulaire sans nécessairement devoir sélectionner une valeur dans la liste CENTRE.
En résumé, je souhaite que la liste CENTRE soit optionnelle et l'utilisateur puisse ne sélectionner que la REGION s'il le souhaite.

Pour vous indiquer encore mieux ce que j'ai fais pour l'instant, voici mes requêtes SQL :

- Pour la liste déroulante REGION :
SELECT REGION.[Code Region], REGION.Region
FROM REGION;

- Pour la liste déroulante CENTRE :
SELECT [CENTRE].[Code centre], [CENTRE].[Centre], [CENTRE].[Code region]
FROM CENTRE INNER JOIN REGION ON CENTRE.[Code region]=REGION.[Code region]
WHERE ((REGION.[Code region])=Forms![Mon Formulaire]!Listeregion)
GROUP BY [CENTRE].[Code region], [CENTRE].[Code centre], [CENTRE].[Centre];

- Enfin la requête que j'ai liée à mon sous formulaire qui m'affiche les enregistrements :
SELECT MATERIEL.[Type matériel], MATERIEL.Fournisseur, CENTRE.[Code centre], CENTRE.Centre, CENTRE.[Code region]
FROM ((CENTRE INNER JOIN REGION ON CENTRE.[Code region]=REGION.[Code region]) INNER JOIN SITE ON CENTRE.[Code centre]=SITE.[Code Centre]) INNER JOIN (SOCIETE INNER JOIN MATERIEL ON SOCIETE.Societe=MATERIEL.[Code societe]) ON SITE.[Code site]=MATERIEL.[Code site]
WHERE (((REGION.[Code region])=Forms![Formulaire BUREAUTIQUE]!Listeregion) And ((CENTRE.[Code centre])=Forms![Formulaire BUREAUTIQUE]!Listecentre))
GROUP BY MATERIEL.[Type matériel], MATERIEL.Fournisseur, CENTRE.[Code centre], CENTRE.Centre, CENTRE.[Code region];

Merci d'avance, Jollyjohn.




2 réponses

blux Messages postés 26020 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 3 mai 2024 3 289
16 juin 2010 à 20:42
Salut,

ce que tu peux faire dans ce cas, c'est jouer avec les champs père-fils.

Dans un cas, tu ne mets qu'un seul champ père et si on saisit un centre, tu rajoutes le deuxième champ père...

Ca se fait avec 4 ou 5 lignes de VBA...
0
jollyjohn Messages postés 100 Date d'inscription mercredi 16 juin 2010 Statut Membre Dernière intervention 18 janvier 2016 37
Modifié par jollyjohn le 17/06/2010 à 11:17
Merci pour cette réponse, j'ai essayé avec ces liens champs pères champs fils mais je ne vois pas a quel endroit indiquer ce fameux lien, mis a part par l'interface ou un message d'erreur me dit : "impossible de lier des formulaires indépendants". Ainsi je souhaiterais savoir comment passer outre ce problème et ou placer les lignes de code (et pourquoi pas savoir lesquelles j'ai fais du Access auparavant mais ça commence a remonter a loin).

Je souhaiterais avoir plus de précisions si c'étais possible.

De plus je voudrais savoir comment écrire la requête liée à mon sous formulaire affichant les enregistrements étant donné que le champ site ne doit être pris en compte que si l'utilisateur clique sur la liste déroulante du site comme j'ai pu le dire précédemment.

En effet comme j'ai mis un AND dans la requête les 2 listes déroulantes doivent être renseignées ce que je ne souhaite pas forcément.

Merci d'avance.
0
blux Messages postés 26020 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 3 mai 2024 3 289
17 juin 2010 à 12:51
1 - Tu crées un formulaire basé sur la table matériel (nommé SF_Mat, par exemple)
2 - Tu crées un formulaire (nommé Principal, par exemple) dans lequel tu auras tes deux listes déroulantes qui renverront comme colonne liée celle de #région et #centre (avec une source de données type table/requête et le SELECT qui va bien en définition)
3 - Tu passes le formulaire Principal en mode création et tu fais glisser le formulaire SF_Mat dans la zone détail du form Principal
4 - SF_mat est devenu un sous-formulaire de Principal
5 - Tu vas ensuite faire un clic sur le rebord de SF_mat pour le sélectionner, ensuite tu iras dans ses propriétés, tu iras sur données pour remplir la valeur de champ fils : #region et celle de champ père 'nomdetazonedelistequirenvoielecoderegion'
6 - Ton sous-form est maintenant asservi à la saisie dans ta zone de liste
7 - Si tu veux asservir aux deux zones, tu mets les champs séparés par des points-virgules :
Chx_List_Reg;Chx_List_Centre et Code_Region;Code_Centre

Il faut cependant que tu aies créé des relations entre les tables, sinon point de salut...

Ensuite, on verra comment faire pour gérer les non-saisies dans l'une ou l'autre des deux listes.
0