Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Formulaire et sous formulaire : saisie obligatoire

5 réponses
Avatar
grippay.ronan
Bonjour,

J'ai un formulaire (fiche de renseignement sur des experts) avec un
sous-formulaire incorporé contenant uniquement un champs de choix de
domaines d'expertise (liste déroulante). On peut attribuer autant de
domaines d'expertises que l'on veut.

Ma question :
Je souhaite qu'avant de passer à un nouvel enregistrement, access
vérifie qu'il y ait au moins un domaine d'expertise de saisi (choisi
dans la liste déroulante) dans le sous-formulaire car c'est un champ
obligatoire pour faire ensuite une recherche par domaine d'expertise.

J'ai placé dans "Beforeupdate" :
With Me![SF_domaine_expertise_contact]
If .Form.RecordsetClone.BOF And .Form.RecordsetClone.EOF Then
MsgBox ("Veuillez entrer au moins un domaine d'expertise"),
vbExclamation, "Domaine d'expertise non renseignée"
DoCmd.GoToControl ("dom_expert") "" -> ne fonctionne pas...
Cancel = True
End If

Après analyse, je me rends compte que cela ne peut pas marcher car
quand la saisie est en cours et qu'on veut passer à des
sous-formulaires autres, le formulaire principal donne le focus au
sous-formulaire, il fait automatiquement un enregistrement/sauvegarde
du formulaire principal. Et donc, la procédure Beforeupdate recommence
à chaque fois. Je n'arrive pas à entrer dans le sous-formulaire pour
remplir le champs demandé.

Où puis-je placer cette procédure ? Y a t-il un autre moyen de
contrôler l'absence de saisie dans le sous-formulaire (vide) ?

Je vous remercie par avance de votre aide !

Ronan

5 réponses

Avatar
Raymond [mvp]
Bonjour.

essaie cette solution:
If
Forms("formulairePrincipal")("SF_domaine_expertise_contact").Form.RecordsetC
lone.RecordCount = 0 Then
MsgBox "Veuillez entrer au moins un domaine d'expertise"

Forms("formulairePrincipal")("SF_domaine_expertise_contact").SetFocus
DoCmd.GoToControl "dom_expert"
End If

en passant par forms au lieu de Me, ça te permet de lancer ta fonction de
n'importe ou et de n'importe quel formulaire ou sous-formulaire.
il faut passer le focus au sous-formulaire avant de se positionner sur le
contrôle.
--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access.vba.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Ronan" a écrit dans le message de
news:
Bonjour,

J'ai un formulaire (fiche de renseignement sur des experts) avec un
sous-formulaire incorporé contenant uniquement un champs de choix de
domaines d'expertise (liste déroulante). On peut attribuer autant de
domaines d'expertises que l'on veut.

Ma question :
Je souhaite qu'avant de passer à un nouvel enregistrement, access
vérifie qu'il y ait au moins un domaine d'expertise de saisi (choisi
dans la liste déroulante) dans le sous-formulaire car c'est un champ
obligatoire pour faire ensuite une recherche par domaine d'expertise.

J'ai placé dans "Beforeupdate" :
With Me![SF_domaine_expertise_contact]
If .Form.RecordsetClone.BOF And .Form.RecordsetClone.EOF Then
MsgBox ("Veuillez entrer au moins un domaine d'expertise"),
vbExclamation, "Domaine d'expertise non renseignée"
DoCmd.GoToControl ("dom_expert") "" -> ne fonctionne pas...
Cancel = True
End If

Après analyse, je me rends compte que cela ne peut pas marcher car
quand la saisie est en cours et qu'on veut passer à des
sous-formulaires autres, le formulaire principal donne le focus au
sous-formulaire, il fait automatiquement un enregistrement/sauvegarde
du formulaire principal. Et donc, la procédure Beforeupdate recommence
à chaque fois. Je n'arrive pas à entrer dans le sous-formulaire pour
remplir le champs demandé.

Où puis-je placer cette procédure ? Y a t-il un autre moyen de
contrôler l'absence de saisie dans le sous-formulaire (vide) ?

Je vous remercie par avance de votre aide !

Ronan


Avatar
grippay.ronan
Merci beaucoup. J'ai essayé mais ca ne marche pas et je m'en doutais
un peu :
Quand on donne le focus au sous-formulaire, cela déclenche la
procédure "beforeupdate"....
Il me donne le message d'erreur : erreur 2110
impossible d'activer le controle "SF_domaine_expertise_contact"

