Saisie confortable de montants en euros sans pavé numérique

J'utilise un PC portable (sans pavé numérique) et je dois saisir des montants en euros dans un textbox. Comment faire pour ne pas avoir à activer la touche majuscules au moment de la saisie des nombres et pour que le séparateur décimal soit entré par les touches , ou . ceci que la touche majuscule soit ou non activée ?

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 Function

Auteurs : , , , , ,

Mots clefs associés à cette page : , , , ,