OVH Cloud OVH Cloud

TextBox saisie numérique

1 réponse
Avatar
Ouille
Bonsoir a toutes et tous,

Je me doute que le sujet a été plusieurs abordé, mais là, je pense qu'il
diffère un peu, (mais pas beaucoup,lol).

Je connais ce code pour obliger a la validation une valeur Numérique :


'=========Message si TextBox3 non numérique
If Not IsNumeric(MontantEntretien) Then
MsgBox "Vous devez rentrer des chiffres uniquement", vbCritical, "Attention
!"
MontantEntretien = ""
MontantEntretien.SetFocus
Exit Sub
End If


Mais deux cas se pésentent pour moi,

Le premier, c'est que je voudrais que cela réagisse directement à la saisie,
chose que j'ai tenté en mettant ce code dans :

Private Sub MontantEntretien_Change()
End Sub

Mais là, des que je fais modifier dan smon UserForm :

Private Sub ModifierEntretien_Click()
Dim Ctrl
For Each Ctrl In Me.Controls
If TypeOf Ctrl Is MSForms.TextBox Then Ctrl.Value = ""
Next Ctrl
MontantEntretien.SetFocus
ValiderEntretien.Visible = True
ModifierEntretien.Visible = False
MontantEntretien.Locked = False
MontantEntretien.BackColor = &HC0C0FF
End Sub

J'ai déja le message de saisie d'une valeur numéric, donc je fais ok, et si
je retente de mettre une lettre cela me pose deux fois le même question.

Donc ma question serai, comment je peu faire ce test à la saisie, dans mon
TextBox.

Suite a cela, j'ai un UserFor, qui contiendrai plusieurs TextBox dans
lesquels je voudrais faire ce test, es-ce possible de faire ce test sur
plusieurs TextBox sans être obligé d'écrit 15 fois la même procédure un peu
comme pour effacer les TextBox :

For Each Ctrl In Me.Controls
If TypeOf Ctrl Is MSForms.TextBox Then Ctrl.Value = ""
Next Ctrl

Je vous remercie par avance de votre aide, Ouille

1 réponse

Avatar
Michel Pierron
Bonsoir Ouille;
Une fonction pour tous les TextBox:

Private Sub TextBox1_Change()
Me.TextBox1 = CleanChain(Me.TextBox1)
End Sub

Private Function CleanChain(Chain As String) As String
Const Cars As String = "0123456789,."
Dim L As String * 1, i As Integer
For i = 1 To Len(Chain)
L = Mid(Chain, i, 1)
Select Case L
Case ",", "."
L = Application.International(xlDecimalSeparator)
If InStr(1, CleanChain, L) Then GoTo 1
End Select
If InStr(1, Cars, L) Then CleanChain = CleanChain & L
1: Next i
End Function

MP

"Ouille" a écrit dans le message de
news:
Bonsoir a toutes et tous,

Je me doute que le sujet a été plusieurs abordé, mais là, je pense qu'il
diffère un peu, (mais pas beaucoup,lol).

Je connais ce code pour obliger a la validation une valeur Numérique :


'=========Message si TextBox3 non numérique
If Not IsNumeric(MontantEntretien) Then
MsgBox "Vous devez rentrer des chiffres uniquement", vbCritical,
"Attention

!"
MontantEntretien = ""
MontantEntretien.SetFocus
Exit Sub
End If


Mais deux cas se pésentent pour moi,

Le premier, c'est que je voudrais que cela réagisse directement à la
saisie,

chose que j'ai tenté en mettant ce code dans :

Private Sub MontantEntretien_Change()
End Sub

Mais là, des que je fais modifier dan smon UserForm :

Private Sub ModifierEntretien_Click()
Dim Ctrl
For Each Ctrl In Me.Controls
If TypeOf Ctrl Is MSForms.TextBox Then Ctrl.Value = ""
Next Ctrl
MontantEntretien.SetFocus
ValiderEntretien.Visible = True
ModifierEntretien.Visible = False
MontantEntretien.Locked = False
MontantEntretien.BackColor = &HC0C0FF
End Sub

J'ai déja le message de saisie d'une valeur numéric, donc je fais ok, et
si

je retente de mettre une lettre cela me pose deux fois le même question.

Donc ma question serai, comment je peu faire ce test à la saisie, dans mon
TextBox.

Suite a cela, j'ai un UserFor, qui contiendrai plusieurs TextBox dans
lesquels je voudrais faire ce test, es-ce possible de faire ce test sur
plusieurs TextBox sans être obligé d'écrit 15 fois la même procédure un
peu

comme pour effacer les TextBox :

For Each Ctrl In Me.Controls
If TypeOf Ctrl Is MSForms.TextBox Then Ctrl.Value = ""
Next Ctrl

Je vous remercie par avance de votre aide, Ouille