Séparateur de milliers et nombres décimaux VBA

Bonjour à tous,

Pas moyen d'obtenir séparateur de milliers une fois avoir saisi un nombre décimal
et Excel considère les valeurs en non numérique

Exemple

Je saisis 1000:
Affichage après touche entrée dans mon formulaire: 1 000,00
Affichage dans Excel: 1 000,00 mais non reconnu comme valeur numérique
je saisis 1000,2:

Affichage après touche entrée dans mon formulaire: 1000,2
Je n'ai pas 2 chiffres après la virgule et plus de séparateur de milliers
Affichage dans Excel: 1000,2 mais non reconnu comme valeur numérique
je saisis 1000,20:
affichage après touche entrée dans mon formulaire: 1000,20
plus de séparateur de milliers
Affichage dans Excel: 1000,20 mais non reconnu comme valeur numérique

Je vous joins mon fichier
et merci à Steelson et Xmenpl pour leur précédente contribution
Si pas de solution, je m'orienterai vers un onglet de saisie comme proposé par Steelson

PS: je suis en Excel 2003 !!

54classeur1.xls (41.00 Ko)

Bonjour Eureka,

Je pense que le problème vient de tons installation du pack Office, as-tu essayé une réparation ?

@+

Salut Steelson

Décidément... tu veux le vendre ton formulaire sur feuille

Bonjour BrunoM45,

Ce code fonctionne chez toi ?

Bonjour toutes et tous

il est super pratique ton formulaire Steelson no soucy je l'ai adopté

coucou Bruno45 et Steelson

@Eureka007

sur ma version 2016 d'Excel ton classeur fonctionne, j'ai la textbox ou la barre clignotante se trouve sur la droite, après, je ne sais pas si cela provient de là (cela m'étonnerait)

crdlt,

André

Bonjour André,

Donc l'affichage est correct en nombre entier et décimal dans le formulaire et Excel les prend bien en numérique ?

Le curseur à droite, j'ai juste mis un alignement.

Je vais tenter une réparation de mon pack Office comme le préconise Bruno

Bonjour à tous,

moi je me méfie des conversions automatiques.

Et avec :

Private Sub commandbutton1_Click()
Range("e9") = CDbl(TextBox1.Value)
End Sub

?
eric

Bonjour Eriiic,

Merci, cela fonctionne exactement comme je le souhaitais, c'est cool

Private Sub textbox1_afterupdate()
TextBox1.Value = Format(TextBox1, "# ##0.00")
End Sub

Private Sub textbox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
'saisie unique de chiffres
   If InStr("1234567890-,.", Chr(KeyAscii)) = 0 Then KeyAscii = 0
   If KeyAscii = 46 Then KeyAscii = 44
End Sub
Private Sub commandbutton1_Click()
Range("e9") = CDbl(TextBox1.Value)
End Sub
Private Sub commandbutton2_Click()
Unload Me
UserForm1.Show
End Sub
39classeur1.xls (41.00 Ko)

Merci, cela fonctionne exactement comme je le souhaitais, c'est cool

Private Sub textbox1_afterupdate()
TextBox1.Value = Format(TextBox1, "# ##0.00")
End Sub<br>

Après réparation de ton pack office ?

J'ai beaucoup investigué le sujet, et dans mon cas cela ne fonctionne pas, je n'ai pas le séparateur des milliers, grrr

J'ai remarqué un chose : les événements

Private Sub TextBox1_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
    MsgBox "Before"
    Cancel = False
End Sub

Private Sub TextBox1_AfterUpdate()
    MsgBox "After"
End Sub

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    MsgBox "Exit"
    Cancel = False
End Sub

se produisent successivement et dans cet ordre là quand on change de focus, on quitte le textbox. Et donc je n'arrive pas à faire fonctionner le update comme préconisé !

tu as bien mis la fonction de conversion cdbl . moi c'est placé dans le commandbutton_click(

CDbl(TextBox3.Value)    

Une question:
je voudrais qu'à l'ouverture de mon formulaire apparaisse "Sélectionnez"dans mes combobox, puis quand on clique sur la flèche, cela s'efface au profit de ma liste déroulante ??
pour le click sur la flèche, j'ai trouvé cela

Private Sub ComboBox1_DropButtonClick()
ComboBox1.Value = ""
End Sub

Pour "sélectionnez": combobox1.additem "additem" ne fait pas ce que je veux

J'ai effectivement aussi fait une réparation du pack Office

Steelson,

et une saisie manuelle avec une cellule ayant le bon format ne te met pas non plus les espaces ?
N'oublie pas qu'il y a une case à cocher dans le format pour les avoir.
eric

Pour ma dernière question, j'ai pris la décision (pour l'instant) de mettre mon "Sélectionnez" dans text des propriétés du combobox.
ça me déplait car le curseur est visible, du coup on peut saisir ce que l'on veut, et si pas dans la liste, message d'erreur de Microsoft Forms !!

