**************************
ACCESS 2010
Version imprimable
Bonsoir,
Il suffit de prévenir l'utilisateur avant de faire l'insertion. C'est en général comme cela qu'on procède avec une IHM, on fait les contrôles avant d'insérer les données et si tout est bon, on valide.Citation:
Oui c'est justement le motif de ma demande; éviter le message d'Access si utilisateur ne renseigne pas le contrôle par "on error"
Comme loufab te l'a dit:Par exemple, au début de ta procédure (avant de rendre les contrôles invisibles) tu mets :Citation:
Envoyé par loufab
Code:
1
2
3
4
5
6 If Me.Modifiable64 = "" Then MsgBox "Saisie Nom Opérateur Obligatoire !!!", vbOKOnly + vbCritical, "Cloture Insertions !!! " Me.Modifiable64.SetFocus Exit sub End IF
Bonsoir,
Je complèterais par ce test :
Code:If Me.Modifiable64 = "" or isnull(me.modifiable64) Then
ou bienCode:
1
2
3 If Me.Modifiable64 & "" = "" Then ' ou aussi If Nz(Me.Modifiable64,"") = "" Then
Merci pour vos réponses :
Oui c'est que je compte faire si jamais je n'arrive pas à récupérer l'erreur d'Access, voilà un exemple de procédure que j'ai écrite sur laquelle la récupération de l'erreur d'Access pour en faire un message personnel fonctionne :Code:
1
2
3
4
5
6
7
8
9
10
11 If Me.Modifiable64 = "" Then MsgBox "Saisie Nom Opérateur Obligatoire !!!", vbOKOnly + vbCritical, "Cloture Insertions !!! " Me.Modifiable64.SetFocus Exit sub End IF If Me.Modifiable64 = "" or isnull(me.modifiable64) Then if Me.Modifiable64 & "" = "" Then ' ou aussi If Nz(Me.Modifiable64,"") = "" Then
C'est le cas ou un champ clé étrangère n'est pas renseigné: message d'Access sur l'erreur 3101 avec on error le MsgBox "Saisie Incorecte" s'affiche et pas le messge d'Access, sur mon problème le message d'Access continue à s'afficher puis s'affiche le message perso géré avec on error, c'est peut être parce que Modifiable64 n'est pas une clé je ne sais pas...Code:
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 Commande66_Click() Dim csql5 As String If IsNull(Me.Texte35) Then MsgBox ("Saisie N°Dossier Obligatoire !") Me.Texte35.SetFocus Exit Sub End If On Error GoTo Err DoCmd.RunCommand acCmdSaveRecord Me.RecordSource = Me.RecordSource Me.Sous_Formulaire_Insertions.Form.RecordSource = Me.Sous_Formulaire_Insertions.Form.RecordSource Texte35.Locked = True fin: Exit Sub Err: MsgBox "Saisie Incorecte !", _ vbOKOnly + vbExclamation, _ "Saisie Insertions !!! " If Me.Texte6 <> "" Or Not IsNull(Me.Texte6) Then Me.Texte27.SetFocus Else Me.Texte6.SetFocus End If Resume fin End Sub
Merci à vous deux pour votre aide et à tous les autres, je laisse le sujet ouvert si quelqu'un a la solution si il y a une solution...:roll:
ce n'est pas la bonne méthode, je te conseille vivement de faire tes contrôles avant l'insertion, c'est une absurdité de vouloir "trapper" les erreurs système pour contrôler la saisie.Citation:
Oui c'est que je compte faire si jamais je n'arrive pas à récupérer l'erreur d'Access, voilà un exemple de procédure que j'ai écrite sur laquelle la récupération de l'erreur d'Access pour en faire un message personnel fonctionne :
Citation:
c'est une absurdité de vouloir "trapper" les erreurs système pour contrôler la saisie.
oui Chef :D
Mais alors pourquoi on error ?
Pour des erreurs d'un "plus haut niveau" ?
Merci
Bonjour
Oui, ce sont les erreurs système inattendues (celles que l'on n'a pas prévu dans les contrôles).Citation:
Mais alors pourquoi on error ?
Pour des erreurs d'un "plus haut niveau" ?
Merci
Le fait d'attraper une erreur et de l'afficher permet d'alerter l'utilisateur et lui évite de se trouver devant la fenêtre de code avec l'instruction en erreur et permet au développeur de corriger le code en conséquence si besoin, mais cela ne devrait arriver que très rarement (sauf peut-être les conflits d'écritures en mode multi-utilisateurs mais même dans ce cas on peut prévoir des routines pour continuer le traitement)
*****************************************************
Merci pour ta réponse, j'en tiendrai compte j'ai finalement codé comme ca sur le focus du contrôle suivant :
Merci à toiCode:
1
2
3
4
5
6
7 Private Sub Commande62_GotFocus() If IsNull(Me.Modifiable64) Or Null Then MsgBox "Saisie Nom Opérateur Obligatoire !!!", vbOKOnly + vbCritical, "Cloture Insertions !!! " Me.Modifiable64.SetFocus End If End Sub
A+
Bonsoir,
méfie-toi, avec GotFocus l'affichage du message sera systématiquement provoqué et la sortie du champ sera impossible tant que l'utilisateur n'aura pas saisi quelque chose.Citation:
Merci pour ta réponse, j'en tiendrai compte j'ai finalement codé comme ca sur le focus du contrôle suivant :
Pour moi, le mieux c'est de faire les contrôles au moment de la validation (clic sur le bouton) mais c'est toi qui voit.
Or Null est en tropCode:If IsNull(Me.Modifiable64) Or Null Then
***************************************************
Merci de ta remarque je l'avais fait sur l'évènement "sur Clic" au départ mais je ne pouvais pas "revenir" sur le contrôle "Modifiable64"
C'est pour ça que je l'ai fait sur le focus de Commande62 (le contrôle qui suit Modifiable64).Code:
1
2
3
4
5 If IsNull(Me.Modifiable64) Or Null Then MsgBox "Saisie Nom Opérateur Obligatoire !!!", vbOKOnly + vbCritical, "Cloture Insertions !!! " Me.Modifiable64.SetFocus End If
Si tu as une idée comment résoudre cet inconvénient, j'ai tout de même testé le programme avec ou sans données dans "Modifiable64" pas de problèmes le message ne s'affiche pas tout le temps.
Oui en effet Or Null est en trop faute d'étourderie...
Merci