IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Savez-vous pourquoi j'obtiens cette erreur : La conversion de la chaîne "" en type 'Double' n'est pas valide


Sujet :

VB.NET

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2013
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 53
    Par défaut Savez-vous pourquoi j'obtiens cette erreur : La conversion de la chaîne "" en type 'Double' n'est pas valide
    Salut a tous

    Savez pourquoi j'obtiens cette erreur : La conversion de la chaîne "" en type 'Double' n'est pas valide. (Voir photo ci-dessous)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
     
        ProfitNet.Text = Val(Portefeuille.Text) + ((Portefeuille.Text) * (Variation.Text)) / 100
     
     End Sub
    End Class
    Autre chose: Comment faire pour pré remplir une texbox avec une valeur par défaut ?

    Nom : zzzz.PNG
Affichages : 2076
Taille : 42,9 Ko

  2. #2
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    Bonjour,

    Attention, Val, c'est du VBA ou du VB6, pas du VB.Net. Mais ce n'est pas ce qui cause ton problème.

    Le message d'erreur que tu obtiens indique que un des TextBox est vide.

    Essaie donc ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Try
           ProfitNet.Text = (CType(Portefeuille.Text, Double) + (CType(Portefeuille.Text, Double) * (CType(Variation.Text, Double)) / 100).ToString
    Catch
    End Try
    J'ai placé le calcul dans un bloc Try et tu n'obtiendras plus d'erreur mais si un des TextBox est vide, le résultat que tu obtiendras ne sera pas correct.

    J'espère que ça t'aidera ...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2013
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 53
    Par défaut
    Merci de m'aider...

    Voici le message que j'ai
    Nom : zzzz.PNG
Affichages : 2061
Taille : 21,3 Ko

  4. #4
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    OK, enlève donc le ToString.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Try
           ProfitNet.Text = CType(Portefeuille.Text, Double) + CType(Portefeuille.Text, Double) * CType(Variation.Text, Double) / 100
     
    Catch
    End Try
    J'ai enlevé des parenthèses inutiles compte tenu de la hiérarchie des opérateurs.

    Je viens de faire le test de ton code en VB2010 Express : ça marche. Voici le projet du test VbTest.zip.



    Nom : VBTest.jpg
Affichages : 2056
Taille : 52,8 Ko

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2013
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 53
    Par défaut
    J'ai la version 2010 Express

    Merci il y a plus le message d'erreur mais le résultat ne veut pas s'affiché lorsque je clique sur le bouton 2

  6. #6
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    Oui, j'ai vu ...

    Revois mon message, j'y ai ajouté un projet de test et une illustration.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Février 2013
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 53
    Par défaut
    Merci beaucoup, en faite c'est qui ai fais une erreur.. ça fonctionne très bien..

    Pourquoi lorsque je mets 1,6 ça fonctionne et non 1.6 (avec un point) ?

    Savez vous comment pré remplir une texbox par defaut ?

  8. #8
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    ll faut encoder les valeurs avec le point ou la virgule, selon les paramètres régionaux du système Windows.
    Dans VB, pour les valeurs numériques doivent toujours être écrites avec le point décimal mais dans les TextBox, c'est selon le système.
    Apparemment chez toi, c'est la virgule qui est désignée comme séparateur décimal. Tu peux le vérifier dans les paramètres régionaux.

    Tu peux traiter tous les TextBox.Text qui interviennent dans les calculs par un Replace(",","."), de sorte que cela fonctionne dans tous les cas.

    Ton code devrait-être :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Try
                      ProfitNet.Text = (CType(Portefeuille.Text.Replace(",", "."), Double) + CType(Portefeuille.Text.Replace(",", "."), Double) * CType(Variation.Text.Replace(",", "."), Double) / 100).ToString
    Catch
    End Try
    Bonne soirée,


  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Février 2013
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 53
    Par défaut
    Merci, super ça fonctionne..

    Savez vous comment limité la décimal a 2 chiffre après la virgule ? (j'ai essayé plusieurs truc que j'ai trouvé sur google mais sans succès..)

    Bonne soirée

  10. #10
    Membre extrêmement actif
    Inscrit en
    Avril 2008
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Âge : 65

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 573
    Par défaut
    bonjour

    Le plus simple c'est ceci en vb.net avec la saisie à l'anglaise.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    Imports System.Globalization
     
    Public Class Form1
     
        Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
     
            If String.IsNullOrWhiteSpace(Portefeuille.Text) Then
                Portefeuille.Text = "0"
            End If
            If String.IsNullOrWhiteSpace(Variation.Text) Then
                Variation.Text = "0"
            End If
            Dim ptf As Double = Convert.ToDouble(Portefeuille.Text, CultureInfo.InvariantCulture)
            Dim vtf As Double = Convert.ToDouble(Variation.Text, CultureInfo.InvariantCulture)
     
            ProfitNet.Text = ptf + (ptf * vtf) / 100
        End Sub
     
     
    End Class
    bon code...

  11. #11
    Membre éprouvé
    Homme Profil pro
    Etude technique THT
    Inscrit en
    Juillet 2012
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Etude technique THT
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Juillet 2012
    Messages : 84
    Par défaut
    Une autre façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            Force_Dot()
        End Sub
     
        Public Sub Force_Dot() ' Force la culture à utiliser le point pour les décimales sur l'ensemble du code
     
            Dim oldDecimalSeparator As String = Application.CurrentCulture.NumberFormat.NumberDecimalSeparator
     
            If Not oldDecimalSeparator = "." Then ' Si ce n'est pas un point
                Dim forceDotCulture As Globalization.CultureInfo
                forceDotCulture = CType(Application.CurrentCulture.Clone(), Globalization.CultureInfo)
                forceDotCulture.NumberFormat.NumberDecimalSeparator = "."
                Application.CurrentCulture = forceDotCulture
            End If
        End Sub]
    Vérification que les contrôles sont numériques :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If IsNumeric(Portefeuille.Text) = True And IsNumeric(Variation.Text) = True Then
    ...
    Pour le nombre après la virgule :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim Nb_Decimale As Integer = 2
    ProfitNet.Text = CType(Math.Round(CType(ProfitNet.Text, Double), Nb_Decimale), String)

  12. #12
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    Citation Envoyé par Quicksilvain Voir le message
    Merci, super ça fonctionne..

    Savez vous comment limité la décimal a 2 chiffre après la virgule ? (j'ai essayé plusieurs truc que j'ai trouvé sur google mais sans succès..)

    Bonne soirée
    Bonjour,

    En remplaçant ma ligne de code précédente par celle-ci, tu auras 2 décimales :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ProfitNet.Text = String.Format("{0:##0.00}", (CType(Portefeuille.Text.Replace(",", "."), Double) + CType(Portefeuille.Text.Replace(",", "."), Double) * CType(Variation.Text.Replace(",", "."), Double) / 100))
    En t'informant sur String.Format("{0:##0.00}", UneValeurNumérique), tu trouveras d'autres possibilités de formatage.

    Bonne journée,


  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Février 2013
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 53
    Par défaut
    Bonjour, encore merci ça fonctionne parfaitement..

    Merci a tous de m'avoir aider dans ce superbe forum

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 02/10/2014, 12h50
  2. [Débutant] Erreur La conversion de la chaîne "" en type 'Double' n'est pas valide.
    Par dragondu83 dans le forum VB.NET
    Réponses: 5
    Dernier message: 24/07/2014, 20h06
  3. Réponses: 14
    Dernier message: 08/01/2013, 22h36
  4. Réponses: 11
    Dernier message: 13/04/2011, 14h06
  5. [Formulaire ]: pourquoi j'ai cette erreur?!
    Par said2n dans le forum IHM
    Réponses: 1
    Dernier message: 06/07/2008, 19h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo