Afficher formulaire selon sélection dans une liste [Résolu/Fermé]

Signaler
Messages postés
492
Date d'inscription
jeudi 5 mars 2009
Statut
Membre
Dernière intervention
24 octobre 2020
-
Messages postés
492
Date d'inscription
jeudi 5 mars 2009
Statut
Membre
Dernière intervention
24 octobre 2020
-
Bonjour,

J'aimerais savoir comment faire pour qu'un formulaire de saisie (ou une fenêtre modale ou une section de formulaire) s'affiche en fonction d'un choix dans une liste.

Par exemple, dans le formulaire de saisie Form1 :
Si l'utilisateur sélectionne ChoixA, rien ne se passe, il continue au champ suivant.
S'il sélectionne ChoixB, le formulaire Form2 s'ouvre (ou fenêtre modale).
S'il sélectionne ChoixC, d'autres champs apparaissent dans le Form1 pour compléter les informations.

Est-ce que vous comprenez? Je sais que ça se fait, mais je ne sais pas comment.

Idéalement, sans code, sinon, m'indiquer où ajouter le code, car en programmation, mes connaissances sont très limitées.
J'utilise Access 2010.

Merci!

8 réponses

Messages postés
997
Date d'inscription
vendredi 12 août 2011
Statut
Membre
Dernière intervention
2 juin 2021
41
bonjour,
C'est assez simple avec du code, mais sans, je ne sait pas, car moi je travail sur access 2003, et ne connait pas 2010!
Dans access 2003, je peut créer un bouton avec l'assistant, et là c'est trés simple, il suffit de répondre au question, et le bouton se cré tout seul!
En gros, access fait le code lui même, et ce code est:
"sur clic" du bouton1 : docmd.openform "form1"
"sur clic" du bouton2 : docmd.openform "form2"
Roger
Bonjour Méruvien, toute ma sympathie,
Nous étions en train d'écrire nos réponses en même temps; je ne connaissais donc pas la tienne quand j'écrivais celle qui est en-dessous.
Ah, puis-je pousser l'audace jusqu'à vous demander le code pour, au lieu d'ouvrir un formulaire, ça afficherait des contrôles que j'aurais cachés (par l'option visible: non)?
Genre "show control Nomducontrole"...
Merci!! ?
Messages postés
997
Date d'inscription
vendredi 12 août 2011
Statut
Membre
Dernière intervention
2 juin 2021
41 > ButteDuLac
par exemple si ton champ s'appette [ville], tu met:
me![ville].visible=non
Messages postés
492
Date d'inscription
jeudi 5 mars 2009
Statut
Membre
Dernière intervention
24 octobre 2020
29
Ok, ça c'est pour le rendre non visible, mais pour qu'il apparaisse selon le choix?
Est-ce que ce serait :
__ If Me.ListeDeroulante = "AAA" then
_____ Me![ville].visible=oui
?
Et "Me", est-ce que ça signifie "dans le formulaire actuel"?
>
Messages postés
492
Date d'inscription
jeudi 5 mars 2009
Statut
Membre
Dernière intervention
24 octobre 2020

Réponse tout en bas, sinon on se perd avec des réponses entremêlées.
Bonjour,
Pour compléter la réponse du Méruvien, que je salue au passage, il faut obligatoirement un code VBA. Utiliser une suite de macros est possible mais bien plus compliqué et difficile.
Dans le cas du VBA:
1) Il faut une liste déroulante qui affiche toutes les options possibles à choisir.
2) Mettre la commande qui suit soit sur "Après MàJ" soit sur "Sur Click"
3) Ecrire le code VBA:
__ If Me.ListeDeroulante = "AAA" then
_____ docmd.openform "form1"
__ ElseIf Me.ListeDeroulante = "BBB" then
_____ docmd.openform "form2"
___ etc
__ End If

