ACCESS passer du sous formulaire au formulair

Fermé
carine - 5 janv. 2012 à 14:38
 carine - 19 janv. 2012 à 12:55
Bonjour,

J'ai une table1 et une table2 qui sont liées par un champ "n°" (au format numéroAuto dans la table1)
J'ai besoin que pour chaque enregistrement créé dans la table1 un enregistrement soit créé dans la table2
Je suis passée par une solution un peu bricole qui consiste à créer un sous formulaire dans mon formulaire de saisie pour la table1
le sous formulaire est lui basé sur la table2.
Sur sortie du premier champ de mon formulaire je lui demande d'affecter une valeur à l'un des champs de mon sous formulaire puis de l'effacer.
Ca fonctionne, j'ai bien pour chaque enregistrement de la table1 l'enregistrement correspondant dans la table 2.
Mais je voudrais que l'opération soit transparente pour l'utilisateur. J'ai donc mis la taille de mon sous formulaire à 0 * 0 mais quand il affecte une valeur au champ1 de mon sous formulaire, le focus est mis dessus.
et je voudrais que pour la saisie le focus revienne ensuite sur le champ 2 de mon formulaire.
j'ai essayé sur sortie du champ 1 du formulaire après lui avoir demandé d'affecter une valeur dans le sous formulaire de mettre un champ2.setfocus, ça ne fonctionne pas.
j'ai essayé de faire me.setfocus, puis me.champ2.setfocus, ça ne fonctionne pas non plus. J'ai essayé de lui faire faire champ2 = "", non plus. J'ai essayé d'aller sur l"évènement réception focus du champ1 dans le sous formulaire puis de remettre le focus sur le formulaire et sur son champ2, ça ne fonctionne pas non plus.
Si quelqu'un a une idée je suis preneuse !
Merci d'avance !



7 réponses

borisdu Messages postés 1824 Date d'inscription samedi 24 décembre 2005 Statut Membre Dernière intervention 27 octobre 2014 229
5 janv. 2012 à 14:51
Lu'

C'est pas très claire ton histoire. Tu peut détailler exactement tes tables, les liaisons et les formulaires?
0
je vais essayer de rendre ça plus clair.

la première table s'appelle "candidats" elle contient les champs "nocandidat" en numéroauto et les champs "nomcandidat", "prenom", "adresse", "cp", "ville", "tel", "courriel".
La deuxième table s'appelle notes et comprend les champs "nonote" en numéroAuto et les champs "nocandidat", "CultG", "Logique", "Français".

Les deux tables sont reliées par le champ nocandidat.

Pour chaque candidat enregistré, j'ai besoin qu'un enregistrement lui correspondant soit automatiquement généré dans la table des notes avant même qu'il ai passé des tests.

J'ai un formulaire dédié à la saisie de tout nouveau candidat qui s'appelle "saisie_candidats".

Et la solution que j'utilise, c'est un sous formulaire qui s'appelle "creation_note" (dans le formulaire saisie_candidats) toujours rataché par "nocandidat" et qui comprend uniquement les champs "nonote", "nocandidat" et "logique". Comme je veux que l'opération soit transparente pour l'utilisateur ce sous formulaire a une taille de 0 par 0.

et j'ai entré le code vba suivant sur sortie du champ nomcandidat dans le formulaire saisie_candidats:

Private Sub nomcandidat_Exit(Cancel As Integer)
Forms![saisie_candidats]![note_creation].Form![logique] = 1
Forms![saisie_candidats]![note_creation].Form![logique] = ""
end sub

une fois ce code exécuté, j'ai bien un enregistrement qui existe pour le candidat en cours de saisie dans ma table note et le curseur se situe sur le champ "logique" du sous formulaire.

Et pour éviter que l'utilisateur ne rentre du texte (puisque normalement il continue avec la saisie du prénom) dans le champ "logique" il faudrait que je réussisse à remettre le focus sur le formulaire "saisie_candidats" et sur son champ "prenom"

j'ai essayé de compléter le code comme ça :

Private Sub nomcandidat_Exit(Cancel As Integer)
Forms![saisie_candidats]![note_creation].Form![logique] = 1
Forms![saisie_candidats]![note_creation].Form![logique] = ""
me.prenom.setfocus
end sub

et comme ça :

Private Sub nomcandidat_Exit(Cancel As Integer)
Forms![saisie_candidats]![note_creation].Form![logique] = 1
Forms![saisie_candidats]![note_creation].Form![logique] = ""
me.setfocus
me.prenom.setfocus
end sub

