beberw
Messages postés5Date d'inscriptionsamedi 16 septembre 2006StatutMembreDernière intervention11 octobre 2006
-
1 oct. 2006 à 14:59
Dolphin Boy
Messages postés630Date d'inscriptionvendredi 5 mai 2006StatutMembreDernière intervention17 février 2007
-
1 oct. 2006 à 18:46
j'utilise cette fonction pour limiter en nombre numerique, entier, positif emprunté sur ce site
et je voudrais savoir s'il y a moyen de l'évoluer?
je voudrais inserer dans ce module deux fonctions:
- limiter à ( x) decimal apres la virgule
- remplacer le . par la virgule (ou vice versa suivant le parametre regional de Windows si possible)
Dans la forme
Private Sub .......Text1_KeyPress(index As Integer, KeyAscii As Integer) If KeyAscii 46 Then KeyAscii 44 'transforme le point par la virgule
If Not Controler_KeyPress_Ok(KeyAscii, .......Text1(index), True, False) Then
KeyAscii = 0
Beep
End If
End Sub
Dans le module
"
' Parametres:
' - KeyAscii -> caracteres saisies par l'utilisateur (code Ascii)
' - Est_Positif -> Si true n'accepte que des valeurs superieurs ou égales à 0, Si false accepte des valeurs positives ou négatives
' - Est_Entier -> Si true n'accepte que des entiers, Si false accepte des valeurs avec virgules
' - Txtbox -> control textbox oú l'utilisateur saisie des caracteres
Public Function Controler_KeyPress_Ok(ByVal KeyAscii As Integer, ByVal Txtbox As TextBox, ByVal Est_Positif As Boolean, ByVal Est_Entier As Boolean) As Boolean
Select Case KeyAscii
' 48 to 57 => 0 à 9 ; 8 => Backspace ; 13 => Enter ; 3 => Ctrl+C (copier) ; 22 => Ctrl+V (coller) ; 24 => Ctrl+X (couper)
Case 48 To 57, 8, 13, 3, 22, 24:
Controler_KeyPress_Ok = True
' 44 => , (virgule) ; 46 => . (point)
Case 44, 46:
If Est_Entier Then ' si c'est un entier...
Controler_KeyPress_Ok = False ' ... on annule la virgule ou le point
Else ' sinon...
Controler_KeyPress_Ok InStr(Txtbox.Text, ".") 0 And InStr(Txtbox.Text, ",") = 0 ' ... on annule la virgule ou le point seulement si le caractere est deja present dans le texte
End If
' 45 => - (signe moins)
Case 45:
If Est_Positif Then ' si c'est un positif...
Controler_KeyPress_Ok = False ' ... on annule le signe moins
Else ' sinon... Controler_KeyPress_Ok InStr(Txtbox.Text, "-") 0 And Txtbox.SelStart = 0 ' ... on annule le signe moins seulement si il est deja present dans le texte et s'il n'est pas le premier caractere du texte
End If
' caracteres non valides
Case Else:
Controler_KeyPress_Ok = False
End Select
' Si caractere valide et si on permet des nombres negatifs ...
If Controler_KeyPress_Ok And Not Est_Positif Then
'... alors on annule le caractere s'il est placé devant un signe moins If Txtbox.SelStart 0 And InStr(Txtbox.Text, "-") Then Controler_KeyPress_Ok False
End If
End Function "
Dolphin Boy
Messages postés630Date d'inscriptionvendredi 5 mai 2006StatutMembreDernière intervention17 février 2007 1 oct. 2006 à 18:46
Salut, voilà un bout de code que j'utilise pour contrôler la saisie de nombres en Currency, je pense que tu sauras l'adapter, en tous cas, le nombre de décimales y est fixé à 2, pour ce que j'ai pris comme dépasement de capacité, je te laisse le modifier comme bon te semble. Il manque seulement la possibilité de saisir un signe "-" ou "+".
'dans un module au niveau général
Public separateurdecimal As String
Public Function Ctrl_Saisie(tbx As TextBox, v As Integer) As Integer
If v > 31 And (v < 48 Or v > 57) And v <> 44 And v <> 46 Then
v = 0
End If
If v = 44 Then If separateurdecimal "." Then v 46
If InStr(tbx.Text, separateurdecimal) > 0 Then v = 0
ElseIf v = 46 Then If separateurdecimal "," Then v 44
If InStr(tbx.Text, separateurdecimal) > 0 Then v = 0
End If
Ctrl_Saisie = v
End Function
'dans la sub Main de ton module ou dans le Load de ta form principale
If InStr(CStr(3 / 2), ".") Then
separateurdecimal = "."
Else
separateurdecimal = ","
End If
'dans l'évènement Keypress de ta Textbox (ici c'est Text1 - à remplacer par le nom de ta textbox)
Private Sub Text1_KeyPress(KeyAscii As Integer)
KeyAscii = Ctrl_Saisie(Text1, KeyAscii)
If KeyAscii <> 0 Then
If InStr(Text1.Text, separateurdecimal) > 0 Then
If Len(Text1) > 16 Then
MsgBox "La capacité maximale est de : 99 999 999 999 999,99", vbCritical, "Dépassement de capacité"
KeyAscii = 0
End If
If Len(Text1.Text) - InStr(Text1.Text, separateurdecimal) > 1 Then
MsgBox "Veuillez saisir 2 décimales seulement.", vbCritical, "Dépassement de capacité"
KeyAscii = 0
End If
Else
If Len(Text1.Text) > 13 And KeyAscii <> Asc(separateurdecimal) Then
MsgBox "La capacité maximale est de : 99 999 999 999 999,99", vbCritical, "Dépassement de capacité"
KeyAscii = 0
End If
End If
End If
End Sub