OVH Cloud OVH Cloud

Contrôle d'une saisie

8 réponses
Avatar
Samban
Bonjour à tous et à toutes..et Bonne Année 2004.

Voici mon petit PB pour l'année nouvelle.

Sur un formulaire, deux zones de texte indépendantes Texte12 et Texte17,
plus un bouton Cmd15.

Texte17 = Valeur par défaut =(MaxDom("An";"T_FACTURE"))

Texte12 = Zone permettant de saisir une nouvelle année

Sur événement Sur clic du bouton Cmd15, j'ai le code suivant me permettant
de valider une action si Texte12 n'est pas nul ou ne contient pas de chaine
vide, ou si Texte12 n'est pas égale à la valeur de Texte17 ....

Private Sub Cmd15_Click()
If (IsNull(Texte12) Or (Texte12 = vbNullString)) Or (Texte12 = Texte17) Then
MsgBox "Saisie obligatoire de l'année AVANT validation" & Chr(13) & "La
valeur saisie doit être différente de " & Texte17, 48, "Saisie incorrecte"
Cancel = True
....
.....


Les deux premiers critéres fonctionne bien, mais (Texte12 = Texte17) ne fait
pas ce que je veux, a savoir empêcher la suite du code si la valeur saisie
dans Texte12 est identique à Texte17.
J'ai essayer plusieurs ecriture tel (Me.Texte12.Value = Me.Texte17.Value)
mais aucun résultat.

Quelqu'un pourrait-il me donner une piste...Merci par avance

8 réponses

Avatar
Raymond [mvp]
Bonjour et meilleurs voeux pour 2004.

tu mets un cancel = true dans une procédure qui ne le gère pas. il faut que
tu testes avant :
place tes contrôles de valeurs sur Texte17_BeforeUpdate(Cancel As Integer)
et là tu auras la possibilité de faire ton cancel = true et rester dans la
saisie du contrôle.

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


" Samban" a écrit dans le message de
news:3ff419fa$0$6976$
Bonjour à tous et à toutes..et Bonne Année 2004.

Voici mon petit PB pour l'année nouvelle.

Sur un formulaire, deux zones de texte indépendantes Texte12 et Texte17,
plus un bouton Cmd15.

Texte17 = Valeur par défaut =(MaxDom("An";"T_FACTURE"))

Texte12 = Zone permettant de saisir une nouvelle année

Sur événement Sur clic du bouton Cmd15, j'ai le code suivant me permettant
de valider une action si Texte12 n'est pas nul ou ne contient pas de
chaine

vide, ou si Texte12 n'est pas égale à la valeur de Texte17 ....

Private Sub Cmd15_Click()
If (IsNull(Texte12) Or (Texte12 = vbNullString)) Or (Texte12 = Texte17)
Then

MsgBox "Saisie obligatoire de l'année AVANT validation" & Chr(13) &
"La

valeur saisie doit être différente de " & Texte17, 48, "Saisie incorrecte"
Cancel = True
....
.....


Les deux premiers critéres fonctionne bien, mais (Texte12 = Texte17) ne
fait

pas ce que je veux, a savoir empêcher la suite du code si la valeur saisie
dans Texte12 est identique à Texte17.
J'ai essayer plusieurs ecriture tel (Me.Texte12.Value = Me.Texte17.Value)
mais aucun résultat.

Quelqu'un pourrait-il me donner une piste...Merci par avance




Avatar
Raymond [mvp]
.../...
sur texte12 qui est le contrôle de saisie. excuses.

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

Mais ....heu.....ça doit être un restant des fêtes, mais je ne comprends pas
trop la manip ;-)

Dans mon champ Texte17 figure déjà une valeur qui est récupéré à partir
d'une table
Valeur par défaut =(MaxDom("An";"T_FACTURE"))
par exemple 2003

Mon champ Texte12 ne me sert qu'à saisir une nouvelle date ; exemple 2004

Et ce n'est que sur clic sur Cmd15 que je fait mon contrôle de saise.
C'est pourquoi je te disais que les deux critères If (IsNull(Texte12) Or
(Texte12 = vbNullString)) fonctionne correctement et affiche correctement
le MsgBox et n'execute pas le reste du code.

Par contre le critére (Texte12 = Texte17) devant théoriquement vérifier que
la nouvelle date ne correspond pas à Texte17, ne fonctionne pas et continue
le reste du code. !!!!

