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

Valeur incorrecte pour ce champ

14 réponses
Avatar
domivax
Bonjour =E0 tous,

J'ai MaTable avec MonChamp, MonFormulaire, MonTextBox et MonBouton.

La source de MonFormulaire est MaTable et la source contr=F4le de
MonTextBox est MonChamp.

MonChamp est un champ num=E9rique.

Sous MonBouton j'ai l'instruction de validation pour si jamais
l'utilisateur introduit une lettre :

If IsNumeric(Me. MonTextBox.Value) =3D False Then
MonMessage
Exit Sub
End If

Mais si effectivement, l'utilisateur introduit une lettre dans
MonTextBox, il appara=EEt le message Access : Valeur incorrecte pour ce
champ.

Comment passer outre ce message car je voudrais que l'erreur soit
g=E9r=E9e par mon IsNumeric=3DFalse

Merci pour votre aide.
A bient=F4t
Xavier

10 réponses

1 2
Avatar
Pierre CFI [mvp]
bonjour
il faut gérer la vérif sur l'évenement Beforeupdate

--
Pierre SALAUN
MVP Access
*******************************************************

a écrit dans le message de news:

Bonjour à tous,

J'ai MaTable avec MonChamp, MonFormulaire, MonTextBox et MonBouton.

La source de MonFormulaire est MaTable et la source contrôle de
MonTextBox est MonChamp.

MonChamp est un champ numérique.

Sous MonBouton j'ai l'instruction de validation pour si jamais
l'utilisateur introduit une lettre :

If IsNumeric(Me. MonTextBox.Value) = False Then
MonMessage
Exit Sub
End If

Mais si effectivement, l'utilisateur introduit une lettre dans
MonTextBox, il apparaît le message Access : Valeur incorrecte pour ce
champ.

Comment passer outre ce message car je voudrais que l'erreur soit
gérée par mon IsNumericúlse

Merci pour votre aide.
A bientôt
Xavier
Avatar
domivax
Bonjour Pierre,

Ca ne marche pas, le message apparaît aussi même si je mets mon éval
sous BeforeUpdate

Bonne journée.
Avatar
Pierre CFI [mvp]
récap, tu veux gérer toi meme l'erreur de vouloir entrer de l'alpha dans un
champ num ??

--
Pierre SALAUN
MVP Access
*******************************************************

a écrit dans le message de news:

Bonjour Pierre,

Ca ne marche pas, le message apparaît aussi même si je mets mon éval
sous BeforeUpdate

Bonne journée.
Avatar
Michel_D
Bonjour Pierre,

Ca ne marche pas, le message apparaît aussi même si je mets mon éval
sous BeforeUpdate


Il faut annuler l'événement (Cancel=True).

Avatar
domivax
Bonsoir,

Au fait ma demande de placer les ordres de validation sur MonBouton
est la suivante :

Ce bouton sert en quelque sorte à valider les entrées ou modifications
de tous mes champs du formulaire et si les critères de validation pour
chaque champ sont OK, les champs se mettent tous en Enabled = False et
si un champ est mal alimenté, il se met en rouge.

Du genre :

Private Sub OK_Click()
Dim Msg, Style, Title

'order validation
If Me.InvoiceSupplier.Value = "" Or IsNull(Me.InvoiceSupplier) = True
Then
Me.InvoiceSupplier.BorderColor = 255
Me.InvoiceSupplier.BackColor = 11184895
Msg = "Data is missing !" & Chr(13)
Style = vbOKOnly + vbInformation
Title = "Error"
Response = MsgBox(Msg, Style, Title)
Me.InvoiceSupplier.SetFocus
Exit Sub

ElseIf Len(Me.InvoiceNr) > 30 Then
Me.InvoiceNr.BorderColor = 255
Me.InvoiceNr.BackColor = 11184895
Msg = "This data is too lengthy." & Chr(13) & Chr(13) & "30
characters maximum ! " & Chr(13)
Style = vbOKOnly + vbInformation
Response = "Error"
Reponse = MsgBox(Msg, Style, Title)
Me.InvoiceNr.SetFocus
Exit Sub

ElseIf Me.InvoiceDate.Value = "" Or IsNull(Me.InvoiceDate) = True Then
Me.InvoiceDate.BorderColor = 255
Me.InvoiceDate.BackColor = 11184895
Msg = "Data is missing !" & Chr(13)
Style = vbOKOnly + vbInformation
Title = "Error"
Response = MsgBox(Msg, Style, Title)
Me.InvoiceDate.SetFocus
Exit Sub

ElseIf Not IsDate(Me.InvoiceDate.Value) = True Then
Me.InvoiceDate.BorderColor = 255
Me.InvoiceDate.BackColor = 11184895
Msg = "This data must be a valid date !" & Chr(13)
Style = vbOKOnly + vbInformation
Title = "Error"
Response = MsgBox(Msg, Style, Title)
Me.InvoiceDate.SetFocus
Exit Sub

