Nombre avec virgule non reconnu dans Excel

Bonjour,

Malgré mes recherches, pas moyen de trouver, alors je fais appel à vous tous.
Voici mon code très simple:

Private Sub textbox2_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()
Dim derligne As Integer
Sheets("Février").Select
derligne = Sheets("Février").Range("a65536").End(xlUp).Row + 1
Cells(derligne, 5) = TextBox2.Value
Unload UserForm2
UserForm2.Show
End Sub

Lorsque je saisis un nombre entier, c'est correct
Lorsque je saisis un nombre avec virgule, Excel le considère comme du texte !
Ensuite, comment faire afficher ce nombre avec séparateur de milliers et 2 chiffres après la virgule dans mon formulaire ?

Merci d'avance pour votre précieuse aide

Bonjour, et bienvenue, tu es sur le bon forum !

tape ton nombre avec une virgule et interprète le comme suit

Cells(derligne, 5) = Replace(TextBox2.Value, ",", ".")

de toute façon, avec un userform, c'est toujours du texte ! alors si tu peux, remplace le userform par un onglet dédié à la saisie tu n'auras pas ce genre de problème (et encore ! on n'a pas de dat ici)

Merci Steelson, je vais essayer cela ce soir.

Une idée pour le séparateur de millier, je souhaiterais un affichage dans mon formulaire du style " 0,00"

Une idée pour le séparateur de millier, je souhaiterais un affichage dans mon formulaire du style " 0,00"

Ah oui j'ai une idée, et une seule ... utiliser un onglet dédié à la saisie, tu auras toute latitude pour ce qui est des formats.

C'est possible sur userform, mais là, faut que je bidouille comme toujours avec les usf.

Pour la version usf

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
End Sub

J'ai testé pour les valeurs envoyées à Excel, c'est parfait, les nombres sont bien reconnus comme numérique, cool et merci.
Par contre, je ne trouve toujours pas de solution pour afficher ma valeur comme ceci: 1000,00 dans mon formulaire
J'ai essayé ceci:

Private Sub textbox2_afterupdate()
TextBox2.Value = Format(TextBox2, "# ##0.00")
End Sub

L'affichage dans mon formulaire est bon, mais du coup Excel le considère comme du texte !!
Si tu peux bidouiller quelque chose...

PS: je suis en Excel 2003 (eh oui !!!), pas moyen d'ouvrir les fichiers .xlsm

Est-ce que tu peux ouvrir celui-ci ?

J'ai aussi ajouté une limitation à 2 décimales. Par contre je n'ai pas le séparateur des milliers (faut que je regarde)

Bonjour, pour l'affichage des espaces dans la textbox

Puisque la Texbox2 est avec virgule au moment du "afterupdate"

En reprenant l'idée de Steelson : Transformer en nombre , Afficher le bon format et enfin Remplacer de nouveau le point par la virgule.

Private Sub TextBox2_afterupdate()
X = Replace(TextBox2.Value, ",", ".")
X = Format(X, "# ##0.00")
TextBox2.Value = Replace(X, ".", ",")
End Sub

@ Xmenpl : chez moi, cette astuce n'a jamais fonctionné ! je ne sais pas pourquoi, si tu as une raison ...

Re, Steelson Non je ne sais pas pourquoi çà ne fonctionne pas de ton coté ? sur un excel 2013 aussi

La saisie de départ est bien avec virgule ?

Ben, le problème est que je ne vois toujours pas le séparateur des milliers que je cherchais à mettre.

Par contre je n'ai pas le séparateur des milliers (faut que je regarde)

Bizarre aprés textbox update moi j'ai !

avant textbox update apres textbox update

Bizarre bizarre ...

capture d ecran 199

Bonjour Steelson et Xmenpl,

Merci pour vos recherches.
Steelson, j'arrive à ouvrir le fichier .xls.

J'ai apporté vos modifications, voilà ce que cela donne:

Exemple:
Nombre saisi: 100
Validation dans formulaire (touche entrée): 100,00
Affichage dans Excel: 100,00 reconnu en valeur numérique
Nombre saisi: 100,2
Validation dans formulaire (touche entrée): 100,2 (manque 1 décimale du coup)
Affichage dans Excel: 100,20 reconnu en valeur numérique
Nombre saisi: 1000
Validation dans formulaire (touche entrée): 1 000,00
Affichage dans Excel: 1 000,00 reconnu en texte
Nombre saisi: 1000,2
Validation dans formulaire (touche entrée): 1 000,2 (manque 1 décimale du coup)
Affichage dans Excel: 1 000,20 reconnu en valeur numérique
Nombre saisi: 1000,25
Validation dans formulaire (touche entrée): 1 000,25
Affichage dans Excel: 1 000,25 reconnu en valeur numérique

je vous remets mon code complet

TextBox2 = Replace(TextBox2.Value, ",", ".")
TextBox2 = Format(TextBox2, "# ##0.00")
TextBox2.Value = Replace(TextBox2, ".", ",")
End Sub

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

Private Sub CommandButton1_Click()
Dim derligne As Integer
Sheets("Février").Select
derligne = Sheets("Février").Range("a65536").End(xlUp).Row + 1
Cells(derligne, 5) = Replace(TextBox2.Value, ",", ".")
Unload UserForm2
UserForm2.Show
End Sub

PS: sur un tuto, j'avais trouvé cela

If KeyAscii = 46 Then KeyAscii = 44

Merci encore pour votre implication

Nombre saisi: 1000
Validation dans formulaire (touche entrée): 1 000,00
Affichage dans Excel: 1 000,00 reconnu en texte

Essaie alors avec

Cells(derligne, 5) = replace(Replace(TextBox2.Value, ",", ".")," ","") * 1

sinon oublie la première partie de ton code qui est du reste tronquée ici (ce serait dommage car j'aime bien l'espace même si je n'arrive pas à l'afficher chez moi)

Bonjour Steelson,

j'ai essayé la ligne de code avec ou sans ma première partie de code (textbox2_afterupdate)

Plus du tout de séparateur de milliers (formulaire et Excel)
Ne fonctionne pas avec des nombres décimaux
Erreur d'exécution 13
Incompatibilité de type

Un vrai casse tête ma demande !!!

OK

avant de reproter vers la zone, il faut remettre le point (pftt, travailler avec des usf c'est pas de la tarte)

Replace(TextBox1.Value, ",", ".")

code complet pour cet exemple

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

    Range("B2") = Replace(TextBox1.Value, ",", ".")

End Sub

essaie de rajouter maintenant le séparateur des milliers (je n'arrive pas à le faire fonctionner chez moi)


Un vrai casse tête ma demande !!!

Le vrai casse-tête ce sont les données date et numériques dans les usf ! Comme évoqué plus haut

Une idée pour le séparateur de millier, je souhaiterais un affichage dans mon formulaire du style " 0,00"

Ah oui j'ai une idée, et une seule ... utiliser un onglet dédié à la saisie, tu auras toute latitude pour ce qui est des formats.

j'ai essayé ton USF, dans Excel, un chiffre avant la virgule est retiré:
Je tape: 1000, 20
J'obtiens: 100,20 reconnu en numérique

Peux tu me mettre le code complet que tu veux que je teste, avec séparateur de milliers, que ça compile avec les bons outils,
j'avoue que je suis un peu perdu avec ces ajouts/suppression de lignes !!

C'est quoi ton idée, sinon:

Ah oui j'ai une idée, et une seule ... utiliser un onglet dédié à la saisie, tu auras toute latitude pour ce qui est des formats.

Mon projet, avec ce formulaire, est d'alimenter un tableau de 8 colonnes
Les données doivent s'insérer ligne après ligne

Je tape: 1000, 20
J'obtiens: 100,20 reconnu en numérique

Je tape 1000,20, il me mets 1 000,20 en numérique

Pour la solution onglet dédié en remplacement d'un usf, as-tu un embryon visible de ton projet ? sinon voici un exemple https://www.excel-pratique.com/fr/telechargements/utilitaires/excel-formulaire-no438

capture d ecran 205

Je vais regarder à ta solution.
Je te mets mon fichier avec projet formulaire

C'est un modèle que j'utilise sans formulaire, je souhaitais l'améliorer avec un formulaire de saisie.

Merci pour tout

Rechercher des sujets similaires à "nombre virgule reconnu"