Appeler un formulaire à partir de deux autres au choix

Fermé
Laurano_75018 Messages postés 10 Date d'inscription dimanche 30 janvier 2022 Statut Membre Dernière intervention 5 février 2022 - 30 janv. 2022 à 09:20
yg_be Messages postés 22841 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 1 juin 2024 - 1 févr. 2022 à 15:43
Bonjour,

Pour simplifier mon problème, j'ai 3 formulaires différents dans ma base access :
- Le formulaire A contient les données "Catégorie" et "Famille"
- Le formulaire B contient les données "Catégorie", "Famille" et "sous-famille"
- Le formulaire C contient les données "Famille", "sous-famille" et "segment"

Chaque formulaire interroge des requêtes sélections. Le deuxième et le troisième formulaire comportent des sous-formulaires.

Je veux que depuis le formulaire A, en cliquant sur mon code "Famille", j'arrive au formulaire B avec la valeur du code correspondant. J'y arrive sans difficulté en faisant une macro qui exécute la requête sélection associée au formulaire.

Mais je veux aussi que depuis mon formulaire C, quand je clique sur le code "Famille", je puisse arriver de la même façon au formulaire B et c'est là que je coince.
J'ai dans un premier temps mis en place tout bêtement dans la requête de sélection associée au formulaire B une condition "OU" dans le champs famille pour indiquer que la valeur viendrait du formulaire A ou du formulaire B. Mais je n'ai pas le comportement voulu : quand je pars du formulaire A, j'arrive bien au formulaire B. Mais quand je pars du formulaire C, il me demande le code "Famille".

Comment dois-je faire donc pour pouvoir interroger un formulaire à partir d'un champs dont la valeur peut provenir de plusieurs formulaires différents?

En espérant avoir été clair et pas trop long, je vous remercie par avance pour vos réponses.

8 réponses

yg_be Messages postés 22841 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 1 juin 2024 1 473
30 janv. 2022 à 13:24
bonjour,

Quand tu écris "une macro qui exécute la requête sélection associée au formulaire", peux-tu être plus précis? Que fait la macro?

Pourquoi ne pas avoir, pour le formulaire C, une autre macro qui utilise une autre requête comme filtrer d'ouverture du formulaire?
0
Laurano_75018 Messages postés 10 Date d'inscription dimanche 30 janvier 2022 Statut Membre Dernière intervention 5 février 2022
30 janv. 2022 à 13:59
Bonjour,

Merci pour ta réponse.

Je débute dans l'utilisation d'access. Je veux en fait transposer dans Access tout un suivi des gestion de projet que je fais actuellement dans Excel mais pour lequel access serait surement infiniment plus approprié. Je suis donc face à différents cas de figures que je connais dans Excel et que je dois retransposer dans access mais je suis très ouvert sur la façon de m'y prendre puisque de toute façon je démarre.
Donc peu importe comment je fais actuellement car il y a fort à parier que je ne m'y prends pas bien. Je voudrais en fait juste savoir comment je peux gérer le cas où je veux afficher un formulaire qui repose sur une requête de sélection d'un champs, sachant que ce champs peut-être défini à partir de différentes sources. La condition "ou" pour définir les sources possibles ne me semble pas remplir son office sans que je comprenne pourquoi.
0
yg_be Messages postés 22841 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 1 juin 2024 1 473
30 janv. 2022 à 15:33
Si j'ai compris, je ferais un peu différemment.
Dans la définition d'un formulaire, on configure la source du formulaire, et on peut aussi y configurer un filtre appliqué à l'ouverture du formulaire. Dans la plupart des cas, ce n'est pas le bon endroit pour configurer le filtre.
Quand une macro (ou du code VBA) ouvre le formulaire, on peut, dans la macro ou le code, spécifier un filtre à appliquer à l'ouverture du formulaire.

Je suppose que tu essaies, dans la définition du formulaire, de préciser un filtre qui conviendra pour toutes les méthodes d'ouverture du formulaire.
Je suggère, plutôt, de préciser le filtre adéquat lors de chaque type d'ouverture.

