La conversion de la chaîne "" en type 'Double' n'est pas valide

Résolu/Fermé
kikou93 Messages postés 416 Date d'inscription mardi 4 février 2014 Statut Membre Dernière intervention 24 septembre 2018 - 19 juil. 2016 à 21:19
kikou93 Messages postés 416 Date d'inscription mardi 4 février 2014 Statut Membre Dernière intervention 24 septembre 2018 - 20 juil. 2016 à 22:14
Bonjour,
ça faisait longtemps que je n'ai pas poser des questions (j'étais trés occupée avec mes études)
j'utilise Visual basic express 2010
je vous explique mon problème et j'espère que quelqu'un pourrait m'aider
j'ai par exemple la condition suivante :
If TextBox1.Text > 0 Then
.....
End if
mais il affiche l'erreur suivante :
La conversion de la chaîne "" en type 'Double' n'est pas valide
j'ai essayer avec :
If CInt(TextBox.Text) > 0
If Val(TextBox.Text) > 0
ça marche, aucun erreur ne s'affiche
mais le problème et que si textBox1.text = 0,009 La valeur qui est prise en compte et 0 et pas 0,009
normalement la condition est vérifiée
J'ai essayé aussi avec :
If CDbl(TextBox.Text) > 0
mais la même erreur s'affiche (La conversion de la chaîne "" en type 'Double' n'est pas valide)
aidez-moi s'il vous plait et merci d'avance pour votre aide

3 réponses

Utilisateur anonyme
19 juil. 2016 à 21:52
Bonsoir,

Si ton pic est configuré pour que le point soit le symbole décimal alors 0,009 n'est pas un nombre, 0.009 oui.

A la place de Cquelquechose, utilse la classe Convert, tu pourras choisir quel est le modèle de nombre à utiliser
1
Utilisateur anonyme
19 juil. 2016 à 22:02
Dim toto As Double = Convert.ToDouble("0,009", CultureInfo.GetCultureInfo("fr-FR"))
0
kikou93 Messages postés 416 Date d'inscription mardi 4 février 2014 Statut Membre Dernière intervention 24 septembre 2018 1
19 juil. 2016 à 22:21
merci de m'avoir répondu aussi rapidement
j'ai configuré la textBox comme suite :
Dim desNuméro() As Char = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"}
Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
If Not desNuméro.Contains(e.KeyChar) And Not Asc(e.KeyChar) = 8 Then
e.Handled = True
End If
If e.KeyChar = "."c Or e.KeyChar = ","c Then
e.Handled = True
If Not (TextBox1.Text.Contains(",")) Then TextBox1.AppendText(",")
End If
End Sub
pour que la textBox accepte seulement les numéro (0, 1, 2, 3, 4, 5, 6, 7, 8,9) et la virgule
alors le symbole décimal est la virgule et non le point
même si je tape sur la touche du point, dans la textBox x'est la virgule que s'affiche
0
kikou93 Messages postés 416 Date d'inscription mardi 4 février 2014 Statut Membre Dernière intervention 24 septembre 2018 1
19 juil. 2016 à 22:28
Dim toto As Double = Convert.ToDouble("0,009", CultureInfo.GetCultureInfo("fr-FR"))

je ne c pas si cette méthode marche mais sa ne me facilite pas le travaille car la condition que j'ai contient beaucoup de textBox :
If textBox1.text >0 and textBox2.text>0 and textBox3.text>0 .... and textBox30.text>0 then
.........
End if
0
NHenry Messages postés 15163 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 1 novembre 2024 345
19 juil. 2016 à 23:04
Active Option Strict et Option Explicit dans ta configuration de VB.NET (ou dans les options de ton projet) et corrige les erreurs de conversions qui vont apparaitre.
Retires aussi l'import automatique de l'espace de nom "Microsoft.VisualBasic".
0
kikou93 Messages postés 416 Date d'inscription mardi 4 février 2014 Statut Membre Dernière intervention 24 septembre 2018 1
20 juil. 2016 à 09:48
si j'ajoute Active Option Strict et Option Explicit, ça me crée des centaines d'erreurs,
j'ai décidé d'appliquer la méthode de Whismeril
merci de m'avoir consacré du temps, merci beaucoup
0
Utilisateur anonyme
19 juil. 2016 à 23:44
Et en plus des conseils de NHenry (bonjour) n'utilise pas d'accents, ou autre modificateur de lettre dans les noms de variable ou fonction.
Si tu dois ouvrir ton projet sur un ordinateur anglais, ça boguera de partout.

je ne c pas si cette méthode marche mais sa ne me facilite pas le travaille car la condition que j'ai contient beaucoup de textBox


je t'ai montré la voie, pas la solution pile poil adaptée à ton cas.

Tu pourrais écrire une fonction que tu appellerais pour chaque TextBox, tu peux aussi faire une méthode d'extension.

Mais si tu appliques exactement ce code, "0.009" ne serait pas accepté
Il y aurait ça
Dim texte as String  = "0,009"
Dim toto As Double = Convert.ToDouble(texte.Replace(",","."), CultureInfo.GetCultureInfo("fr-FR"))

Ce qui permettrait d'accepter "0,009" ou "0.009", mais un grand nombre avec séparation des milliers américaine "1,000,000.001" ne marcherait pas.

Y'a un moment ou il te faudra figer le format d'entrer en utilisant la validation par exemple
1
kikou93 Messages postés 416 Date d'inscription mardi 4 février 2014 Statut Membre Dernière intervention 24 septembre 2018 1
20 juil. 2016 à 09:44
Merci Whismeril j'ai utilisé ta méthode et je l'ai appliqué pour chaque TextBox
même si ç'est long l'essentiel est que ca marche trés bien etet sont aucun problème
Merci pour ton aide tu m'a beaucoup aidé
0
NHenry Messages postés 15163 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 1 novembre 2024 345
19 juil. 2016 à 21:48
Ben avec "0.009" ça passe ou pas ?

Avec .NET, il y a double.Parse qui permet d'accepter d'autres cultures que celle du système pour les décimales .
0
kikou93 Messages postés 416 Date d'inscription mardi 4 février 2014 Statut Membre Dernière intervention 24 septembre 2018 1
19 juil. 2016 à 22:23
merci de m'avoir répondu aussi rapidement
en vérité la valeur est de 0,975 normalement ça passe, mais ce ne pas le cas
0