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.

10 réponses

1 2
Avatar
Vincent.
Bonsoir !
Je ne sais pas faire ce que tu souhaites faire, mais as-tu
envisager la possibilité d'utiliser dans ton userform un
textbox que tu pourrais rendre visible quand une mauvaise
valeur est saisie par ex.
En espérant t'avoir mis sur une piste...
A+

V.

-----Message d'origine-----
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.

.



Avatar
Hervé
Salut jcg23,
Et de cette façon ?

Private Sub TextBox3_Exit( _
ByVal Cancel As MSForms.ReturnBoolean)
Dim Pos As Integer
With TextBox3
Pos = InStr(.Text, ".") Or InStr(.Text, ",")
If Pos <> 0 Then
MsgBox "Vous devez saisir un nombre entier !"
.Text = Left(.Text, Pos - 1)
End If
End With
End Sub

Hervé.

"jcg23" a écrit dans le message news:
001501c3b05b$0de4d940$
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.
Avatar
Denis Michon
Bonjour jcg23,

Une façon de faire : Tu empêches l'usager de saisir une virgule ou un point dans le combobox, Donc le nombre sera
nécessairement un nombre entier... de la même façon, tu peux empêcher la saisie de caractères qui ne seraient pas des
chiffres...en rafinant la procédure.

'-----------------------------
Private Sub ComboBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)

If KeyAscii = 44 Or KeyAscii = 46 Then
KeyAscii = 0
End If

End Sub
'------------------------------


Salutations!



"jcg23" a écrit dans le message de news:001501c3b05b$0de4d940$
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.
Avatar
Denis Michon
En complément, il y a un truc sur les textbox sur le site à Misange concernant ce type de problème !


Salutations!



"Denis Michon" a écrit dans le message de news:5utvb.59940$
Bonjour jcg23,

Une façon de faire : Tu empêches l'usager de saisir une virgule ou un point dans le combobox, Donc le nombre sera
nécessairement un nombre entier... de la même façon, tu peux empêcher la saisie de caractères qui ne seraient pas des
chiffres...en rafinant la procédure.

'-----------------------------
Private Sub ComboBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)

If KeyAscii = 44 Or KeyAscii = 46 Then
KeyAscii = 0
End If

End Sub
'------------------------------


Salutations!



"jcg23" a écrit dans le message de news:001501c3b05b$0de4d940$
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.
Avatar
jcg23
-----Message d'origine-----
Salut jcg23,
Et de cette façon ?

Private Sub TextBox3_Exit( _
ByVal Cancel As MSForms.ReturnBoolean)
Dim Pos As Integer
With TextBox3
Pos = InStr(.Text, ".") Or InStr(.Text, ",")
If Pos <> 0 Then
MsgBox "Vous devez saisir un nombre entier !"
.Text = Left(.Text, Pos - 1)
End If
End With
End Sub

Hervé.

"jcg23" a écrit
dans le message news:

001501c3b05b$0de4d940$
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.


En fait mon problème est que dès que j'introduit la ligne
avec msgbox, le curseur disparait et je ne peux faire

aucune saisie. Si j'appuie sur la touche TAB je retrouve
mon curseur sur le contrôle suivant.
.



Avatar
Michel Gaboly
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

Avatar
ru-th
Salut

Par rapport à ta question de départ
passes la propriété Showmodal du Userform ( à partir excel 2000) à False
et ton msgbox s'affichera

a+
rural thierry
Veaux et Broutards d'Anjou
Wicasa on kin nape yapi inahni yo (à l'essai)

"jcg23" a écrit dans le message de
news: 001501c3b05b$0de4d940$
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.
Avatar
-----Message d'origine-----
Salut

Par rapport à ta question de départ
passes la propriété Showmodal du Userform ( à partir
excel 2000) à False

et ton msgbox s'affichera

a+
rural thierry
Veaux et Broutards d'Anjou
Wicasa on kin nape yapi inahni yo (à l'essai)

"jcg23" a écrit
dans le message de

news: 001501c3b05b$0de4d940$
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.

Bonsoir,


Mon msgbox s'affiche sans problème, mais après avoir
cliqué sur OK, je ne vois plus mon curseur sur aucun
contrôle de l'userform. Si je fais TAB le curseur apparait
sur le contrôle qui suit mon textbox, donc le focus était
bien resté sur le textbox de départ.


.



Avatar
Michel Pierron
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





Avatar
Michel Gaboly
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