Que faire ? où placer ce test de record count ?

Je souhaite que l'utilisateur remplisse ce champs obligatoire dans le
sous-formulaire avant de passer à un nouvel enregistrement...

Merci de votre aide !

Ronan



"Raymond [mvp]" wrote in message news:...
Bonjour.

essaie cette solution:
If
Forms("formulairePrincipal")("SF_domaine_expertise_contact").Form.RecordsetC
lone.RecordCount = 0 Then
MsgBox "Veuillez entrer au moins un domaine d'expertise"

Forms("formulairePrincipal")("SF_domaine_expertise_contact").SetFocus
DoCmd.GoToControl "dom_expert"
End If

en passant par forms au lieu de Me, ça te permet de lancer ta fonction de
n'importe ou et de n'importe quel formulaire ou sous-formulaire.
il faut passer le focus au sous-formulaire avant de se positionner sur le
contrôle.
--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access.vba.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Ronan" a écrit dans le message de
news:
Bonjour,

J'ai un formulaire (fiche de renseignement sur des experts) avec un
sous-formulaire incorporé contenant uniquement un champs de choix de
domaines d'expertise (liste déroulante). On peut attribuer autant de
domaines d'expertises que l'on veut.

Ma question :
Je souhaite qu'avant de passer à un nouvel enregistrement, access
vérifie qu'il y ait au moins un domaine d'expertise de saisi (choisi
dans la liste déroulante) dans le sous-formulaire car c'est un champ
obligatoire pour faire ensuite une recherche par domaine d'expertise.

J'ai placé dans "Beforeupdate" :
With Me![SF_domaine_expertise_contact]
If .Form.RecordsetClone.BOF And .Form.RecordsetClone.EOF Then
MsgBox ("Veuillez entrer au moins un domaine d'expertise"),
vbExclamation, "Domaine d'expertise non renseignée"
DoCmd.GoToControl ("dom_expert") "" -> ne fonctionne pas...
Cancel = True
End If

Après analyse, je me rends compte que cela ne peut pas marcher car
quand la saisie est en cours et qu'on veut passer à des
sous-formulaires autres, le formulaire principal donne le focus au
sous-formulaire, il fait automatiquement un enregistrement/sauvegarde
du formulaire principal. Et donc, la procédure Beforeupdate recommence
à chaque fois. Je n'arrive pas à entrer dans le sous-formulaire pour
remplir le champs demandé.

Où puis-je placer cette procédure ? Y a t-il un autre moyen de
contrôler l'absence de saisie dans le sous-formulaire (vide) ?

Je vous remercie par avance de votre aide !

Ronan




Avatar
Raymond [mvp]
Il n'y a qu'un seul endroit le Form_BeforeUpdate du formulaire principal.

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access.vba.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Ronan" a écrit dans le message de
news:
Merci beaucoup. J'ai essayé mais ca ne marche pas et je m'en doutais
un peu :
Quand on donne le focus au sous-formulaire, cela déclenche la
procédure "beforeupdate"....
Il me donne le message d'erreur : erreur 2110
impossible d'activer le controle "SF_domaine_expertise_contact"

Que faire ? où placer ce test de record count ?

Je souhaite que l'utilisateur remplisse ce champs obligatoire dans le
sous-formulaire avant de passer à un nouvel enregistrement...

Merci de votre aide !

Ronan



"Raymond [mvp]" wrote in message
news:...

Bonjour.

essaie cette solution:
If

Forms("formulairePrincipal")("SF_domaine_expertise_contact").Form.RecordsetC


lone.RecordCount = 0 Then
MsgBox "Veuillez entrer au moins un domaine d'expertise"

Forms("formulairePrincipal")("SF_domaine_expertise_contact").SetFocus
DoCmd.GoToControl "dom_expert"
End If

en passant par forms au lieu de Me, ça te permet de lancer ta fonction
de


n'importe ou et de n'importe quel formulaire ou sous-formulaire.
il faut passer le focus au sous-formulaire avant de se positionner sur
le


contrôle.
--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access.vba.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Ronan" a écrit dans le message de
news:
Bonjour,

J'ai un formulaire (fiche de renseignement sur des experts) avec un
sous-formulaire incorporé contenant uniquement un champs de choix de
domaines d'expertise (liste déroulante). On peut attribuer autant de
domaines d'expertises que l'on veut.

