'Vérifie si la valeur saisie dans le textbox est numérique en même temps que la saisie 'Déclaration des Api Private Declare Function GetLocaleInfo Lib "kernel32" Alias "GetLocaleInfoA" (ByVal Locale As Long, ByVal LCTYPE As Long, ByVal lpLCData As String, ByVal cchData As Long) As Long Private Declare Function SetLocaleInfo Lib "kernel32" Alias "SetLocaleInfoA" (ByVal Locale As Long, ByVal LCTYPE As Long, ByVal lpLCData As String) As Long Private Declare Function GetUserDefaultLCID Lib "kernel32" () As Long 'Déclaration de la constante séparateur décimal Private Const LOCALE_SDECIMAL = &HE Dim Separateur As String Public Sub numerique(ByVal KeyAscii As MSForms.ReturnInteger, ByVal Text As String) 'Si le caractère n'est pas numérique ou pas le séparateur de décimal, on annule l'appui sur la touche If Not IsNumeric(Chr(KeyAscii)) And CStr(Chr(KeyAscii)) <> Separateur Then KeyAscii = 0 'Si le caractère est le séparateur de décimal mais celui-ci a déjà été saisi, on annule l'appui sur la touche If Chr(KeyAscii) = Separateur And InStr(1, Text, Separateur, vbTextCompare) = 2 Then KeyAscii = 0 End Sub 'récupère le séparateur de décimal dans les options régionales Public Property Get DecimalSeparator() As String Dim nLength As Long Dim nLocale As Long nLocale = GetUserDefaultLCID() nLength = GetLocaleInfo(nLocale, LOCALE_SDECIMAL, vbNullString, 0) - 1 DecimalSeparator = Space$(nLength) GetLocaleInfo nLocale, LOCALE_SDECIMAL, DecimalSeparator, nLength End Property '***Exemple d'utilisation Public Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) Separateur = DecimalSeparator() Call numerique(KeyAscii, TextBox1.Text) End Sub
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.