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

Textbox Difrrerence entre after Update et Exit ?

4 réponses
Avatar
Domi
Bonsoir,
Pour imposer la saisie d'une valeur numérique dans Textbox1
J'ai fait cela :
If Not IsNumeric(TextBox1.Value) Then
MsgBox "Il faut un nombre"
End If

Le Textbox est dans un Frame.
Si je met ce code sur l'evenement Exit du Textbox, cela ne marche pas
correctement, je n'ai le message d'erreur que 4 "Tab" plus tard...
Alors que ça marche illico sur l'evenemaet After Update.
Si je sort le Textbox du Frame ça marche avec les 2 solutions
Pourquoi ? et comment remédier à cela si je veux laisser le Textbox dans le
Frame et exploiter l'évènement Exit ?
Merci de ne pas me laisser mourir idiot.
Domi

4 réponses

Avatar
MichDenis
Bonsoir Domi,

Essaie ceci :


A ) la saisie aux chiffres seulement.

B ) la saisie permet 1 séparateur décimal , virgule ou point
dans la boîte de saisie, et ce, d'après le système en vigueur
sur la machine. (panneau de configuration)

C ) Cette fonction peut servir à un nombre indéterminé de textbox
de ton formulaire.

D ) En copiant cette fonction dans un module standard, elle peut être
utilisé pour tous les formulaires de ton projet qui ont le même besoin.

Pour appeler la fonction pour chaque textbox voici le code à saisir :
Évidemment, n'oublie d'adapter le nom du textbox selon celui de
ton application dans la ligne de commande.

----------------
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)

KeyAscii = CheckLaSaisie(TextBox1, KeyAscii)

End Sub
------------------



Voici la fonction à copier dans un module standard

------------------
Function CheckLaSaisie(Textbox As MSForms.Textbox, ByVal Char As Integer)

Dim SepDec As String

With Application
If .UseSystemSeparators = True Then
SepDec = Application.International(xlDecimalSeparator)
Else
SepDec = .DecimalSeparator
End If
End With

If Char = 44 Or Char = 46 Then
If InStr(1, Textbox, SepDec, vbTextCompare) > 0 Then
CheckLaSaisie = 0
Else
CheckLaSaisie = Asc(SepDec)
End If
Else
If Char < 48 Or Char > 58 Then
CheckLaSaisie = 0
Else
CheckLaSaisie = Char
End If
End If

End Function
-------------------------------------


Salutations!






"Domi" a écrit dans le message de news:
Bonsoir,
Pour imposer la saisie d'une valeur numérique dans Textbox1
J'ai fait cela :
If Not IsNumeric(TextBox1.Value) Then
MsgBox "Il faut un nombre"
End If

Le Textbox est dans un Frame.
Si je met ce code sur l'evenement Exit du Textbox, cela ne marche pas
correctement, je n'ai le message d'erreur que 4 "Tab" plus tard...
Alors que ça marche illico sur l'evenemaet After Update.
Si je sort le Textbox du Frame ça marche avec les 2 solutions
Pourquoi ? et comment remédier à cela si je veux laisser le Textbox dans le
Frame et exploiter l'évènement Exit ?
Merci de ne pas me laisser mourir idiot.
Domi
Avatar
Domi
Merci,
J'ai bien suivi et appliqué ta procédure (j'ai mis la fonction dans un
module standard) mais si je rentre une valeur texte dans le texbox de mon
userform j'ai un message d'erreur 438: "Propriété ou methode non gérée par
cet objet" sur la ligne : If .UseSystemSeparators = True Then
(Sur ma machine j'utilise le "." comme séparateur)
Question subsidiaire, pourrais-tu me dire s'il est simple de modifier ce
code pour n'autoriser que des nombres entiers ?
Salutations ;o)
Domi


"MichDenis" a écrit dans le message de
news:%23%
Bonsoir Domi,

Essaie ceci :


A ) la saisie aux chiffres seulement.

B ) la saisie permet 1 séparateur décimal , virgule ou point
dans la boîte de saisie, et ce, d'après le système en vigueur
sur la machine. (panneau de configuration)

C ) Cette fonction peut servir à un nombre indéterminé de textbox
de ton formulaire.

D ) En copiant cette fonction dans un module standard, elle peut être
utilisé pour tous les formulaires de ton projet qui ont le même
besoin.


Pour appeler la fonction pour chaque textbox voici le code à saisir :
Évidemment, n'oublie d'adapter le nom du textbox selon celui de
ton application dans la ligne de commande.

----------------
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)

KeyAscii = CheckLaSaisie(TextBox1, KeyAscii)

End Sub
------------------



Voici la fonction à copier dans un module standard

------------------
Function CheckLaSaisie(Textbox As MSForms.Textbox, ByVal Char As Integer)

Dim SepDec As String

