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 :

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


Sujet :

VB.NET

  1. #1
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 257
    Points : 57
    Points
    57
    Par défaut La conversion de la chaîne " " en type 'Double' n'est pas valide
    , j'ai une fonction qui permet de mettre le format d'un montant sous la forme 125,125. Mais en essayant d'exécuter le code, il me sort le msg "La conversion de la chaîne " " en type 'Double' n'est pas valide". Voici le code de ma fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Const FORMAT_CURRENCY = "#,###,###,##0.###############;(#,###,###,##0.###############)"
    Function MonFormat(ByVal Value As Double, ByVal NbDec As VariantType) As String
            Dim Dec As String
            Dim F As String
            Dec = ""
            If Val(NbDec) = "" Then
                MonFormat = Format(CDec(Value), FORMAT_CURRENCY)
            Else
                If Val(NbDec) > 0 Then Dec = "." & String.Format(NbDec, "0")
                F = "#,###,###,##0" & Dec & ";(#,###,###,##0" & Dec & ")"
                MonFormat = Format(CDec(Value), F)
            End If
        End Function
    Et voici où l'erreur vient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    If Val(NbDec) = "" Then
    J'ai besoin d'aide pour voir d'où provient le pb et comment le corriger?

  2. #2
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2005
    Messages
    65
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2005
    Messages : 65
    Points : 64
    Points
    64
    Par défaut
    Normal, tu essaies de comparer le retour de Val() (Double), avec "" (String).

  3. #3
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 257
    Points : 57
    Points
    57
    Par défaut
    Comment le corriger?

  4. #4
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2005
    Messages
    65
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2005
    Messages : 65
    Points : 64
    Points
    64
    Par défaut
    Ben ça dépend de ce que tu veux faire avec ce If, tu peux utiliser un Try Catch pour gérer le cas où Val() n'a pas pu convertir la paramètre que tu lui donnes.
    Et dans le cas où tout se passe bien, gérer le cas où la valeur vaut 0.

  5. #5
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 257
    Points : 57
    Points
    57
    Par défaut
    Je vous explique ce que je veux faire. J'ai par exemple un champ "Montant d'un contrat" et un 2ème champ "Reste à payer". Je veux que lorsque je saisi le montant du contrat, il me met automatiquement le montant tout en respectant les chiffres après la virgule. Si vous connaissez une méthode plus simple que cette fonction, pouvez vous me la donnez? Sinon, comment corriger cette fonction pour qu'elle puisse fonctionner?

  6. #6
    Expert confirmé
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Points : 4 388
    Points
    4 388
    Par défaut
    Bah utilise le type Decimal pour la précision... Je ne vois pas à quoi sert ta fonction compliquée !

    Quel est "l'algorithme" utilisée pour convertir ton "montant d'un contrat" en "restant à payer" ?

  7. #7
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 257
    Points : 57
    Points
    57
    Par défaut
    Voila ce que j'ai mis au niveau du code principal :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Txtmontantc.Text = MonFormat(Txtresteapayer.Text, 3)
    en sachant que "MonFormat" est le nom de la fonction. Est ce que vous connaissez une méthode plus simple?

  8. #8
    Expert confirmé
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Points : 4 388
    Points
    4 388
    Par défaut
    Dans ta fonction il y a plein de convertions implicites !
    Voila je te l'ai corrigé mais je sais pas si c'est les bon type...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
        Const FORMAT_CURRENCY As String = "#,###,###,##0.###############;(#,###,###,##0.###############)"
        Function MonFormat(ByVal Value As Double, ByVal NbDec As VariantType) As String
            Dim Dec As String
            Dim F As String
            Dec = ""
            If Val(NbDec) = 0 Then
                MonFormat = Format(CDec(Value), FORMAT_CURRENCY)
            Else
                If Val(NbDec) > 0 Then Dec = "." & String.Format(NbDec.ToString, "0")
                F = "#,###,###,##0" & Dec & ";(#,###,###,##0" & Dec & ")"
                MonFormat = Format(CDec(Value), F)
            End If
        End Function
    Utilise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Option Strict On 'a placer en haut de ta page
    Option Explicit On
    Voila

  9. #9
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 257
    Points : 57
    Points
    57
    Par défaut
    Voila ce que j'ai fait :
    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
     
    Option Strict On
    Option Explicit On
    Module Module1
        'Const FORMAT_DATEA As Date = CDate("dd/mm/yyyy")
        Const FORMAT_CURRENCY As String = "#,###,###,##0.###############;(#,###,###,##0.###############)"
        Function MonFormat(ByVal Value As Double, ByVal NbDec As VariantType) As String
            Dim Dec As String
            Dim F As String
            Dec = ""
            If Val(NbDec) = 0 Then
                MonFormat = Format(CDec(Value), FORMAT_CURRENCY)
            Else
                If Val(NbDec) > 0 Then Dec = "." & String.Format(NbDec.ToString, "0")
                F = "#,###,###,##0" & Dec & ";(#,###,###,##0" & Dec & ")"
                MonFormat = Format(CDec(Value), F)
            End If
        End Function
    Mais il me sort tjrs le même msg

  10. #10
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 257
    Points : 57
    Points
    57
    Par défaut
    J'ai le msg d'erreur a ce niveau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Txtmontantc.Text = MonFormat(Txtresteapayer.Text, 3)

  11. #11
    Expert confirmé
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Points : 4 388
    Points
    4 388
    Par défaut
    Je ne comprends aps ce que tu veux faire...

    Donne un exemple de ce que tu veux obtenir à partir de ce que tu as tapé.

  12. #12
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 257
    Points : 57
    Points
    57
    Par défaut
    J'ai un champ "Montant du contrat" et un champ "Reste à payer". Je veux que quand je tape par exemple au niveau du champ "Montant du contrat" le chiffre 245,125, le champ "Reste à payer" prend ce chiffre avec les virgules càd 245,125 et non pas 245 seulement.

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 189
    Points : 87
    Points
    87
    Par défaut
    Tu dit que ton erreur vient de là :
    test en enlevant le val() car en fait tu demande à comparer quelque chose de numerique Nbdec avec "" qui n'est pas numérique d'ou un problème de conversion de type

    met simplement NbDec = ""
    sinon il doit bien y avoir une focntion qui teste si une valeur est numérique ou non

    @++
    dubidon

  14. #14
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 257
    Points : 57
    Points
    57
    Par défaut
    Le msg d'erreur que j'ai vient a ce niveau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Txtmontantc.Text = MonFormat(Txtresteapayer.Text, 3)
    J'ai essayé sans val mais ca ne marche pas

  15. #15
    Expert confirmé
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Points : 4 388
    Points
    4 388
    Par défaut
    Citation Envoyé par loverdev
    J'ai un champ "Montant du contrat" et un champ "Reste à payer". Je veux que quand je tape par exemple au niveau du champ "Montant du contrat" le chiffre 245,125, le champ "Reste à payer" prend ce chiffre avec les virgules càd 245,125 et non pas 245 seulement.
    Je vois pas ou est le probleme ??
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim Resultat as Decimal = Cdec(Textbox1.Text) 'récupère la valeur entrée
    Textbox2.Text = Resultat.Tostring 'affecte à la deuxieme textbox la valeur entrée précédemment !
    Et c'est tout !!

  16. #16
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 257
    Points : 57
    Points
    57
    Par défaut
    Merci Aspic, Ca marche impeccablement ton code

  17. #17
    Expert confirmé
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Points : 4 388
    Points
    4 388
    Par défaut
    Citation Envoyé par loverdev
    Merci Aspic, Ca marche impeccablement ton code
    Bah oui !! mais je comprends pas pouquoi vous etes aller vous prendre la tete avec une procédure compliquée !

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

Discussions similaires

  1. [Débutant] la conversion de type 'DbNull' en type 'Double' n'est pas valide
    Par billinfopro dans le forum VB.NET
    Réponses: 2
    Dernier message: 28/09/2014, 01h29
  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. [Débutant] La conversion de la chaîne "" en type 'Double' n'est pas valide.
    Par amine_maximus dans le forum VB.NET
    Réponses: 6
    Dernier message: 09/06/2012, 23h11
  4. Réponses: 6
    Dernier message: 04/07/2011, 15h53
  5. Réponses: 12
    Dernier message: 07/02/2011, 23h01

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