Pour entrer la procédure, il faut double-cliquer sur la ligne de la propriété évènementielle choisie.
Pour ouvrir l'espace VBA, il faut cliquer sur l'icône [...] en bout de ligne. Puis écrire le code voulu.
Bonne suite
Messages postés
997
Date d'inscription
vendredi 12 août 2011
Statut
Membre
Dernière intervention
2 juin 2021
41
Bonjour a toi aussi , et je profite de ton passage pour te demander un truc!
Je travail toujours sur access 2003 que je connais bien, mais maintenant il y a plus de gens qui travail avec 2007, 2010 ou 2013, et ça serait trop simple si microsoft n'avait pas tout modifié!
Donc, là j'essaye de faire une base en 2007 sur mon portable pour aider Michelle, mais j'ai beaucoup de soucis, et le plus important, c'est que toutes mes procédure que j'appel avec un bouton clic ou apres MAJ ne fonctionne pas!!
A-tu une idée la dessus??
Merci
Roger
Messages postés
492
Date d'inscription
jeudi 5 mars 2009
Statut
Membre
Dernière intervention
24 octobre 2020
29
Un grand merci à toi Tessel75 d'avoir compris exactement ce que je voulais!
(Même si je ne suis pas experte en code, à première vue, le code présenté me semble répondre exactement à ce que je voulais!!!)
Je vais l'essayer demain (journée de travail terminée, ici!)
Merci aussi à le meruvien pour le temps consacré.
Bonne journée/soirée à vous deux!
Pour apprendre à écrire du code, il me semble que le meilleur moyen est d'écrire des macros, ou d'utiliser des macros déjà écrites, et de les convertir en VBA avec le convertisseur Access, et après, étudier comment c'est fait et corriger petit à petit pour introduire les variations qu'on souhaite.
Autre moyen indispensable, l'aide système de Access dans sa branche aide du développeur.
Bon courage.
Oui! "Me" signifie bien "Formulaire ou Etat actuel". Mais n'est utilisable que dans les procédures intégrées aux objets.
Pour ce qui est de la 2ème question:
"__ If Me.ListeDeroulante = "AAA" then
_____ Me![ville].visible=Yes
__ ElseIf Me.ListeDeroulante = "BBB" then
_____ Me![ville].visible= No
__ Else
_____ Me![ville].visible= No
"
Messages postés
492
Date d'inscription
jeudi 5 mars 2009
Statut
Membre
Dernière intervention
24 octobre 2020
29
(Désolée pour les réponses entremêlées, j'étais sur mon cellulaire et ça ne fonctionne pas comme je le voudrais!)
Super! Merci pour la réponse!!!
Bonne journée!
Messages postés
492
Date d'inscription
jeudi 5 mars 2009
Statut
Membre
Dernière intervention
24 octobre 2020
29 >
Messages postés
492
Date d'inscription
jeudi 5 mars 2009
Statut
Membre
Dernière intervention
24 octobre 2020

Même que je n'arrivais pas à me connecter, alors j'ai répondu sous un faux-pseudo (ça fait tautologique!) ;)
Messages postés
492
Date d'inscription
jeudi 5 mars 2009
Statut
Membre
Dernière intervention
24 octobre 2020
29
Bon...
J'ai essayé, ça semblait bon, mais ça ne fonctionne pas.
J'ai essayé le code dans « Sur activation » et dans « Après MAJ ». Dans l'objet du formulaire...
Où devrais-je l'insérer, alors??? Dans les propriétés du champ Listederoulante, peut-être?
Messages postés
492
Date d'inscription
jeudi 5 mars 2009
Statut
Membre
Dernière intervention
24 octobre 2020
29
En fait, ça s'en vient. J'ai essayé dans les propriétés du champ, mais le problème, c'est que mes champs sont visibles au chargement, puis si je choisis une option, ils disparaissent et si je change d'option, un autre champ disparait mais le premier ne réapparait pas.
Voici le code essayé... (il y aura éventuellement plus de champs, mais j'aimerais comprendre la logique, qu'est-ce qui cloche???)

Private Sub Type_acc_BeforeUpdate(Cancel As Integer)
If Me.Type_acc = "AVAC" Then
Me![Forceps_det].Visible = Yes
ElseIf Me.Type_acc = "AVAC" Then
Me![Outils].Visible = Yes
Else
Me![Forceps_det].Visible = No
Me![Outils].Visible = No
End If
End Sub