With Application
If .UseSystemSeparators = True Then
SepDec = Application.International(xlDecimalSeparator)
Else
SepDec = .DecimalSeparator
End If
End With

If Char = 44 Or Char = 46 Then
If InStr(1, Textbox, SepDec, vbTextCompare) > 0 Then
CheckLaSaisie = 0
Else
CheckLaSaisie = Asc(SepDec)
End If
Else
If Char < 48 Or Char > 58 Then
CheckLaSaisie = 0
Else
CheckLaSaisie = Char
End If
End If

End Function
-------------------------------------


Salutations!






"Domi" a écrit dans le message de news:


Bonsoir,
Pour imposer la saisie d'une valeur numérique dans Textbox1
J'ai fait cela :
If Not IsNumeric(TextBox1.Value) Then
MsgBox "Il faut un nombre"
End If

Le Textbox est dans un Frame.
Si je met ce code sur l'evenement Exit du Textbox, cela ne marche pas
correctement, je n'ai le message d'erreur que 4 "Tab" plus tard...
Alors que ça marche illico sur l'evenemaet After Update.
Si je sort le Textbox du Frame ça marche avec les 2 solutions
Pourquoi ? et comment remédier à cela si je veux laisser le Textbox dans
le

Frame et exploiter l'évènement Exit ?
Merci de ne pas me laisser mourir idiot.
Domi





Avatar
Denis Michon
Bonsoir Domi,

Utilise plutôt cette fonction. Je suppose que tu travailles sur une version antérieure à excel 2002.

P.S. Tu dois utiliser cet événement du textbox pour déclencher le processus :
"Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)"

'--------------------------------------
Function CheckLaSaisie(Textbox As MSForms.Textbox, ByVal Char As Integer)

Dim SepDec As String

With Application
If Val(.Version) > 9 Then
If .UseSystemSeparators = True Then
SepDec = Application.International(xlDecimalSeparator)
Else
SepDec = .DecimalSeparator
End If
Else
SepDec = Application.International(xlDecimalSeparator)
End If
End With

If Char = 44 Or Char = 46 Then
If InStr(1, Textbox, SepDec, vbTextCompare) > 0 Then
CheckLaSaisie = 0
Else
CheckLaSaisie = Asc(SepDec)
End If
Else
If Char < 48 Or Char > 58 Then
CheckLaSaisie = 0
Else
CheckLaSaisie = Char
End If
End If

End Function
'--------------------------------------


Salutations!



"Domi" a écrit dans le message de news:
Merci,
J'ai bien suivi et appliqué ta procédure (j'ai mis la fonction dans un
module standard) mais si je rentre une valeur texte dans le texbox de mon
userform j'ai un message d'erreur 438: "Propriété ou methode non gérée par
cet objet" sur la ligne : If .UseSystemSeparators = True Then
(Sur ma machine j'utilise le "." comme séparateur)
Question subsidiaire, pourrais-tu me dire s'il est simple de modifier ce
code pour n'autoriser que des nombres entiers ?
Salutations ;o)
Domi


"MichDenis" a écrit dans le message de
news:%23%
Bonsoir Domi,

Essaie ceci :


A ) la saisie aux chiffres seulement.

B ) la saisie permet 1 séparateur décimal , virgule ou point
dans la boîte de saisie, et ce, d'après le système en vigueur
sur la machine. (panneau de configuration)

C ) Cette fonction peut servir à un nombre indéterminé de textbox
de ton formulaire.

D ) En copiant cette fonction dans un module standard, elle peut être
utilisé pour tous les formulaires de ton projet qui ont le même
besoin.


Pour appeler la fonction pour chaque textbox voici le code à saisir :
Évidemment, n'oublie d'adapter le nom du textbox selon celui de
ton application dans la ligne de commande.

----------------
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)

KeyAscii = CheckLaSaisie(TextBox1, KeyAscii)

End Sub
------------------



Voici la fonction à copier dans un module standard

------------------
Function CheckLaSaisie(Textbox As MSForms.Textbox, ByVal Char As Integer)

Dim SepDec As String

With Application
If .UseSystemSeparators = True Then
SepDec = Application.International(xlDecimalSeparator)
Else
SepDec = .DecimalSeparator
End If
End With

If Char = 44 Or Char = 46 Then
If InStr(1, Textbox, SepDec, vbTextCompare) > 0 Then
CheckLaSaisie = 0
Else
CheckLaSaisie = Asc(SepDec)
End If
Else
If Char < 48 Or Char > 58 Then
CheckLaSaisie = 0
Else
CheckLaSaisie = Char
End If
End If

End Function
-------------------------------------


Salutations!






"Domi" a écrit dans le message de news:


Bonsoir,
Pour imposer la saisie d'une valeur numérique dans Textbox1
J'ai fait cela :
If Not IsNumeric(TextBox1.Value) Then
MsgBox "Il faut un nombre"
End If

