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

Evénement exit sur contrôle textbox

11 réponses
Avatar
jcg23
Bonjour,

Pour controler ma saisie (dans ce cas pour m'assurer que=20
la valeur saisie est un entier) dans un textbox, j'utilise=20
l'=E9v=E9nement exit de la fa=E7on suivante :

Private Sub TextBox3_Exit(ByVal Cancel As=20
MSForms.ReturnBoolean)
If Fix(CDbl(TextBox3.Value)) <> CDbl(TextBox3) Then
'MsgBox "Vous devez saisir un nombre entier"
Cancel =3D True
TextBox3 =3D ""
Else
Cancel =3D False
End If
End Sub
=20
Tout fonctionne bien, mais si je veux faire apparaitre un=20
message d'avertissement avec msgbox, =E7a ne marche plus.
Comment faire ? Merci de votre aide.

1 réponse

1 2
Avatar
Michel Pierron
Bonjour Michel;
Tu as raison, les lendemains de fête me sont de plus en plus néfastes.
Private Sub TextBox1_Change()
Me.TextBox1 = CleanChain(Me.TextBox1)
End Sub
:-))))

"Michel Gaboly" a écrit dans le message de
news:
Bonsoir Michel,

Elle est appelée où ta fonction CleanChain ???

Et pourquoi un UCase dans le TextBox1_Change, puisqu'il
s'agit de contrôler la saisie d'un entier ? Les caractères alpha
sont tous à rejeter



Bonjour;
Pourquoi pas une petite fonction ?

Private Sub TextBox1_Change()
Me.TextBox1 = LTrim(UCase(Me.TextBox1))
End Sub

Function CleanChain(Chain As String, Optional Dec As Boolean = False) As
String
Dim nb As String * 1, i As Byte, Cars As String, OkChain As String
Cars = "0123456789": If Dec Then Cars = Cars & ".,"
For i = 1 To Len(Chain)
nb = Mid(Chain, i, 1)
If Dec And (nb = "," Or nb = ".") Then
nb = Application.International(xlDecimalSeparator)
If ExistingDecimalSeparator(OkChain, nb) Then GoTo Suivant
End If
If InStr(1, Cars, nb) > 0 Then OkChain = OkChain & nb
Suivant:
Next i
CleanChain = OkChain
End Function

Private Function ExistingDecimalSeparator(Chain As String, L As String)
As


Boolean
ExistingDecimalSeparator = CBool(InStr(1, Chain, L) > 0)
End Function

MP

"Michel Gaboly" a écrit dans le message de
news:
Bonsoir,

Personnellement, je préfère controler la saisie
au fur et à mesure avec l'événement Change :

Private Sub TMontant_Change()
If TMontant <> "" Then
If Not IsNumeric(TMontant) Then
MsgBox "Le montant doit être un nombre !", 48
TMontant = Left(TMontant, Len(TMontant) - 1)
ElseIf Int(TMontant) - TMontant <> 0 Then
MsgBox "Le montant doit être un nombre entier !",
48



TMontant = Left(TMontant, Len(TMontant) - 2)
End If
End If
End Sub

Avec cette procédure, un message est affiché si le
contenu du TextBox, nommé ici "TMontant" n'est pas
numérique.

Le dernier caractère saisi est ensuite supprimé.

Si le montant est numérique, mais pas entier, un
autre message est affiché, et cette fois les 2 derniers
caractères saisis sont supprimés, pour tenir compte
du séparateur décimal.


La procédure précédente n'accepte pas les nombres né-
gatifs, car le "-" initial n'est pas accepté, d'où cette
variante :

Private Sub TMontant_Change()
If TMontant <> "" Then
If Not IsNumeric(TMontant) Then
If TMontant <> "-" Then
MsgBox "Le montant doit être un nombre !",
48



TMontant = Left(TMontant, Len(TMontant) -
1)



End If
ElseIf Int(TMontant) - TMontant <> 0 Then
MsgBox "Le montant doit être un nombre entier !",
48



TMontant = Left(TMontant, Len(TMontant) - 2)
End If
End If
End Sub



Bonjour,

Pour controler ma saisie (dans ce cas pour m'assurer que
la valeur saisie est un entier) dans un textbox, j'utilise
l'événement exit de la façon suivante :

Private Sub TextBox3_Exit(ByVal Cancel As
MSForms.ReturnBoolean)
If Fix(CDbl(TextBox3.Value)) <> CDbl(TextBox3) Then
'MsgBox "Vous devez saisir un nombre entier"
Cancel = True
TextBox3 = ""
Else
Cancel = False
End If
End Sub

Tout fonctionne bien, mais si je veux faire apparaitre un
message d'avertissement avec msgbox, ça ne marche plus.
Comment faire ? Merci de votre aide.


--
Cordialement,

Michel Gaboly
http://www.gaboly.com





--
Cordialement,

Michel Gaboly
http://www.gaboly.com







1 2