Saisie confortable de montants en euros sans pavé numérique
Ceci est à mettre dans le code du userform:
Private sub TxtEuro_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) KeyAscii = CheckLaSaisie(TxtEuro, KeyAscii) end sub
Private sub TxtEuro_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean) Me.TxtEuro = Format(Me.TxtEuro, "# ##0.00 €") end sub
Private sub TxtEuro_Enter() ActiveMAJ end sub
Private sub TxtEuro_Exit(ByVal Cancel As MSForms.ReturnBoolean) DesactiveMAJ end sub
Ce qui suit est à mettre dans un module ordinaire : Attention les déclarations doivent être placées en haut du module
Pour activation ou désactivation de la touche Majuscule pour la saisie des chiffres 'constante touche majuscules Const VK_CAPITAL = &H14 'verr num Const VK_NUMLOCK = &H90 'arrêt défil Const VK_SCROLL = &H91 Private Type KeyboardBytes kbByte(0 To 255) As Byte End Type 'Fonction état d'une touche Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer 'Fonction lire état des touches clavier Declare Function GetKeyboardState Lib "user32" (kbArray As KeyboardBytes) As Long 'Fonction définir état des toucvhes clavier Declare Function SetKeyboardState Lib "user32" (kbArray As KeyboardBytes) As Long Dim kbArray As KeyboardBytes, KbOld As KeyboardBytes
Public Sub DesactiveMAJ() 'Macro de désactivation touche MAJ 'si la touche MAJ est active If GetKeyState(VK_CAPITAL) = 1 Then 'récupérer l'état actuel des touches clavier GetKeyboardState KbOld 'appel de turn off pour la touche MAJ TurnOff VK_CAPITAL 'si la touche MAJ n'est pas active on affiche un message d'info Else: MsgBox "La touche MAJ n'est pas active", vbInformation, "MAJ non activée """ End If end sub
Public Sub ActiveMAJ() 'Macro d'activation de MAJ 'si la touche MAJ n'est pas active If GetKeyState(VK_CAPITAL) = 0 Then 'récupérer l'état actuel des touches clavier GetKeyboardState KbOld 'appel de turnon pour la touche MAJ TurnOn VK_CAPITAL 'sinon on affiche un message d'info Else: MsgBox "La touche MAJ est déjà active", vbInformation, "MAJ activée" End If end sub
Public Sub TurnOff(vkKey As Long) 'routine de désactivation de touche (prend en paramètre l'id de la touche) 'appel de la fonction pour lire l'état actuel des touches GetKeyboardState kbArray 'définition de la valeur 0 (zéro) pour la désactivation kbArray.kbByte(vkKey) = 0 'définition de l'état du clavier SetKeyboardState kbArray end sub
Public Sub TurnOn(vkKey As Long) 'routine d'activation de touche (prend en paramètre l'id de la touche) 'appel de la fonction pour lire l'état actuel des touches GetKeyboardState kbArray 'définition de la valeur 1 (un) pour l'activation kbArray.kbByte(vkKey) = 1 'définition de l'état du clavier SetKeyboardState kbArray end sub
Function CheckLaSaisie(Textbox As MSForms.Textbox, ByVal Char As Integer)
Dim SepDec As String, A As Integer
SepDec = Application.International(xlDecimalSeparator)
A = InStr(1, Textbox, SepDec, vbTextCompare)
If Char = 44 Or Char = 46 Or Char = 59 Or Char = 63 Then
If A > 0 Then
CheckLaSaisie = 0
Else
CheckLaSaisie = Asc(SepDec)
End If
Else
If Char < 48 Or Char > 58 Then
CheckLaSaisie = 0
Else
If Len(Textbox) - A = 2 And A <> 0 Then
CheckLaSaisie = 0
Else
CheckLaSaisie = Char
End If
End If
End If
End FunctionAuteurs : isabelle, Ilan, Papou, Michel Pierron, Frédéric Sigonneau, Denis Michon
Mots clefs associés à cette page : euro, pavé, numérique, saisir, textbox
- Vous devez vous identifier ou créer un compte pour écrire des commentaires
