Valeur incorrecte pour ce champ

Le
domivax
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=False

Merci pour votre aide.
A bientôt
Xavier
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Pierre CFI [mvp]
Le #6344731
bonjour
il faut gérer la vérif sur l'évenement Beforeupdate

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


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
domivax
Le #6344601
Bonjour Pierre,

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

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

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


Bonjour Pierre,

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

Bonne journée.
Michel_D
Le #6344551
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).

domivax
Le #6344491
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
Michel_D
Le #6344451
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.

domivax
Le #6344361
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.
Pierre CFI [mvp]
Le #6344321
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
*******************************************************


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.
Michel_D
Le #6344231
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.

domivax
Le #6344131
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 :-(
Publicité
Poster une réponse
Anonyme