Un petit avertissement, comme tu signales que tu commences avec Access, en venant d'Excel: le succès de ton projet dépendra de la qualité de la structure de tes tables. Une mauvaise structure risque, ensuite, de te forcer à recommencer une bonne partie de ton travail.
0
Laurano_75018 Messages postés 10 Date d'inscription dimanche 30 janvier 2022 Statut Membre Dernière intervention 5 février 2022 > yg_be Messages postés 22841 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 1 juin 2024
30 janv. 2022 à 16:51
Je sais que le truc avec acces , c'est de bien avoir construit ses tables. Bien sûr après avoir travaillé un bon moment sur la question, je pense que c'est le cas mais je ne ne suis bien évidemment pas à l'abri de me rendre compte encore de failles. Je verrai bien...

Tu me dis de préciser la filtre adéquat lors de chaque type d'ouverture. On est bien d'accord mais c'est précisément ce que je n'arrive pas à faire. La seule solution que je vois serait d'avoir deux formulaires B : un pour quand j'ouvre avec A et l'autre quand j'ouvre avec C. Je veux essayer d'éviter cette option qui m'obligerait à maintenir deux formulaires B en tout point identiques. De plus je ne suis pas à l'abri de trouver des cas où il pourrait y avoir 3 ou 4 sources possibles. Je démultiplierais alors mes formulaires de façon déraisonnable avec la maintenance que cela impliquerait. Je voudrais éviter cette situation absurde.

Pour préciser le contenu de ma base :
- Le formulaire A contient les données "Catégorie" et "Famille" et sert à définir les familles par catégorie
- Le formulaire B contient les données "Catégorie", "Famille" et "sous-famille" et sert à définir les sous-familles de chaque famille
- Le formulaire C contient les données "Famille", "sous-famille" et "segment" et sert à définir les segments de chaque sous-famille.

Et je voudrais donc que le champs famille me permette de passer de A à B ou de C à B, comme je le disais en évitant de doublonner le formulaire B pour répondre à chaque type de filtre.
0
yg_be Messages postés 22841 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 1 juin 2024 1 473 > Laurano_75018 Messages postés 10 Date d'inscription dimanche 30 janvier 2022 Statut Membre Dernière intervention 5 février 2022
30 janv. 2022 à 18:05
Je me demande si tu lis chacune des phrases que j'écris.
Que-ne comprends-tu pas dans cette phrase: Quand une macro (ou du code VBA) ouvre le formulaire, on peut, dans la macro ou le code, spécifier un filtre à appliquer à l'ouverture du formulaire.
Il faut donc spécifier le filtre dans la définition de la macro, pas dans la définition du formulaire.
Tu auras, bien sûr, une macro associée à chacun des formulaires A et C.