ElseIf Me.InvoiceAmount.Value = "" Or IsNull(Me.InvoiceAmount) = True
Then
Me.InvoiceAmount.BorderColor = 255
Me.InvoiceAmount.BackColor = 11184895
Msg = "Data is missing !" & Chr(13)
Style = vbOKOnly + vbInformation
Title = "Error"
Response = MsgBox(Msg, Style, Title)
Me.InvoiceAmount.SetFocus
Exit Sub

ElseIf IsNumeric(Me.InvoiceAmount.Value) = False Then
Me.InvoiceAmount.BorderColor = 255
Me.InvoiceAmount.BackColor = 11184895
Msg = "Data must be a number !" & Chr(13)
Style = vbOKOnly + vbInformation
Title = "Error"
Response = MsgBox(Msg, Style, Title)
Me.InvoiceAmount.SetFocus
Exit Sub

ElseIf Me.InvoiceAmount.Value > 9999999.99 Then
Me.InvoiceAmount.BorderColor = 255
Me.InvoiceAmount.BackColor = 11184895
Msg = "Maximum : 9'999'999.99 !" & Chr(13)
Style = vbOKOnly + vbInformation
Title = "Error"
Response = MsgBox(Msg, Style, Title)
Me.InvoiceAmount.SetFocus
Exit Sub

ElseIf Me.InvoiceCurrency.Value = "" Or IsNull(Me.InvoiceCurrency) =
True Then
Me.InvoiceCurrency.BorderColor = 255
Me.InvoiceCurrency.BackColor = 11184895
Msg = "Data is missing !" & Chr(13)
Style = vbOKOnly + vbInformation
Title = "Error"
Response = MsgBox(Msg, Style, Title)
Me.InvoiceCurrency.SetFocus
Exit Sub

Else

''''' tous les champs en Enabled = False

End If
End Sub


et voilà pour ête plus prècis.

Merci pour votre aide.
A bientôt
Xavier
Avatar
Michel_D
Bonsoir,

Au fait ma demande de placer les ordres de validation sur MonBouton
est la suivante :

Ce bouton sert en quelque sorte à valider les entrées ou modifications
de tous mes champs du formulaire et si les critères de validation pour
chaque champ sont OK, les champs se mettent tous en Enabled = False et
si un champ est mal alimenté, il se met en rouge.

Du genre :

Private Sub OK_Click()
Dim Msg, Style, Title

'order validation
If Me.InvoiceSupplier.Value = "" Or IsNull(Me.InvoiceSupplier) = True
Then
Me.InvoiceSupplier.BorderColor = 255
Me.InvoiceSupplier.BackColor = 11184895
Msg = "Data is missing !" & Chr(13)
Style = vbOKOnly + vbInformation
Title = "Error"
Response = MsgBox(Msg, Style, Title)
Me.InvoiceSupplier.SetFocus
Exit Sub

ElseIf Len(Me.InvoiceNr) > 30 Then
Me.InvoiceNr.BorderColor = 255
Me.InvoiceNr.BackColor = 11184895
Msg = "This data is too lengthy." & Chr(13) & Chr(13) & "30
characters maximum ! " & Chr(13)
Style = vbOKOnly + vbInformation
Response = "Error"
Reponse = MsgBox(Msg, Style, Title)
Me.InvoiceNr.SetFocus
Exit Sub

ElseIf Me.InvoiceDate.Value = "" Or IsNull(Me.InvoiceDate) = True Then
Me.InvoiceDate.BorderColor = 255
Me.InvoiceDate.BackColor = 11184895
Msg = "Data is missing !" & Chr(13)
Style = vbOKOnly + vbInformation
Title = "Error"
Response = MsgBox(Msg, Style, Title)
Me.InvoiceDate.SetFocus
Exit Sub

ElseIf Not IsDate(Me.InvoiceDate.Value) = True Then
Me.InvoiceDate.BorderColor = 255
Me.InvoiceDate.BackColor = 11184895
Msg = "This data must be a valid date !" & Chr(13)
Style = vbOKOnly + vbInformation
Title = "Error"
Response = MsgBox(Msg, Style, Title)
Me.InvoiceDate.SetFocus
Exit Sub

ElseIf Me.InvoiceAmount.Value = "" Or IsNull(Me.InvoiceAmount) = True
Then
Me.InvoiceAmount.BorderColor = 255
Me.InvoiceAmount.BackColor = 11184895
Msg = "Data is missing !" & Chr(13)
Style = vbOKOnly + vbInformation
Title = "Error"
Response = MsgBox(Msg, Style, Title)
Me.InvoiceAmount.SetFocus
Exit Sub

ElseIf IsNumeric(Me.InvoiceAmount.Value) = False Then
Me.InvoiceAmount.BorderColor = 255
Me.InvoiceAmount.BackColor = 11184895
Msg = "Data must be a number !" & Chr(13)
Style = vbOKOnly + vbInformation
Title = "Error"
Response = MsgBox(Msg, Style, Title)
Me.InvoiceAmount.SetFocus
Exit Sub

ElseIf Me.InvoiceAmount.Value > 9999999.99 Then
Me.InvoiceAmount.BorderColor = 255
Me.InvoiceAmount.BackColor = 11184895
Msg = "Maximum : 9'999'999.99 !" & Chr(13)
Style = vbOKOnly + vbInformation
Title = "Error"
Response = MsgBox(Msg, Style, Title)
Me.InvoiceAmount.SetFocus
Exit Sub

ElseIf Me.InvoiceCurrency.Value = "" Or IsNull(Me.InvoiceCurrency) > True Then
Me.InvoiceCurrency.BorderColor = 255
Me.InvoiceCurrency.BackColor = 11184895
Msg = "Data is missing !" & Chr(13)
Style = vbOKOnly + vbInformation
Title = "Error"
Response = MsgBox(Msg, Style, Title)
Me.InvoiceCurrency.SetFocus
Exit Sub

Else

''''' tous les champs en Enabled = False