Ma question :
Je souhaite qu'avant de passer à un nouvel enregistrement, access
vérifie qu'il y ait au moins un domaine d'expertise de saisi (choisi
dans la liste déroulante) dans le sous-formulaire car c'est un champ
obligatoire pour faire ensuite une recherche par domaine d'expertise.

J'ai placé dans "Beforeupdate" :
With Me![SF_domaine_expertise_contact]
If .Form.RecordsetClone.BOF And .Form.RecordsetClone.EOF Then
MsgBox ("Veuillez entrer au moins un domaine d'expertise"),
vbExclamation, "Domaine d'expertise non renseignée"
DoCmd.GoToControl ("dom_expert") "" -> ne fonctionne pas...
Cancel = True
End If

Après analyse, je me rends compte que cela ne peut pas marcher car
quand la saisie est en cours et qu'on veut passer à des
sous-formulaires autres, le formulaire principal donne le focus au
sous-formulaire, il fait automatiquement un enregistrement/sauvegarde
du formulaire principal. Et donc, la procédure Beforeupdate recommence
à chaque fois. Je n'arrive pas à entrer dans le sous-formulaire pour
remplir le champs demandé.

Où puis-je placer cette procédure ? Y a t-il un autre moyen de
contrôler l'absence de saisie dans le sous-formulaire (vide) ?

Je vous remercie par avance de votre aide !

Ronan






Avatar
grippay.ronan
Merci Raymond, mais malheureusement cela ne fonctionne pas.
J'ai consulté par curiosité le forum en anglais et j'ai constaté que
cette question a été déjà abordée sans réelle solution efficace. C'est
un point délicat apparemment.
Si quelqu'un a une idée ?
Il n'arrive pas à atteindre le sous-formulaire. Il me donne des
messages d'erreur : impossible d'activer le sous formulaire....
ou alors : impossible de trouver le controle

Effectivement, on peut placer dans l'événement "beforeupdate", le test
de l'absence ou non de données dans le sous-formulaire et cela
fonctionne... mais ensuite le problème est de trouver le moyen
d'atteindre le sous-formulaire, s'il est vide, pour le remplir avant
de sauvegarder l'ensemble du formulaire contenant les
sous-formulaires. Car quand il quitte le formulaire principal pour
aller dans le sous-formulaire, celui-ci sauvegarde l'enregistrement et
la procédure "beforeupdate" se déclenche, ce qui provoque l'erreur à
mon avis.

Me voilà tombé sur un os apparemment.. Des idées ?

Merci !

Ronan


"Raymond [mvp]" wrote in message news:...
Il n'y a qu'un seul endroit le Form_BeforeUpdate du formulaire principal.

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access.vba.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum



Avatar
Raymond [mvp]
On tourne en rond, ici.
il faut choisir à un certain moment de passer outre si l'opérateur va saisir
sur le sous-formulaire. Il faudrait mémoriser une valeur dans une variable
lorsque tu passes pour la première fois et tester cette valeur dans les
beforeupdate et afterupdate et faire un exit sub pour justement permettre
d'aller sur le sous-formulaire après le afterupdate du formulaire principal.

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access.vba.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Ronan" a écrit dans le message de
news:
Merci Raymond, mais malheureusement cela ne fonctionne pas.
J'ai consulté par curiosité le forum en anglais et j'ai constaté que
cette question a été déjà abordée sans réelle solution efficace. C'est
un point délicat apparemment.
Si quelqu'un a une idée ?
Il n'arrive pas à atteindre le sous-formulaire. Il me donne des
messages d'erreur : impossible d'activer le sous formulaire....
ou alors : impossible de trouver le controle

Effectivement, on peut placer dans l'événement "beforeupdate", le test
de l'absence ou non de données dans le sous-formulaire et cela
fonctionne... mais ensuite le problème est de trouver le moyen
d'atteindre le sous-formulaire, s'il est vide, pour le remplir avant
de sauvegarder l'ensemble du formulaire contenant les
sous-formulaires. Car quand il quitte le formulaire principal pour
aller dans le sous-formulaire, celui-ci sauvegarde l'enregistrement et
la procédure "beforeupdate" se déclenche, ce qui provoque l'erreur à
mon avis.

Me voilà tombé sur un os apparemment.. Des idées ?

Merci !

Ronan