Contrôle de saisie en sortie de textbox

  • Initiateur de la discussion Initiateur de la discussion Troudz
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Troudz

XLDnaute Occasionnel
Bonjour tout le monde,

Mon utilisateur est censé saisir un nombre relatif (avec un maximum de 2 décimales) dans un textbox.

Le contrôle de cette saisie me semblant difficile à réaliser "en direct" (en utilisant l'évenement KeyPress), je me suis dit qu'il serait plus simple d'attendre la sortie du textbox.

Et bien même là, je n'arrive à rien de concluant. Auriez une idée sur les conditions nécessaires à cette validation ?

Je vous remercie par avance de votre aide.

Bonne journée à tous !
 
Re : Contrôle de saisie en sortie de textbox

Hello Troudz.

Bah tu n'as qu'à faire quelque chose dans ce goût-là :

Code:
Private Sub TextBox1_Change()
    If Not IsNumeric(TextBox1.Value) Then TextBox1.Value = ""
End Sub

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    TextBox1.Value = Format(TextBox1.Value, "0.00")
End Sub
La première macro événementielle se déclenche à chaque modification de la valeur de ton TextBox. Si le contenu n'est pas de type numérique alors on vide le contenu (numérique sous-entend que l'on peut avoir des décimales ; et pour écrire un nombre décimal on utilise "," et non ".").
La deuxième macro événementielle se déclenche lorsque l'on quitte le TextBox et est chargé de formater son contenu à un nombre décimal avec deux chiffres après la virgule (bien sûr s'il y en a plus après la virgule alors Excel se charge d'arrondir comme il faut).
 
Re : Contrôle de saisie en sortie de textbox

bonjour Troudz, MatiChoux
une autre soluc.. parmi tant d'autres.... empeche de sortir si pas correct

Code:
 Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
 If Right(TextBox1, 3) <> ".00" Then Cancel = True: MsgBox "attention"
End Sub

eventuellement on peut rajouter pour eviter faute de frappe

Code:
Private Sub textBox1_keyPress(ByVal keyAscii As MSForms.ReturnInteger)
  If InStr("0123456789.,", Chr(keyAscii)) = 0 Then keyAscii = 0
  If keyAscii = Asc(",") Then keyAscii = Asc(".")
End Sub
 
Dernière édition:
Re : Contrôle de saisie en sortie de textbox

Bonjour Matichoux et Laetitia et merci pour vos propositions

@Matichoux : Ton code fonctionne très bien sauf si le nombre saisi est négatif ! La saisie du symbole "-" est refusée.

@Laetitia : Avec les corrections apportées, ça semble fonctionner. J'ai juste rajouté une mise au format "0.00" juste avant ton contrôle afin que l'utilisateur ne soit pas obligé de saisir des décimales ainsi que la possibilité de saisir le signe négatif. Ça donne ceci :

Code:
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    TextBox1 = Format(TextBox1, "0.00")
    If Not TextBox1 Like "*,##" Then Cancel = True: MsgBox "attention"
End Sub
Private Sub textBox1_keyPress(ByVal keyAscii As MSForms.ReturnInteger)
  If InStr("0123456789.,-", Chr(keyAscii)) = 0 Then keyAscii = 0
  If keyAscii = Asc(",") Then keyAscii = Asc(".")
End Sub

Et ça semble fonctionner correctement.

Par contre si tu as un code un peu plus "évolué" dans tes archives, je suis preneur. J'adorerai pouvoir gérer les erreurs de saisie en direct via l'évènement KeyPress (saisie d'une seule virgule, d'un seul signe négatif, signe négatif obligatoirement en première position, ne pas pouvoir commencer par une virgule etc...)
 
Re : Contrôle de saisie en sortie de textbox

Bonjour Si...

Effectivement, tu n'as pas tort. On pourrait partir du principe que la partie entière est supposée être égale à 0.

Par contre sur l'exemple que tu as fourni, le fait de taper directement une virgule fait tout planter 😛

En tout cas merci pour ton exemple, il ne me restera plus qu'à gérer le signe négatif et à intégrer ça dans un module de classe.
 
Dernière édition:
Re : Contrôle de saisie en sortie de textbox

re tous salut Si🙂
une autre facon traite pas les decimales mais vu que tu mets un format

Code:
 TextBox1 = Format(TextBox1, "0.00")

pas de pb...

evite de demmarer avec 2 -- empeche de rajouter - si le premier caractere =0 a 9 ect...

Code:
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
  If KeyAscii = 44 Then KeyAscii = 46
  If Len(TextBox1) = 0 Then _
  If InStr("0123456789-", Chr(KeyAscii)) = 0 Then KeyAscii = 0
  If Left(TextBox1, 1) = "-" And Len(TextBox1) = 1 Then _
  If InStr("0123456789", Chr(KeyAscii)) = 0 Then KeyAscii = 0
  If Len(TextBox1) > 0 And Left(TextBox1, 1) <> "-" Then _
  If InStr("0123456789,.", Chr(KeyAscii)) = 0 Then KeyAscii = 0
  If InStr(TextBox1, ".") > 0 And KeyAscii = Asc(".") Then KeyAscii = 0
  If InStr(TextBox1, "-") > 0 And KeyAscii = Asc("-") Then KeyAscii = 0
End Sub

en fait!!pas simplifier mais bon pas retrouver dans mes archives cela ma forcée a "bosser" un peu😎

apres si tu veus mettre dans une classe je connais un peu ti peu je peus t'aider eventuellement


quoi que si on veut limiter le nb..decimales a 2 a la frappe par exemple il suffit de rajouter a la fin du code

Code:
 If TextBox1 Like "*.*" Then _
  If Len(TextBox1) - InStr(TextBox1, ".") > 1 Then KeyAscii = 0
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

M
Réponses
5
Affichages
1 K
M
V
Réponses
9
Affichages
2 K
Virginie
V
L
Réponses
6
Affichages
1 K
L
N
Réponses
0
Affichages
1 K
N
M
Réponses
5
Affichages
2 K
marabbeh
M
Retour