End If
End Sub


et voilà pour ête plus prècis.

Merci pour votre aide.
A bientôt
Xavier


Les erreurs de saisie de type de donnée doivent normalement être
géré au niveau du contrôle concerné et l'événement BeforeUpdate
est à utiliser puisqu'il permet d'annuler l'opération.

Avatar
domivax
alors j'ai fait comme vous me l'avez conseillé comme ci-dessous :

Private Sub CurrencyRate_BeforeUpdate(Cancel As Integer)

If Me.CurrencyRate.Value <> "" Or IsNull(Me.CurrencyRate) = False Then
If IsNumeric(Me.CurrencyRate.Value) = False Then
MsgBox "Data must be a number !" & Chr(13), vbInformation,
"Error"
Cancel = True
End If
End If

End Sub


mais le message Access apparaît toujours => alors j'ai rajouté


Private Sub Form_Error(DataErr As Integer, Response As Integer)

Response = acDataErrContinue

End Sub

ben c'est pire, si une lettre est introduite dans le champ, ça bloque
sans faire apparaître aucun des messages !

J'ai mis le Cancel = True partout (je l'ai même inscrit contre le mur
de ma chambre et rien n'y fait).... :-)
..... Qu'est-ce que je fais de faux ?

Merci pour vos réponses.
A bientôt.
Avatar
Pierre CFI [mvp]
essaie
Private Sub Nom_KeyPress(KeyAscii As Integer)
If Not IsNumeric(Chr(KeyAscii)) Then
MsgBox "erreur"
KeyAscii = 0
End If


End Sub


--
Pierre SALAUN
MVP Access
*******************************************************

a écrit dans le message de news:

alors j'ai fait comme vous me l'avez conseillé comme ci-dessous :

Private Sub CurrencyRate_BeforeUpdate(Cancel As Integer)

If Me.CurrencyRate.Value <> "" Or IsNull(Me.CurrencyRate) = False Then
If IsNumeric(Me.CurrencyRate.Value) = False Then
MsgBox "Data must be a number !" & Chr(13), vbInformation,
"Error"
Cancel = True
End If
End If

End Sub


mais le message Access apparaît toujours => alors j'ai rajouté


Private Sub Form_Error(DataErr As Integer, Response As Integer)

Response = acDataErrContinue

End Sub

ben c'est pire, si une lettre est introduite dans le champ, ça bloque
sans faire apparaître aucun des messages !

J'ai mis le Cancel = True partout (je l'ai même inscrit contre le mur
de ma chambre et rien n'y fait).... :-)
..... Qu'est-ce que je fais de faux ?

Merci pour vos réponses.
A bientôt.
Avatar
Michel_D
alors j'ai fait comme vous me l'avez conseillé comme ci-dessous :

Private Sub CurrencyRate_BeforeUpdate(Cancel As Integer)

If Me.CurrencyRate.Value <> "" Or IsNull(Me.CurrencyRate) = False Then
If IsNumeric(Me.CurrencyRate.Value) = False Then
MsgBox "Data must be a number !" & Chr(13), vbInformation,
"Error"
Cancel = True
End If
End If

End Sub


mais le message Access apparaît toujours => alors j'ai rajouté


Private Sub Form_Error(DataErr As Integer, Response As Integer)

Response = acDataErrContinue

End Sub

ben c'est pire, si une lettre est introduite dans le champ, ça bloque
sans faire apparaître aucun des messages !

J'ai mis le Cancel = True partout (je l'ai même inscrit contre le mur
de ma chambre et rien n'y fait).... :-)
..... Qu'est-ce que je fais de faux ?


Rien, mais il y a des chances que la propriété text n'ai pas bougé,
tu peux aussi regarder du coté de la méthode undo ou aussi utiliser
l'événement change, tu as l'embarras du choix.

Avatar
domivax
Merci pour vos réponses,

la réponse de Pierre m'arrange parce qu'elle fonctionne, l'idée de
valider les données champs par champs ne me plaisaìt pas beaucoup
départ mais en y réfléchissant bien, effectivement c'est plus pro de
valider un champ après l'autre. Je pense qu'à la longue ça force à
l'utilisateur de saisir des données correctes du premier coup.

Encore merci.
Bonne soirée.
Xavier




ahh au fait, les gars, ça m'oblige à revoir tous mes formulaires :-(
1 2