Private Sub Type_acc_AfterUpdate()
If Me.Type_acc = "AVAC" Then
Me![Forceps_det].Visible = Yes
ElseIf Me.Type_acc = "AVAC" Then
Me![Outils].Visible = Yes
Else
Me![Forceps_det].Visible = No
Me![Outils].Visible = No
End If
End Sub

Je voudrais que à l'affichage du formulaire, les champs [Forceps_det] et [Outils] ne soient pas visibles. Que si on coche AVAC, les deux champs apparaissent. Et si on change pour une autre option (ex. : [Cesar] ), les deux champs disparaissent et d'autres champs (es. : [Cesar_del] ) apparaissent.
ça parait bien compliqué ton histoire!!!
Envoie-nous ta base, avec qq indications sur l'effet que tu veux obtenir, via cjoint.com. On te fera un modèle, ce sera bien plus simple!!!
Ne pas oublier d'anonymiser la liste des parturientes si nécessaire.
Messages postés
492
Date d'inscription
jeudi 5 mars 2009
Statut
Membre
Dernière intervention
24 octobre 2020
29
Bon, voici. Il n'y avait pas de données sur les parturientes, car je suis en conception et les infirmières n'ont pas encore commencé à l'utiliser. Au cas où ça vous serait utile, j'ai ajouté trois mère (fictives) et un accouchement (fictif) et j'ai trafiqué les noms des médecins et anesthésiologistes ainsi que les numéros de permis.

Voici le llien.

http://www.cjoint.com/c/EHAqiGSBBj0

Voir le formulaire F_saisie_principale, ou plutôt sous formulaire [T_Acc sous formulaire].

J'aimerais que sur sélection, dans la liste déroulante [Acc_type] des choix « "Vaginal" ou "AVAC" », les contrôles suivants s'affichent : [Acc_vag_ass] (case à cocher); [Outils]; [Forceps_det]; [Episio] (case à cocher); [Episio_type] et [Deliv_placent].

J'aimerais que sur sélection, dans [Acc_type] des choix « "Césarienne ÉLECTIVE" ou "Césarienne URGENTE" », les contrôles suivants s'affichent : [Ces_seq] et [Ces_rai].

Mais que tant qu'aucun choix n'est fait dans le contrôle (liste déroulante) [Acc_type], aucun des contrôles susmentionnés ne s'affiche, soit au chargement du formulaire.

Aussi, si jamais l'utilisateur fait une erreur et qu'il choisit la mauvaise option puis change son option, qu'une mise à jour s'effectue immédiatement pour afficher les contrôles associés à ce nouveau choix.


J'espère que vous comprenez. Il me semble que mon raisonnement est logique, mais je ne sais pas comment le traduire en code ni OÙ appliquer le code.

Merci énormément!!!