j'ai aussi tenté le docmd.gotocontrol, et d'affecter de la même manière que pour le champ logique une valeur à prenom, sans aucun succès. Et là je bloque je n'ai pas d'autre idée de ce que je pourrais faire.

espérant que ce sera plus clair merci d'avance !
0
f894009 Messages postés 17207 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 20 décembre 2024 1 711
7 janv. 2012 à 10:38
Bonjour,

Comment atteindre un contrôle d'un autre formulaire ? (un sous-formulaire est un formulaire).

Forms![NomFormulaire]![MaZoneDeText] et ensuite .SetFocus pour vous

Ce lien vous emmene sur developpez.com ou vous trouverez beaucoup de renseignements

https://access.developpez.com/faq/?page=Ctrl#ctlsForm

Bonne suite
0
castours Messages postés 2955 Date d'inscription lundi 18 septembre 2006 Statut Membre Dernière intervention 31 août 2019 217
7 janv. 2012 à 10:44
Bonjour
Le fonctionnement du formulaire et du sous form sont liés par la relation un a plusieurs.
Lors d'un enregistrement du formulaire, tu peux en faire plusieurs dans le sous formulaire.
Le champ nocandidat , dans la table canditats, il doit etre N°Auto ,clé primaire, sansDoublon;Pour la table Notes, il doit etre numerique avec doublon.
La relation un à plusieurs peut s'établir entre les 2 tables.
Logiquement tu peux retrouver le nocandidat dans le sous formulaire si le champ est présent.
0

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

Posez votre question
merci pour vos réponses :

@ f894009 : j'ai tenté mais le curseur reste désespérément sur le champ [logique] du sous formulaire creation_note

@castours : effectivement le champ nocandidat étant présent dans le champ du sous formulaire dès que je renseigne quelque chose dans l'un des champs du sous formulaire j'ai un enregistrement qui se créé avec le nocandidat correspondant, mais pas si je ne modifie rien dans le sous formulaire.

il doit y avoir quelque chose qui empeche le focus de revenir sur le formulaire mais je ne comprend pas ce qui se passe exactement.

j'ai choisi de passer par une autre solution qui consiste à executer une requete ajout à la fermeture du formulaire saisie_candidats
j'ajoute le champ nocandidat de la table candidats au champ nocandidat de la table notes pour tous les candidats dont la date de création est aujourd'hui

J'ai réalisé qu'avec la solution précédente, il y avait plein d'enregistrements vides qui s'étaient créés (avec juste le champ nonote de renseigné) et que j'avais également plein de doublons.

Merci en tout cas pour vos réponses :)
0
castours Messages postés 2955 Date d'inscription lundi 18 septembre 2006 Statut Membre Dernière intervention 31 août 2019 217
Modifié par castours le 18/01/2012 à 17:31
bonjour
Logiquement si tu as N°Candidat clé primaire en N°Auto dans le formulaire, puis N°Candidat en numerique et N°Note en N°Auto dans le sous formule , que la relation soit faite, tu devrais pouvoir modifier l'enregistrement du sous formulair.
Exemple 1 premier Candidat
Formulaire Candidat
N°Candidat Nom Prenom
1 Dupont Georges
S/F_Note
N°Candidat N°Note CultG Logique Français.
1 1 12 13 15
1 2 14 12 12
1 5 13 10 14

Exemple 2 deuxieme Candidat
Formulaire Candidat
N°Candidat Nom Prenom
2 Laforêt Marc
S/F_Note
N°Candidat N°Note CultG Logique Français.
2 3 11 13 15
2 4 15 14 13
Voila ce que tu devrais pouvoir faire.
On remarque que le N°Candidat a 2 enregistrements dans le formulaire ,3 enregistremnt pour le Candidat N°1, 2 pour le candidat N°2
Dans le sous formulaire tu peux modifier les notes ou d'ajouter des enregistrements.
Est ce bien cela que tu veux obtenir?
Il te manque, soi un champ date ou mois dans la table note.
Si cela ne va pas, mets ta base sur le forum avec cjoint.com
J'ai fait rapidement un exemple dans ce lien
https://www.cjoint.com/?BAsrCu8WMBh
0
en effet je peux tout à fait depuis mon sous formulaire apporter des modifications. Mais ce que je voulais c'était trouver un moyen de créer automatiquement un enregistrement dans la table note pour chaque nouveau candidat sans que l'utilisateur ait à faire quoi que ce soit de particulier. J'ai trouvé ma solution avec la requête ajout.
0