Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2010 Format Textbox dynamique

cathodique

XLDnaute Barbatruc
Bonjour,

Au fil de mes recherches, j'ai trouvé des codes très intéressants de notre ami @patricktoulon ( que je salue pour sa gentillesse en mp).
Ses codes sont à garder précieusement. Mais je n'ai pas toutes les connaissances pour les adapter à mes attentes.
Je voudrais un masque de saisie suivant: Textbox numérique (2 décimales) avec séparateur de milliers en dynamique et possibilité de retour arrière pour correction faute de frappe.
J'espère que mes explications sont claires.
Bon dimanche.
 

Pièces jointes

  • NUM avec Sep Millier dynamique.xlsm
    18.7 KB · Affichages: 2
Solution
voila
et noyeux joel
VB:
Option Explicit

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
'patricktoulon
'textbox (million millier mille) formaté dynamico aux taper des touches
'la touche (BACK ;retour en arrière) est fonctionnelle  
  Dim v  'j'ai juste ajouté ce dim car le code planté
    With TextBox1
        v = Replace(.Value, " ", "")
        Select Case KeyCode
        Case 96 To 105, 48 To 57
            If KeyCode < 96 Then KeyCode = KeyCode + 48
            If InStr(1, v, ",") > 0 Then
                If Len(Split(v, ",")(1)) = 2 Then KeyCode = 0: Exit Sub
            Else
                'v = v & Chr(KeyCode - 48): KeyCode = 0
                v = Split(Format(v & Chr(KeyCode - 48)...

cathodique

XLDnaute Barbatruc
Bonjour les copains,

Je constate ce matin que je suis en retard sur le fil.
Merci, je teste et surtout essaie de comprendre vos différents codes.
Je reviendrais vers vous si nécessaire.

Toute ma gratitude.
Excellente journée.
 

scraper

XLDnaute Nouveau
Bonjour Cath.
avec une commande replace supplémentaire et mon clavier numérique tout fonctionne
VB:
Private Sub TextBox1_Change()
Dim sep$, pos%
With TextBox1
    If .Text = "" Then Exit Sub
    sep = Application.DecimalSeparator
    .Text= Replace(.Text, ".", sep) 
    If Not IsNumeric(Left(.Text, 1)) Then .Text = "" Else If Not IsNumeric(Right(.Text, 1)) And Right(.Text, 1) <> sep Then .Text = Left(.Text, Len(.Text) - 1)
    pos = InStr(.Text, sep)
    If pos = 0 Then .Text = Format(.Text, "#,##0") Else If Len(Mid(.Text, pos + 1)) > 1 Then .Text = Format(Left(.Text, pos + 2), "#,##0.00")
End With
End Sub
 

Eric C

XLDnaute Barbatruc
Re le forum
Re le fil

Concernant le code de scraper, il suffit de rajouter :
VB:
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
 If (InStr(TextBox1.Value, ",") <> 0 And Chr(KeyAscii) = ",") Then KeyAscii = 0
End Sub

Bonne fin d'après-midi à toutes & à tous
Eric c
 
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…