Si eventuellement tu pouvais m'expliquer un peu plus précisemnet mes erreurs
ou m'indiquer une façon plus correcte de vérifier cette saisie d'une autre
façon....
Merci par avance...et désolé de mon ignorance ;-))
Avatar
Maxence HUBICHE
Bonjour,

Moi, je ferai un truc dans ce genre :

On Error GoTo GestErr
Select Case True
Case Nz(Texte12, "") = ""
Err.Raise 65000, "Texte12", "La première année n'est pas
renseignée, merci de corriger"
Case Not IsNumeric(Texte12, "")
Err.Raise 65000, "Texte12", "La première année n'est pas un
nombre, merci de corriger"
Case Nz(Texte17, "") = ""
Err.Raise 65000, "Texte17", "La deuxième année n'est pas
renseignée, merci de corriger"
Case Not IsNumeric(Texte17, "")
Err.Raise 65000, "Texte17", "La deuxième année n'est pas un
nombre, merci de corriger"
Case Nz(Texte12, "") = Nz(Texte17, "")
'Traitement si les données sont équivalentes
Case Else
Err.Raise 64999, "MonProgramme", "Les 2 années ne correspondent
pas. Pourriez-vous vérifier votre saisie s'il vous plaît ?"
End Select
FinProg:
'Ici le code à exécuter systématiquement
On Error Resume Next
Exit Sub
GestErr:
MsgBox Err.Description, vbExclamation, "Oulaaah !"
If Err.Number = 65000 Then Me.Controls(Err.Source).SetFocus
Err.Clear
Resume FinProg


Maintenant, c'est vrai que tu pourras adapter à vonté ...

--
----------------------------------------------------------------------------
-
Maxence HUBICHE
Formateur et développeur indépendant
Modérateur/rédacteur sur http://www.developpez.com

" Samban" a écrit dans le message de news:
3ff543ff$0$6970$
Merci Raymond....

Mais ....heu.....ça doit être un restant des fêtes, mais je ne comprends
pas

trop la manip ;-)

Dans mon champ Texte17 figure déjà une valeur qui est récupéré à partir
d'une table
Valeur par défaut =(MaxDom("An";"T_FACTURE"))
par exemple 2003

Mon champ Texte12 ne me sert qu'à saisir une nouvelle date ; exemple 2004

Et ce n'est que sur clic sur Cmd15 que je fait mon contrôle de saise.
C'est pourquoi je te disais que les deux critères If (IsNull(Texte12) Or
(Texte12 = vbNullString)) fonctionne correctement et affiche correctement
le MsgBox et n'execute pas le reste du code.

Par contre le critére (Texte12 = Texte17) devant théoriquement vérifier
que

la nouvelle date ne correspond pas à Texte17, ne fonctionne pas et
continue

le reste du code. !!!!

Si eventuellement tu pouvais m'expliquer un peu plus précisemnet mes
erreurs

ou m'indiquer une façon plus correcte de vérifier cette saisie d'une autre
façon....
Merci par avance...et désolé de mon ignorance ;-))




Avatar
Raymond [mvp]
Bonjour. ce que je te disais est que tu n'as pas besoin d'un bouton pour
controler ta composition mais seulement de la contrôler avant la mise à jour
de texte12.

Private Sub Texte12_BeforeUpdate(Cancel As Integer)
If (Nz(Texte12, "") = "") Or (Texte12 = Texte17) Then
MsgBox "Saisie obligatoire de l'année AVANT validation" & vbCrLf & _
"La valeur saisie doit être non nulle et différente de " &
Texte17, vbCritical , "Saisie incorrecte"
Cancel = True
End If
End Sub
la procédure continue sur la composition de texte12 si erreur et sur le
contrôle suivant si ok.

autre solution:

Private Sub Texte12_BeforeUpdate(Cancel As Integer)
If (Nz(Texte12, "") = "") Or (Texte12 = Texte17) Then
MsgBox "Saisie obligatoire de l'année AVANT validation" & vbCrLf & _
"La valeur saisie doit être non nulle et différente de " &
Texte17, vbCritical , "Saisie incorrecte"
Cancel = True
Exit Sub
End If
'Ici on continue la procédure si la composition est bonne
End Sub

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