Le Textbox est dans un Frame.
Si je met ce code sur l'evenement Exit du Textbox, cela ne marche pas
correctement, je n'ai le message d'erreur que 4 "Tab" plus tard...
Alors que ça marche illico sur l'evenemaet After Update.
Si je sort le Textbox du Frame ça marche avec les 2 solutions
Pourquoi ? et comment remédier à cela si je veux laisser le Textbox dans
le

Frame et exploiter l'évènement Exit ?
Merci de ne pas me laisser mourir idiot.
Domi





Avatar
Domi
Effectivement je suis sous Excel 2000 SP3 / WK2 SP4
Après modifs, ça me semble bon
Merci beaucoup
Domi

"Denis Michon" a écrit dans le message de
news:hzL2e.4927$
Bonsoir Domi,

Utilise plutôt cette fonction. Je suppose que tu travailles sur une
version antérieure à excel 2002.


P.S. Tu dois utiliser cet événement du textbox pour déclencher le
processus :

"Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)"

'--------------------------------------
Function CheckLaSaisie(Textbox As MSForms.Textbox, ByVal Char As Integer)

Dim SepDec As String

With Application
If Val(.Version) > 9 Then
If .UseSystemSeparators = True Then
SepDec = Application.International(xlDecimalSeparator)
Else
SepDec = .DecimalSeparator
End If
Else
SepDec = Application.International(xlDecimalSeparator)
End If
End With

If Char = 44 Or Char = 46 Then
If InStr(1, Textbox, SepDec, vbTextCompare) > 0 Then
CheckLaSaisie = 0
Else
CheckLaSaisie = Asc(SepDec)
End If
Else
If Char < 48 Or Char > 58 Then
CheckLaSaisie = 0
Else
CheckLaSaisie = Char
End If
End If

End Function
'--------------------------------------


Salutations!



"Domi" a écrit dans le message de news:


Merci,
J'ai bien suivi et appliqué ta procédure (j'ai mis la fonction dans un
module standard) mais si je rentre une valeur texte dans le texbox de mon
userform j'ai un message d'erreur 438: "Propriété ou methode non gérée
par

cet objet" sur la ligne : If .UseSystemSeparators = True Then
(Sur ma machine j'utilise le "." comme séparateur)
Question subsidiaire, pourrais-tu me dire s'il est simple de modifier ce
code pour n'autoriser que des nombres entiers ?
Salutations ;o)
Domi


"MichDenis" a écrit dans le message de
news:%23%
Bonsoir Domi,

Essaie ceci :


A ) la saisie aux chiffres seulement.

B ) la saisie permet 1 séparateur décimal , virgule ou point
dans la boîte de saisie, et ce, d'après le système en vigueur
sur la machine. (panneau de configuration)

C ) Cette fonction peut servir à un nombre indéterminé de textbox
de ton formulaire.

D ) En copiant cette fonction dans un module standard, elle peut être
utilisé pour tous les formulaires de ton projet qui ont le même
besoin.


Pour appeler la fonction pour chaque textbox voici le code à saisir :
Évidemment, n'oublie d'adapter le nom du textbox selon celui de
ton application dans la ligne de commande.

----------------
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)

KeyAscii = CheckLaSaisie(TextBox1, KeyAscii)

End Sub
------------------



Voici la fonction à copier dans un module standard

------------------
Function CheckLaSaisie(Textbox As MSForms.Textbox, ByVal Char As
Integer)



Dim SepDec As String

With Application
If .UseSystemSeparators = True Then
SepDec = Application.International(xlDecimalSeparator)
Else
SepDec = .DecimalSeparator
End If
End With

If Char = 44 Or Char = 46 Then
If InStr(1, Textbox, SepDec, vbTextCompare) > 0 Then
CheckLaSaisie = 0
Else
CheckLaSaisie = Asc(SepDec)
End If
Else
If Char < 48 Or Char > 58 Then
CheckLaSaisie = 0
Else
CheckLaSaisie = Char
End If
End If

End Function
-------------------------------------


Salutations!






"Domi" a écrit dans le message de news:


Bonsoir,
Pour imposer la saisie d'une valeur numérique dans Textbox1
J'ai fait cela :
If Not IsNumeric(TextBox1.Value) Then
MsgBox "Il faut un nombre"
End If

Le Textbox est dans un Frame.
Si je met ce code sur l'evenement Exit du Textbox, cela ne marche pas
correctement, je n'ai le message d'erreur que 4 "Tab" plus tard...
Alors que ça marche illico sur l'evenemaet After Update.
Si je sort le Textbox du Frame ça marche avec les 2 solutions
Pourquoi ? et comment remédier à cela si je veux laisser le Textbox dans
le

Frame et exploiter l'évènement Exit ?
Merci de ne pas me laisser mourir idiot.
Domi