Bonjour,
J'ai un formulaire indépendant et un sous formulaire en mode feuille de données.
Dans le formulaire parent j'ai une combobox qui permet de choisir la valeur d'un champs. Une fois ce champs choisi, j'actualise le sous-formulaire pour afficher les enregistrements qui correspondent à la valeur choisie.
Pour eviter que l'utilisateur puisse entrer quoique ce soit dans le sous formulaire (il peut commencer toutefois à y tapper un début de quelque chose) sans avoir préalablement sélectionné une valeur, j'ai fait une fonction sur l'événement before insert du sousformulaire (voir ci-dessous).
Cette fonction teste deux champs du formulaire parent et s'ils sont vides (donc erreur causée par l'absence de choix de la combobox) lance un code qui rends le focus à la combobox, envoie un message et surtout efface dans la table associée au sous-formulaire l'enregisterement qui vient d'être entré.
Ca fonctionne mais ca ouvre en arrière plan la table ce qui n'ets pas très esthetique...
J'avais essayé avec Cancel = True ou DoCmd.CancelEvent mais ca ne marche pas
Avez-vous une solution plus partique et light qui permette que l'info entré par un utilisateur ne puisse pas etre introduit dans la base associé(sans passer par une table temporaire)?
Merci :-)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 Private Sub Form_BeforeInsert(Cancel As Integer) On Error GoTo Err_Form_BeforeInsert Me.NumCD = Me.Parent.txtnumcd Me.NumMIC = CStr(Me.Parent.txtnummic) Exit_Form_BeforeInsert: Exit Sub Err_Form_BeforeInsert: MsgBox Err.Description & " - Veuillez choisir un dossier , SVP!" DoCmd.GoToControl Me.Parent!cmbEmerg.Name DoCmd.OpenTable "NbrEmergence", , acEdit, acHidden DoCmd.GoToRecord acDataTable, "NbrEmergence", acLast DoCmd.RunCommand acCmdDeleteRecord DoCmd.Close acTable, "NbrEmergence", acSaveYes Me.Requery Resume Exit_Form_BeforeInsert End Sub
Partager