P.-s. Bien entendu, il n'y a pas encore tous les formulaires, car certains auront à faire appel à des requêtes et je n'ai pas fini de les créer (car j'attends qu'on définisse les besoins... les info rentrent au compte-gouttes!) Les seuls formulaires existants sont ceux qui ne serviront qu'exclusivement à la saisie de données dans les tables, sans interrogations.
Messages postés
492
Date d'inscription
jeudi 5 mars 2009
Statut
Membre
Dernière intervention
24 octobre 2020
29
Voici un aperçu d'une BDD dont je suis l'utilisatrice et qui permet ce type d'opération sur les contrôles. (Je n'ai pas accès à la conception de cette BDD.)
http://www.cjoint.com/c/EHAsaUemW20
(Pour complément d'info, si besoin.)
Voilà le résultat:
http://www.cjoint.com/c/EHAw6ETy3nC
Pour voir les codes, il suffit d'ouvrir les propriétés Evènements du formulaire et des différents contrôles.
Comme tu pourras constater, j'ai utilisé plusieurs fois le même code à plusieurs endroits. C'est l'avantage des modules simples sur les modules intégrés aux formulaires et aux contrôles; cela permet de ne pas avoir à réécrire le même code à plusieurs entrées.
Autre chose très importante: il ne faut jamais oublier que ce type de code qui modifie l'apparence d'un formulaire, ou d'un état, doit toujours prévoir de défaire ce qu'il a fait l'étape précédente. Il ne s'agit pas de commander:
"rendre visible le contrôle A, rendre invisible le contrôle B",
il faut préciser lorsque la condition est inversée :
rendre invisible le contrôle A, rendre visible le contrôle B"
Sinon, soit tu n'auras rien de visible, soit tout sera visible.
Il suffit de bien regarder comment j'ai écrit le code, c'est très simple à comprendre en prenant son temps.
Bonne suite
Messages postés
492
Date d'inscription
jeudi 5 mars 2009
Statut
Membre
Dernière intervention
24 octobre 2020
29
Ah non! C'est très embêtant! Je ne peux plus accéder à cjoint.com à partir de mon poste de travail. (Pourtant, j'y allais hier...)
Je vais réessayer ce soir à la maison. Merci pour l'instant!
Messages postés
492
Date d'inscription
jeudi 5 mars 2009
Statut
Membre
Dernière intervention
24 octobre 2020
29
J'ai ouvert. C'est vraiment ce que je voulais! Un énorme merci!
Maintenant, me restera à observer le code pour comprendre, je ferai cela plus tard.
Merci, merci!!!
Bonne journée!
Messages postés
492
Date d'inscription
jeudi 5 mars 2009
Statut
Membre
Dernière intervention
24 octobre 2020
29
Le problème, c'est que je suis trop cruche pour copier le tout dans mon fichier.
Comme j'ai continué à travailler dessus, je ne peux pas juste prendre votre fichier et l'enregistrer sous un autre nom, il me faut récupérer le code et l'intégrer dans mon fichier.
J'ai créé un module que j'ai nommé ModuleGeneral et j'y ai copié le code.
J'ai inscrit =MasquerControlesAccoucht() à Après MAJ (sur contrôle Type_Acc) et =Actualiser() à Sur réception focus.
Qu'est-ce que je dois faire d'autre que je n'ai pas fait?
Je remarque, en VBA, que dans l'explorateur d'objet, sous Database2, vous avez le Form_F_SaisiePrincipale, et pas moi. Mais je ne sais pas quoi faire pour qu'il se retrouve là. J'ai même essayé le copier-coller, en vain.
C'est la partie qui me manque (ah, si j'avais le temps et les moyens pour suivre une formation en programmation!!!) travailler dans les codes...
Messages postés
492
Date d'inscription
jeudi 5 mars 2009
Statut
Membre
Dernière intervention
24 octobre 2020
29 >
Messages postés
492
Date d'inscription
jeudi 5 mars 2009
Statut
Membre
Dernière intervention
24 octobre 2020

J'ai essayé exporter/importer un fichier, mais j'obtiens message d'erreur module n'est pas valide.
Bonjour,
Le plus simple est repartir de 0.
1) Importer le fichier envoyé à côté du fichier original
2) Effacer le module recopié, en le sélectionnant + Supprimer puis fermer le VBA
3) Dans la fenêtre de base, suivre le chemin :
Ruban "Données Externes" / Importer et lier / Icône Access
4) Avec le bouton parcourir, sélectionner la base envoyée / sélectionner l'option "Importer ...." + OK
5) la base envoyée apparait / Aller directement à l'onglet "Modules", Bouton "SélectionnerTout" le "ModuleGeneral" (il apparait avec un fond bleu) puis bouton "OK" / Fermer a fenêtre d'importation
6) Replacer les fonctions comme je les avais mises.
ATTENTION: J'ai placé des fonctions sur le contrôle "Type_Acc", mais aussi sur le formulaire "T_Acc sous-formulaire"
Tu ne peux pas importer directement le formulaire "F_SaisiePrinc", parce que j'ai changé qq noms des champs des tables pour te donner des exemples de noms plus ramassés.
De toutes façons la question n'est pas de faire un simple copier/coller mais de regarder comment c'est fait.
Bonne suite
Messages postés
492
Date d'inscription
jeudi 5 mars 2009
Statut
Membre
Dernière intervention
24 octobre 2020
29
Ouh là, là!
J'ai failli abandonner! Mais je viens de réussir! C'est super!!! Merci!

