Voici la version "complete" d'une source que j'ai envoyée la semaine derniere
Cette fois le code prend en compte:
- les nombres negatifs ou positifs
- la virgule et le point
- le copier coller
Les instructions qui controlent la saisie de caracteres sont dans une fonction publique placée dans un module. Dans celle-ci, on peut indiquer en paramétre si on permet des nombres negatifs et si on permet la virgule.
Ainsi, chaque textbox d'un projet peut controler ses caracteres avec un minimun de code. De plus, cette structure facilite beaucoup les updates et la lecture de la source.
Le project complet contient:
- un module avec la fonction Controler_KeyPress_Ok
- une form avec deux textbox pour tester (l'un permettant la saisie d'entier positif, l'autre permettant la saisie de nombres réels)
Voici le contenu de la form:
Source / Exemple :
Option Explicit
' Premiere textbox: on controle la saisie de caracteres
' de maniere a ne permettre que des entiers positifs
Private Sub Text1_KeyPress(KeyAscii As Integer)
' Si caractere invalide on annule le caractere
If Not Controler_KeyPress_Ok(KeyAscii, Text1, True, True) Then KeyAscii = 0
positifs
End Sub
' On controle le contenu de la textbox (Indispensable pour le copier-coller)
Private Sub Text1_Validate(Cancel As Boolean)
If IsNumeric(Text1.Text) Then ' si valide...
Text1.Text = Format(Text1.Text, "0.000") ' -> ...on aplique le format que le veut (si on en veut un)
ElseIf Text1.Text <> "" Then
Text1.Text = "" ' -> on pourrait mettre aussi Text2.Text = "0", ou ne rien mettre ...
Cancel = True
MsgBox "Nombre incorrect!", vbExclamation ' -> on peut mettre le msg que l'on veut si on en veut un
End If
End Sub
'----------
' Deuxieme textbox: on controle la saisie de caracteres
' de maniere a ne permettre que des nombres réels
Private Sub Text2_KeyPress(KeyAscii As Integer)
If Not Controler_KeyPress_Ok(KeyAscii, Text2, False, False) Then KeyAscii = 0
End Sub
' On controle le contenu de la textbox (Indispensable pour le copier-coller)
Private Sub Text2_Validate(Cancel As Boolean)
If IsNumeric(Text2.Text) Then
Text2.Text = Format(Text2.Text, "currency")
ElseIf Text2.Text <> "" Then
Text2.Text = "0"
Cancel = True
MsgBox "Nombre incorrect!", vbExclamation
End If
End Sub
Conclusion :
Pour la fonction Controler_KeyPress_Ok voir le zip. Merci.
En ce qui concerne le copier-coller, le seul moyen que j'ai trouver est d'acouppler
a la fonction Controler_KeyPress_Ok, l'evenement 'Validate' d'un textbox
Certains pourraient suggerer de controler le contenu d'un copier-coller lors de l'evenement Keypress.
Mais l'utilisateur peut coller avec shift-insert qui ne declenche pas cet l'evenement, mais l'evenement KeyDown / KeyUp.
On pourrait alors controler le contenu d'un copier-coller lors de l'evenement KeyDown. Mais l'utilisateur peut aussi detourner ce test en utilisant le copier du menu contextuel d'un textbox en cliquant avec le bouton droit de la sourie, frustrant ainsi nos efforts.
Voila pourquoi l'utilisation des deux events:
- Keypress: pour controler la saisie de caracteres
- Validate: pour controler le contenu d'un textbox
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.