" Samban" a écrit dans le message de
news:3ff543ff$0$6970$
Merci Raymond....

Mais ....heu.....ça doit être un restant des fêtes, mais je ne comprends
pas

trop la manip ;-)

Dans mon champ Texte17 figure déjà une valeur qui est récupéré à partir
d'une table
Valeur par défaut =(MaxDom("An";"T_FACTURE"))
par exemple 2003

Mon champ Texte12 ne me sert qu'à saisir une nouvelle date ; exemple 2004

Et ce n'est que sur clic sur Cmd15 que je fait mon contrôle de saise.
C'est pourquoi je te disais que les deux critères If (IsNull(Texte12) Or
(Texte12 = vbNullString)) fonctionne correctement et affiche correctement
le MsgBox et n'execute pas le reste du code.

Par contre le critére (Texte12 = Texte17) devant théoriquement vérifier
que

la nouvelle date ne correspond pas à Texte17, ne fonctionne pas et
continue

le reste du code. !!!!

Si eventuellement tu pouvais m'expliquer un peu plus précisemnet mes
erreurs

ou m'indiquer une façon plus correcte de vérifier cette saisie d'une autre
façon....
Merci par avance...et désolé de mon ignorance ;-))




Avatar
Samban
Re merci.

Je teste tout ça .. mais j'ai une manie de mettre des boutons partout ;-))

Il est vraie que controler directement à partir de Texte12 est plus simple

Bonne journée
Avatar
Samban
Et oui, encore moi, mais là je ne comprends plus rien ;-(
Et pourtant, Raymond j'ai testé ton code ......

Préférant pour des raisons pratiques vérifier la valeur de Texte12 aprés le
clic sur le bouton Cmd15, j'ai le code suivant :

Private Sub Cmd15_Click()
'Vérifie que le champ Année (Texte12) soit rempli correctement
If (IsNull(Texte12) Or (Texte12 = vbNullString)) Or Len(Texte12) <> 4 Then
MsgBox "Saisie obligatoire de l'année AVANT validation" & vbCrLf & _
"La date saisie doit comporter 4 chiffres.", 48, "Saisie incomplète"
Exit Sub
End if
............
............ Suite du code

Les deux arguments sur If fonctionne correctement; pas de saisie vide ou < 4
caractéres
Par contre si je rajoute l'argument suivant : Or (Texte12 = Texte17)
celui çi n'est jamais pris en compte, et même si la saisie correspond à la
valeur de Texte17, et bien pas de MsgBox et le code continue son execution
!!!!!
Par contre si je remplace Or (Texte12 = "2003") ça fonctionne
Est-ce que je n'aurais pas une erreur venant du fait que la valeur de
Texte17 ne soit pas prise en compte ??? Ou autre ..
HELP ME......merci
Avatar
Raymond [mvp]
Tu vieux bien me passer ton formulaire pour voir ? (en zip obligatoire)

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


" Samban" a écrit dans le message de
news:3ff5a8a6$0$6976$
Et oui, encore moi, mais là je ne comprends plus rien ;-(
Et pourtant, Raymond j'ai testé ton code ......

Préférant pour des raisons pratiques vérifier la valeur de Texte12 aprés
le

clic sur le bouton Cmd15, j'ai le code suivant :

Private Sub Cmd15_Click()
'Vérifie que le champ Année (Texte12) soit rempli correctement
If (IsNull(Texte12) Or (Texte12 = vbNullString)) Or Len(Texte12) <> 4 Then
MsgBox "Saisie obligatoire de l'année AVANT validation" & vbCrLf & _
"La date saisie doit comporter 4 chiffres.", 48, "Saisie incomplète"
Exit Sub
End if
............
............ Suite du code

Les deux arguments sur If fonctionne correctement; pas de saisie vide ou <
4

caractéres
Par contre si je rajoute l'argument suivant : Or (Texte12 = Texte17)
celui çi n'est jamais pris en compte, et même si la saisie correspond à la
valeur de Texte17, et bien pas de MsgBox et le code continue son execution
!!!!!
Par contre si je remplace Or (Texte12 = "2003") ça fonctionne
Est-ce que je n'aurais pas une erreur venant du fait que la valeur de
Texte17 ne soit pas prise en compte ??? Ou autre ..
HELP ME......merci