VBA Excel : Limiter la saisie sur plusieurs TextBox d'un UserForm

Signaler
Messages postés
1
Date d'inscription
jeudi 1 juin 2006
Statut
Membre
Dernière intervention
1 juin 2006
-
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
-
Bonjour,

Je suis un peu Novice.

J'ai un formulaire sur lequel il y a une centaine de TextBox que j'aimerais limiter à l'insertion de nombres.

Le problème, c'est que je ne me vois pas insérer dans mon programme 100 procédures du type :

"Private Sub textbox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)If Chr(KeyAscii) "." Then KeyAscii Asc(",") ' detecte le point et la virgule et remplace
'le point par une virgule
If KeyAscii = 8 Then 'Regarde si appuyer sur BACKSPACE
KeyAscii = 8 ' Si oui ... On efface
Else
If InStr("0123456789.,", Chr(KeyAscii)) = 0 Then 'contrôle de saisie
KeyAscii = 0 'caractère incorect, donc il ne s'ecrit pas
End If
End If
End Sub"

Savez-vous comment limiter la saisie de tous mes TextBox avec un code cours et simple?

J'espère que mon vocabulaire est simple et compréhensible...

Par avance un grand merci

3 réponses

Messages postés
14848
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
21 janvier 2022
160
Bonjour

à la place de copier le code plusieurs fois, met le dans une fonction :
Private Sub KeyPress(ByRef KeyAscii As MSForms.ReturnInteger)    If Chr(KeyAscii) "." Then KeyAscii Asc(",") ' detecte le point et la virgule et remplace
    'le point par une virgule
    If InStr("0123456789.,", Chr(KeyAscii)) = 0 and KeyAscii << 8 Then 'contrôle de saisie
        KeyAscii = 0 'caractère incorect, donc il ne s'ecrit pas
    End If
End Sub

Ensuite tu appel :
Private Sub textbox1_KeyPress(ByRef KeyAscii As MSForms.ReturnInteger)
    KeyPress(KeyAscii)
End Sub

Bizzare que ce soit ByVal le paramètre, catr si tu le modifie, ce changement ne sera pas appliqué.

Il est plus facile de batiser kk1 que de la convertir. (surtout en programmation)
Une question se pose sur le forum, pas en privé
NHenry (VB6, VBA excel, VB.NET, C++, C#.Net)
Messages postés
42
Date d'inscription
vendredi 10 octobre 2003
Statut
Membre
Dernière intervention
21 juin 2006

Bonjour, tu peux laisser rentrer les données dans le formulaire et tester sur un bouton valider:

Private Sub bt_valider_Click()

Dim badval As Boolean
badval = False

For Each ctl In Me.Controls
If Left(ctl.Name, 4) = "Text" Then
ctl.Text = Replace(ctl.Text, ".", ",")
If Not IsNumeric(ctl.Text) Then
ctl.Text = ""
badval = True
End If
End If
Next

If badval = True Then
MsgBox "Les champs doivent tous être des valeurs numériques"
Else
'Traitement des données si tout va bien
End If

End Sub
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Salut,

En VBA excel, je pense que le mieux serait de faire un Module et un Module de classe.
L'avantage, c'est que tu écris une fois la procédure, qui sera exécuté par autant de TextBox que tu auras au préalable définis.
Si cette technique t'interesse, dis le moi, je te ferai le code des Module et te les mettrai ici.

@++




  Mortalino 
Le Mystérieux Chevalier "Provençal, le Gaulois"
N'oubliez pas de lire le règlement