Tu avais écrit "J'y arrive sans difficulté en faisant une macro": que fait cette macro?
1
Laurano_75018 Messages postés 10 Date d'inscription dimanche 30 janvier 2022 Statut Membre Dernière intervention 5 février 2022 > yg_be Messages postés 22841 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 1 juin 2024
30 janv. 2022 à 18:20
Lol : oui je te rassure je lis ce que tu écris mais je t'avoue que je n'ai pas compris de suite. Mais ce que tu avais dit avait fini par faire tilt dans ma tête et j'étais en train de chercher comment faire. En effet, ayant enfin compris ce que tu avais dit, J'ai compris que fondamentalement, pour ne pas avoir de problème, les conditions de filtre ne devaient s'exécuter qu'au moment de la macro et qu'il ne devait pas y en avoir dans la requete des sélection elle-même.
J'ai donc viré les filtres des requetes associées au formulaire pour tout traiter uniquement en macro.
J'ai écrit une macro (avec le générateur) pour :
- au clic sur un champs Famille dans le formulaire A
- ouvrir le formulaire B
- avec pour filtre la requête B (sur laquelle s'appuie le formulaire B et qui ne comporte plus de conditions de filtre)
- avec pour critère que la famille = famille du formulaire A.

Ca m'ouvre bien le formulaire mais sur le premier enregistrement de famille du formulaire A, pas nécessairement sur celui sur lequel j'ai cliqué. Je suis donc en train de chercher comment je peux dire à access quel enregistrement du champs famaille constiyue le filtre puisque le clic ne suffit pas...
0
yg_be Messages postés 22841 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 1 juin 2024 1 473 > Laurano_75018 Messages postés 10 Date d'inscription dimanche 30 janvier 2022 Statut Membre Dernière intervention 5 février 2022
30 janv. 2022 à 20:21
Aie, le formulaire A serait un formulaire en continu?
0
Laurano_75018 Messages postés 10 Date d'inscription dimanche 30 janvier 2022 Statut Membre Dernière intervention 5 février 2022
30 janv. 2022 à 20:55
je ne vois pas comment je peux joindre mon fichier...
0
yg_be Messages postés 22841 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 1 juin 2024 1 473
30 janv. 2022 à 21:09
c'est très simple: tu importes ton fichier quelque part sur internet (google drive, cjoint.com, ...), puis tu partages ici un lien vers le fichier.
0
Laurano_75018 Messages postés 10 Date d'inscription dimanche 30 janvier 2022 Statut Membre Dernière intervention 5 février 2022
31 janv. 2022 à 07:51
J'ai fait le partage sur One Drive : https://onedrive.live.com/redir?resid=947BBD525B83D52D!2101&authkey=!AE3FxwzsjWNhIHU&e=YRRI2q.

Quelques précisions parce que pour que mon cas soit plus facilement compréhensible, j'avais changé le nom des données :
- Formulaire A = F010....
- Formulaire B = F020...
- Formulaire C = F030
Catégorie = domaine
Famille = Code scénario
sous-famille = Code variante
segment = test
Et donc mon objectif est d'accéder au formulaire F020 depuis F010 ou F030 en cliquant sur un code scénario dur formulaire
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
yg_be Messages postés 22841 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 1 juin 2024 1 473
31 janv. 2022 à 12:37
Tu peux obtenir le résultat souhaité avec un code VBA.
A titre d'exemple, le code suivant se déclenche quand tu cliques sur le nom du scénario:
Private Sub Nom_du_scénario_Click()
Call DoCmd.OpenForm("F020_Scénarios_par_domaine", , , "[Code scénario]='" + CStr(Me.Code_scénario) + "'")
Call DoCmd.Close(acForm, Me.Name)
End Sub

Ce code fait, je pense, la même chose que ta macro. Cependant, heureusement, il récupère la valeur de l'enregistrement courant, pas du premier enregistrement.
0
Laurano_75018 Messages postés 10 Date d'inscription dimanche 30 janvier 2022 Statut Membre Dernière intervention 5 février 2022
31 janv. 2022 à 20:22
merci pour ta réponse et ta disponibilité : je n'ai pas encore du tout regardé l'aspect VBA dans access. Je connais dans excel mais pas là et même dans excel ça fait un petit moment que je n'en ai pas fait. Du coup, is je comprends bien, je ne vais pas avoir d'autre chois que d'en passer par là.
C'est dommage mais c'est ce que je vais devoir faire... merci en tout cas.
0
yg_be Messages postés 22841 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 1 juin 2024 1 473
1 févr. 2022 à 09:07
Peut-être qu'en utilisant des listes déroulantes au lieu de formulaires en continu, tu pourras travailler sans VBA.
Je n'ai pas d'expérience dans ce domaine.
0
yg_be Messages postés 22841 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 1 juin 2024 1 473
31 janv. 2022 à 20:43
Je ne sais pas comment réaliser cela avec une macro, et je sais comment le faire en VBA.
Cela ne signifie pas que c'est impossible sans VBA.
0
Laurano_75018 Messages postés 10 Date d'inscription dimanche 30 janvier 2022 Statut Membre Dernière intervention 5 février 2022
1 févr. 2022 à 13:38
j'y suis arrivé sans macro !!! :o)

La clé dans tes remarques, c'était qu'il fallait que la détermination de la source ne se fasse pas dans le formulaire F020. Or mon formulaire se basait sur une requête de sélection et du coup j'étais coincé.

J'ai refait mon formulaire F020 en interrogeant directement les tables dont j'avais besoin et sans passer par une requête de sélection. Ensuite j'ai fait une requête de sélection pour le formulaire F010 que j'applique depuis une macro dans le formulaire F010 et une requête de sélection pour le formulaire F030 que j'applique depuis une macro dans le formulaire F030, et ça marche !

Tout cela est juste logique mais encore faut-il rentrer dans la logique. Ce n''est pas toujours facile. En tout cas, tu m'as aidé à trouver la solution et je t'en remercie ! :o)
0
yg_be Messages postés 22841 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 1 juin 2024 1 473
1 févr. 2022 à 15:43
En effet, je me disais que beaucoup de gens font des choses assez complètes sans macro et certainement sans VBA, et je me demandais pourquoi cela ne marchait pas pour toi.

Je n'ai pas l'expérience de ces possibilités de Access, moi je démarre par le VBA et je fais le minimum avec ces possibilités de Access.

Content que cela ait marché pour toi!
1