Bonjour Eriiic

et une saisie manuelle avec une cellule ayant le bon format ne te met pas non plus les espaces ?

N'oublie pas qu'il y a une case à cocher dans le format pour les avoir.

je ne connais pas ! il s'agit bien d'un textbox ! peux-tu me faire une copie d'écran ?

Au final, j'y arrive quand même avec cette solution

Private Sub CommandButton1_Click()
    Range("B2") = CDbl(TextBox1.Value)
    'Range("B2") = Replace(Replace(TextBox1.Value, ",", "."), " ", "")
    Me.Hide
End Sub

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    If InStr("0123456789.,", Chr(KeyAscii)) = 0 Then KeyAscii = 0
    If KeyAscii = Asc(".") Then KeyAscii = Asc(",")
    If InStr(TextBox1, ",") > 0 And KeyAscii = Asc(",") Then KeyAscii = 0
    If Len(Split(TextBox1 & ",0", ",")(1)) > 1 Then KeyAscii = 0
End Sub

Private Sub TextBox1_Change()
    Application.EnableEvents = False
        If InStr(TextBox1.Value, ",") = 0 Then
            entier = Replace(TextBox1.Value, " ", "")
            x = ""
            For i = Len(entier) To 1 Step -1
                x = Mid(entier, i, 1) & x
                If ((Len(entier) - i + 1) Mod 3 = 0) Then x = " " & x
            Next
            On Error Resume Next ' effacement
            TextBox1.Value = IIf(Left(x, 1) = " ", Mid(x, 2, Len(x) - 1), x)
        End If
    Application.EnableEvents = True
End Sub

Bonjour Eriiic,

Merci, cela fonctionne exactement comme je le souhaitais, c'est cool

Private Sub textbox1_afterupdate()
TextBox1.Value = Format(TextBox1, "# ##0.00")
End Sub

Private Sub textbox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
'saisie unique de chiffres
   If InStr("1234567890-,.", Chr(KeyAscii)) = 0 Then KeyAscii = 0
   If KeyAscii = 46 Then KeyAscii = 44
End Sub
Private Sub commandbutton1_Click()
Range("e9") = CDbl(TextBox1.Value)
End Sub
Private Sub commandbutton2_Click()
Unload Me
UserForm1.Show
End Sub

Mais tu n'interdis pas de mettre 2 fois la virgule et mettre plus de 2 décimales.

Bonjour à tous,

Steelson, moi je n'ai proposé que d'ajouter Cdbl() pour l'inscription en numérique sur feuille.
Pour ton textbox je n'ai pas regardé.

2020 10 31 09 21 25

Ce qui en format personnalisé donne : # ##0.00
eric

ok merci eriiic ma question portait sur le textbox mais qui ne peut être que textuel (je pensai que tu avais déniché une trouvaille)

Chez moi ça fonctionne dans le textbox aussi.
Tu pourrais tenter en forçant la conversion :

TextBox1.Value = Format(cdbl(TextBox1), "# ##0.00")

eric

Rechercher des sujets similaires à "separateur milliers nombres decimaux vba"