Je vous ai déjà tellement pris de votre temps, mais il me reste une dernière question...

Je ne comprends pas, justement, pourquoi ces trois tables ont été ajoutées : T_LienAccLMD, T_LienAccLAnest et T_LienAccLAdmisLMD?
Sont-ce des tables jonctions?

Les tables T-L_MD et T-L_Anest sont des « tables listes » (tables liées uniquement à la T_Acc) qui ne servent qu'aux champs clés étrangères de T_Acc.[MD_acc] et T_Acc.[Anesthesiol]. J'avais déjà créé ces relations. Et les formulaires F_AjoutMD et F_AjoutAnest serviront à ajouter, au besoin, un MD ou un anesthésiologiste aux tables listes, sans passer par le mode feuille de données, et afin que les utilisateurs n'aient pas à m'appeler si un "nouveau" médecin, par exemple, fait un accouchement en pleine nuit!

Quant à T_LienAccAdmisLMD, je ne comprends pas! (Encore moins!) À part qu'il existe aussi un formulaire pour inscrire les admissions des parturientes (avant accouchement), il y en aura aussi un pour les visites en externes (consultations avant accouchement) et les visites-examens des bébés (après accouchement). Je ne les ai pas encore créés.

Je ne vois pas le sens, en lisant LienAccAdmisLMD, il n'y a pas de lien entre une admission (en cours de grossesse) et l'accouchement. On parle ici d'une parturiente qui vient consulter pour un malaise pendant sa grossesse et qui sera admise, puis ressortira pour venir accoucher ultérieurement. Et « LMD »???

Est-ce que ce que j'avais fait n'était pas correct? Est-ce que je devrai créer ce type de table pour les autres formulaires? Et pourquoi? Je voudrais comprendre la logique derrière pour bien concevoir ma BDD et pour apprendre.

Merci!
Messages postés
492
Date d'inscription
jeudi 5 mars 2009
Statut
Membre
Dernière intervention
24 octobre 2020
29
:D J'ai même réussi à appliquer cette même opération à d'autres champs! Ça donne un formulaire beaucoup plus épuré! :)
Bonjour,
"T_LienAccLMD, T_LienAccLAnest et T_LienAccLAdmisLMD? Sont-ce des tables jonctions? "
Oui! On peut appeler ça comme ça. En fait je voulais te montrer comment faire quand on est face à une liaison Plusieurs à Plusieurs. Un très bon exemple est celui de l'organisation du championnat, Chaque sportif peut participer à plusieurs équipes au cours de sa carrière mais ne joue pas forcément à tous les matchs, chaque équipe recrute plusieurs sportifs pour une certaine période et participe à plusieurs championnats, lesquels font se rencontrer plusieurs équipes mais pas toutes.
Au début je pensais que ça pouvais être utile parce qu'un médecin reçoit en consultation plusieurs femme (pas en même temps), et effectue plusieurs accouchements à des femmes différentes. Mais je me suis rendu compte après que les tables de liaisons n'avaient pas lieu d'être parce qu'il n'y a qu'une consultation et qu'un seul accouchement à chaque fois. Pour autant je les ai laissé parce qu'elles étaient faites et que tu peux en avoir éventuellement besoin plus tard.
Cela dit, à moins que tu aies besoin d'indication plus complète que le nom pour la liste des infirmières, et des produits d'anesthésie, il n'est pas nécessaire d'avoir une table exprès, il est tout à fait possible de construire une liste déroulante directement sur les noms entrés dans la table "T_Acc", ce qui n'est évidemment pas le cas pour les médecins parce qu'il y a beaucoup d'autres informations à recueillir que le simple nom.
Tout ça pour dire à la fin que tu peux laisser les tables de côté pour le moment.

