Numerique - Alphanumerique, problème de type
Bonjour,
Voilà, j'ai un petit problème.
J'ai fais un convertisseur de débit (du moins, je suis entrain de le programmer en vba) et je coince au niveau des compatibilités numerique - alphanumerique lors des calculs.
Je m'exlique : quand je rentre un nombre :
- "12", ça marche
- "12,2" ça marche
- "12.2" ça marche PAS !
Les calculs sont simple (multiplications, divisions, rien de bien compliqué)
Avant de venir sur ce forum, j'ai bien évidement cherchée un peu partout sur internet pour trouver la solution. Mais comme je ne comprend pas vraiment, j'ai l'impression que ce que je fais c'est du bidouillage, et sur certain pc, ça marche, sur d'autres non. J'aimerais bien que quelqu'un puisse m'expliquer, que je programme "proprement" et que je ne parte pas sur de mauvaises bases.
Alors j'ai essayée "replace" en transformant le "point" en "virgule", mais au final je ne sais pas si le résultat est numerique ou alphanumerique.
J'ai essayé CDbl
J'ai essayé Val
J'ai essayé CDbl(replace.......)
Quelle est la meilleur solution ?
J'ai lu qu'il était pas top d'utiliser "replace", mais je sais pas pourquoi ....
J'ai mis mon convertisseur (qui est loin d'être fini bien sur).
Le truc c'est que je voudrais aussi interdire la saisie de lettres dans les champs, mais avec certaines des solutions que j'ai énoncé au dessus, je ne peux pas parce que le résultat est converti en lettres.
Je ne pense pas avoir été très clair.
Ce que je voudrais, dans cette exemple, ça serait :
- Permettre à l'utilisateur de saisir soit une virgule, soit un point sans que ça marche "DEBOGAGE" incompatibilité de type, et que ça fonctionne sur tous les ordi. Avoir un format qui me permettrait d'utiliser ensuite "FormatNumber", ou "Format" pour avoir des affichages plus clair.
- Empercher la saise de lettres dans les champs.
C'est difficile quand on est débutant, car j'avoue que là dessus, je ne comprend plus rien avec tous ces formats.
I'm lost
Merci !!
Bonjour ElectricDandy,
Rajoute cette procédure dans le code de l'userform :
Private Sub TextBox1_Change()
On Error Resume Next
separateurDecimal = Application.International(xlDecimalSeparator)
TextBox1 = Replace(Replace(TextBox1, ",", separateurDecimal), ".", separateurDecimal)
If Not IsNumeric(Right(TextBox1, 1)) And Right(TextBox1, 1) <> separateurDecimal _
And Right(TextBox1, 1) <> "" Or (Not IsNumeric(TextBox1) And Right(TextBox1, 1) <> "") Then
MsgBox "Le caractere saisi n'est pas valide"
TextBox1 = Left(TextBox1, Len(TextBox1) - 1)
End If
End SubL'utilisation de FormatNumber et Format devrait ensuite être possible.
Merci beaucoup, je viens de rajouter ça à mon code, ça a l'air de bien marcher.
Je n'ai pas encore testé sur l'ordinateur sur lequel ça ne marchait pas, j'attend le retour de mon collègue avec impatience pour voir si ça marche.
Par contre, j'ai un petit soucis.
J'ai des données négatives dans mes TextBox. Et je pense qu'il reconnait le "-" comme une lettre, et du coup, je ne peut pas mettre de nombre négatif. Comment puis je faire ? Est ce qu'il y a une solution ?
En tout cas, merci beaucoup, juste le petit souci de "-" qui m'inquiète.
Je reviendrais pour dire si ça marche bien sur tous les ordinateurs.
Un grand merci
Je n'avais pas pensé aux nombres négatifs. Ça devrait le faire avec le code suivant :
Private Sub TextBox1_Change()
On Error Resume Next
separateurDecimal = Application.International(xlDecimalSeparator)
TextBox1 = Replace(Replace(TextBox1, ",", separateurDecimal), ".", separateurDecimal)
If Not IsNumeric(Right(TextBox1, 1) & 1) And Right(TextBox1, 1) <> separateurDecimal _
And Right(TextBox1, 1) <> "" Or (Not IsNumeric(TextBox1 & 1) And Right(TextBox1, 1) <> "") Then
MsgBox "Le caractere saisi n'est pas valide"
TextBox1 = Left(TextBox1, Len(TextBox1) - 1)
End If
End SubParfait !
J'ai testé sur l'ordinateur sur lequel ça ne marchait pas, et ça marche nickel !!
Chapeau, en plus, le signe négatif est maintenant accepté grâce à ton dernier code.
ça faisait un petit temps que j'essayais de résoudre le problème sans vraiment y arriver, ou du moins en bidouillant (pis ça marchait quand même pas sur tous les pc).
ça m'enlève un gros stress
Merci, encore une fois, tu me rend un grand service