Post Scriptum: J'ai été IDE pendant 20 ans et CI pendant 15. Je connais bien les problèmes de l'activité hospitalière.
Messages postés
492
Date d'inscription
jeudi 5 mars 2009
Statut
Membre
Dernière intervention
24 octobre 2020
29
Merci! (C'est cool d'avoir trouvé une personne qui connaît non seulement la programmation mais en plus le contexte de ma BDD!!!)
Je n'ai aucune idée ce que IDE et CI veulent dire (au Québec, nous n'utilisons pas ces abréviations), mais je devine que c'est dans le domaine des sciences infirmières...

Il est vrai que je n'aurais pas eu besoin des T_TypeAnest et T_AgentAnest, au début, j'avais fait des listes de valeurs, puis je me suis dit que si jamais ils voulaient ajouter des produits (agents) ou des types d'anesthésie (ce qui est moins probable, mais pas impossible), ce serait plus simple avec des tables.

Je quitterai probablement mes fonctions dans deux semaines pour un autre poste, et je ne suis pas certaine que la personne qui va me remplacer saura développer des BDD, alors je veux qu'elle soit utilisable de façon la plus autonome possible pour les infirmières et l'infirmière en chef.

Là, je suis donc dans la partie Infirmière en chef, dans la création des requêtes... puis, ce sera la partie États et les autres formulaires (navigation, etc.) J'ai encore beaucoup de boulot!!! Souhaitons-moi bonne chance!!!

:)
>
Messages postés
492
Date d'inscription
jeudi 5 mars 2009
Statut
Membre
Dernière intervention
24 octobre 2020

IDE = Infirmier (e) diplômé (e) d'état
CI = Cadre infirmier (soit ce que vous appelez Infirmier chef)
Plutôt qu'au Québec, je pensais que tu étais dans les iles.

" je me suis dit que si jamais ils voulaient ajouter ... ce serait plus simple avec des tables."
Pas du tout, au contraire, il faut mettre pour la propriété "Limité à liste" du contrôle concerné, la réponse "Non", pour qu'on puisse ajouter toutes les réponses nécessaires.
Pour entrer la requête pour le contrôle, il faut regarder comment j'ai fait sur ma réponse précédente; et ne pas oublier d'ajouter la procédure VBA "Actualiser" à l'entrée du pointeur pour être sûr que la requête ramène toutes les données y compris celles qui viennent d'être rajoutées
Bon WE au Québec (où j'ai mes nièces)
Messages postés
492
Date d'inscription
jeudi 5 mars 2009
Statut
Membre
Dernière intervention
24 octobre 2020
29
Oui, je comprends. J'ai fait ça pour certains champs (ne pas limiter à la liste), mais en fait, c'est que je m'attendais à avoir beaucoup plus de produits anesthésiants (je n'ai pas eu la liste complète, la chef du bloc étant en vacances), alors je me disais que ça ferait une longue liste à taper, donc préférable en table, Mais finalement... en tout cas, maintenant, c'est fait!

Et oui, vu juste, j'habite sur une île, mais nous faisons partie du Québec.
Ici, je commence ma journée de travail à l'instant! Je m'attaque à ma BDD pour la dernière (ou presque!) semaine! Il se peut que j'apparaisse encore dans ce forum éventuellement!!!
:)
Il est nullement besoin d'entrer à l'avance tous les produits, il suffit qu'ils soient entrés au fur et mesure de leurs saisies. De toutes façons, avoir une liste préétablie peut provoquer plus d'inconvénients que d'avantages, en empêchant ou en rendant difficile la saisie de nouveau produits qui ne manqueront pas d'arriver.
Bonne suite
Messages postés
492
Date d'inscription
jeudi 5 mars 2009
Statut
Membre
Dernière intervention
24 octobre 2020
29
Bon, voilà, c'est fait. Il n'y a plus de tables Outils, AgentsAnest et TypeAnest. Vous m'avez convaincue!
Merci pour tout ce support, généreux et sympathique!