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 :

Pb de calcul


Sujet :

VB.NET

  1. #1
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 257
    Par défaut Pb de calcul
    Salut, j'ai un pb de calcul d'un montant. Je vous explique : j'ai un champ "montant du contrat", un champ "réalisation du 1er trimestre", un champ "total réalisation" et un champ "reste à payer". Je veux que lorsque je met un montant au niveau du champ "réalisation du 1er trimestre" il me met automatiquement le montant du "reste à payer" (reste à payer = montant du contrat - total réalisation) tout en respectant les chiffres après la virgule. voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Private Sub Txtrea1ertrim_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Txtrea1ertrim.TextChanged
            Txtrea1ertrim.Text = Txtrea1ertrim.Text.Replace(".", ",")
            Txtrea1ertrim.Select(Txtrea1ertrim.Text.Length, 0)
            Dim r As Double
            r = Val(Txtmontantc.Text) - Val(Txttotalrea.Text)
            Dim res As [Decimal] = (r)
            Txtresteapayer.Text = res.ToString
        End Sub
    Mais ca ne marche pas

  2. #2
    Membre éclairé
    Inscrit en
    Mars 2006
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 342
    Par défaut
    Salut,

    suis surement pas le mieux placer pour te repondre car je suis suis quiche . Mais je pense que tu ne peux pas faire d operation sur tes .text ils te faut declarrer des variables, leur affecter les valeurs contenues dans les textbox et faire les operations sur c variables.

    Mais je dis ptet une grosse connerie

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 257
    Par défaut
    Même en utilisant des variables au lieu des textbox ça ne marche pas

  4. #4
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    j'ai pas compris où tu bloques, c'est quoi qui ne marche pas ?
    sinon decimal est mieux que double
    cdec est mieux que val

    => dim valeur as decimal = cdec(str1) - cdec(str2)
    si tu veux fixer le nombre de chiffres après la virgule utilise format
    textboxresultat = format(valeur,monformat)

    si tu veux arrondir avant le calcul : cdec(round(cdec(str1)))
    round est dans system.math
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 257
    Par défaut
    Voilà ce que j'ai essayé de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Private Sub Txtrea1ertrim_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Txtrea1ertrim.TextChanged
            Txtrea1ertrim.Text = Txtrea1ertrim.Text.Replace(".", ",")
            Txtrea1ertrim.Select(Txtrea1ertrim.Text.Length, 0)
            Dim resultat As [Decimal] = CDec(Txtmontantc.Text) - CDec(Txttotalrea.Text)
            Txtresteapayer.Text = resultat.ToString
        End Sub
    Mais il me sort un msg d'erreur au niveau de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     Dim resultat As [Decimal] = CDec(Txtmontantc.Text) - CDec(Txttotalrea.Text)
    Le msg d'erreur est le suivant : "La conversion de la chaîne " " en type 'Decimal' n'est pas valide"

  6. #6
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 257
    Par défaut
    C'est bon j'ai trouvé mon erreur
    Voici le code après correction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     Private Sub Txtrea1ertrim_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Txtrea1ertrim.TextChanged
            Txtrea1ertrim.Text = Txtrea1ertrim.Text.Replace(".", ",")
            Txtrea1ertrim.Select(Txtrea1ertrim.Text.Length, 0)
            Dim r As [Decimal] = CDec(Txtmontantc.Text)
            Dim res As [Decimal] = CDec(Txtrea1ertrim.Text)
            Dim resultat As [Decimal] = CDec(r) - CDec(res)
            Txtresteapayer.Text = resultat.ToString
        End Sub
    Merci à tous

  7. #7
    Membre Expert
    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
    Par défaut
    Encore des erreurs des conversions je te conseille de mettre le options strict et explicit sinon tu va te planter tout le temps...

    Sinon pourquoi des crochets autour de Decimal
    Qui ne tente rien n'a rien !
    Ce qui ne nous tue pas nous rends plus fort !!
    Mon projet ZELDA en C++/Allegro
    http://www.tutoworld.com - Le Forum -
    Mes ressources Dotnet (cours, sources, tutos)
    --------------------------------------------
    + + =

    Ne pas oublier le Tag !

  8. #8
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    et pourquoi des replaces et autre trims ? ptete que cdec s'occupe de tout ...

    et faire une interception d'erreur aussi, si ce qui est tapé n'est pas un nombre ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  9. #9
    Membre Expert
    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
    Par défaut
    Tien je t'es corrigé ton code si tu veux car c'est vraiment bizarre et pas optimisé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Txtrea1ertrim_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Txtrea1ertrim.TextChanged
            Txtrea1ertrim.Text = Txtrea1ertrim.Text.Replace(".", ",")
            Dim r As Decimal = CDec(Txtmontantc.Text)
            Dim res As Decimal = CDec(Txtrea1ertrim.Text)
            Dim resultat As Decimal = r - res 'deja en decimal donc pas besoin de "Cdec"
            Txtresteapayer.Text = resultat.ToString 'affiche le resultat en String
        End Sub
    En esperant t'avoir aidé un peu .
    Qui ne tente rien n'a rien !
    Ce qui ne nous tue pas nous rends plus fort !!
    Mon projet ZELDA en C++/Allegro
    http://www.tutoworld.com - Le Forum -
    Mes ressources Dotnet (cours, sources, tutos)
    --------------------------------------------
    + + =

    Ne pas oublier le Tag !

  10. #10
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Par défaut
    Pourquoi cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Txtrea1ertrim.Text = Txtrea1ertrim.Text.Replace(".", ",")
    Je veux dire, si l'utilisateur veut saisir des points comme séparateur décimal, c'est son droit. C'est à toi de gérer la culture et la langue de ton application.
    ça ne te viendrait pas à l'idée de forcer le clavier d'un utilisateur allemand à se comporter comme un clavier AZERTY ? non ? Et bien pourquoi le forcer à saisir des virgules ?
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  11. #11
    Membre Expert
    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
    Par défaut
    C'est a cause du Decimal, je pense qu'il n'accepte que les nombres avec des virgules et non des points...

    De toute maniere il devrais faire une vérification de la saisie de l'utilisateur dans un try catch car si je tape "Cool" dans son champs ca va planter completement.
    Qui ne tente rien n'a rien !
    Ce qui ne nous tue pas nous rends plus fort !!
    Mon projet ZELDA en C++/Allegro
    http://www.tutoworld.com - Le Forum -
    Mes ressources Dotnet (cours, sources, tutos)
    --------------------------------------------
    + + =

    Ne pas oublier le Tag !

  12. #12
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 257
    Par défaut
    A quel niveau je met le try catch et qu'est ce que je doit mettre au niveau du try catch? pouvez vous me donner un exemple?

  13. #13
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 257
    Par défaut
    C'est bon j'ai trouvé! Voila ce que j'ai mis :
    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
     
    Private Sub Txtmontantc_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Txtmontantc.TextChanged
     
            Try
                Txtmontantc.Text = Txtmontantc.Text.Replace(".", ",")
                Txtmontantc.Select(Txtmontantc.Text.Length, 0)
                If Txtmontantc.Text = "" Then
                    Txtmontantc.Text = ""
                    Txtresteapayer.Text = ""
                Else
                    Dim resultat As [Decimal] = CDec(Txtmontantc.Text)
                    Txtresteapayer.Text = resultat.ToString
                End If
            Catch ex As Exception
                MsgBox("Vous devez siair une valeur monétaire")
            End Try
        End Sub

  14. #14
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    Citation Envoyé par loverdev
    C'est bon j'ai trouvé! Voila ce que j'ai mis :
    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
     
    Private Sub Txtmontantc_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Txtmontantc.TextChanged
     
            Try
                Txtmontantc.Text = Txtmontantc.Text.Replace(".", ",")
                Txtmontantc.Select(Txtmontantc.Text.Length, 0)
                If Txtmontantc.Text = "" Then
                    Txtmontantc.Text = ""
                    Txtresteapayer.Text = ""
                Else
                    Dim resultat As [Decimal] = CDec(Txtmontantc.Text)
                    Txtresteapayer.Text = resultat.ToString
                End If
            Catch ex As Exception
                MsgBox("Vous devez siair une valeur monétaire")
            End Try
        End Sub


    le try catch est surtout fait pour les lignes pouvant générer des erreurs
    en l'occurence les cdec() avec une chaine de caractère vide, pas le reste
    donc tu replaces ta virgule si tu veux
    puis try transformations en decimal
    catch
    exit sub
    end try
    machin = r - r2

    sur le catch ne fait pas de msgbox car tu es sur un evenement textchanged, l'utilisateur a ptete pas fini de taper son nombre
    par contre tu peux bloquer des boutons qui font le traitement vu que c'est pas encore un nombre et débloquer une fois que c'est bon

    sinon quand on veut un nombre dans un textbox, on interdit à l'utilsateur de taper autre chose qu'un nombre ... (masquedtextbox y parrait)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  15. #15
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 257
    Par défaut
    Pouvez vous me l'expliquer d'avantage par un exemple SVP

  16. #16
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    dequoi donc ? le filtre sur le textbox pour avoir que des nombres ?
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  17. #17
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 257
    Par défaut
    Un exemple de ce que vous avez dis precedemment

  18. #18
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    Citation Envoyé par loverdev
    C'est bon j'ai trouvé! Voila ce que j'ai mis :
    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
     
    Private Sub Txtmontantc_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Txtmontantc.TextChanged
     
            Try
                Txtmontantc.Text = Txtmontantc.Text.Replace(".", ",")
                Txtmontantc.Select(Txtmontantc.Text.Length, 0)
                If Txtmontantc.Text = "" Then
                    Txtmontantc.Text = ""
                    Txtresteapayer.Text = ""
                Else
                    Dim resultat As [Decimal] = CDec(Txtmontantc.Text)
                    Txtresteapayer.Text = resultat.ToString
                End If
            Catch ex As Exception
                MsgBox("Vous devez siair une valeur monétaire")
            End Try
        End Sub

    je ne comprends pas l'utilité de ce code
    tu mets le contenu d'un textbox dans un autre
    donc pas besoin de le transformer en nombre nom ca tient en une ligne : Txtresteapayer.Text = Txtmontantc.Text
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  19. #19
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 257
    Par défaut
    C'est pour que ce champ de text prend la valeur saisie en respectant les virgules

  20. #20
    Membre Expert
    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
    Par défaut
    Pas besoin de MasterTextBox...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
       Private Sub TextBox2_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox2.KeyPress
            Dim chaine As String = "0123456789 .," 'autorise les chiffre de 0 a 9 et le point et la virgule
     
            If Not chaine.IndexOf(e.KeyChar) <> -1 Then 'c'est pas un chiffre
                If Not Asc(e.KeyChar) = 8 Then 'c'est pas non plus la touche DEL
                    e.KeyChar = ChrW(0) 'annule la saisie
                End If
            End If
        End Sub
    Et voila l'utilisateur ne pourras entrer que des chiffres et points plus virgules...
    Qui ne tente rien n'a rien !
    Ce qui ne nous tue pas nous rends plus fort !!
    Mon projet ZELDA en C++/Allegro
    http://www.tutoworld.com - Le Forum -
    Mes ressources Dotnet (cours, sources, tutos)
    --------------------------------------------
    + + =

    Ne pas oublier le Tag !

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [TP7] Calculer sin, cos, tan, sqrt via le FPU
    Par zdra dans le forum Assembleur
    Réponses: 8
    Dernier message: 25/11/2002, 04h09
  2. Calcul des numéros de semaine d'un calendrier
    Par Invité dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 06/11/2002, 21h29
  3. Réponses: 8
    Dernier message: 18/09/2002, 03h20
  4. Récupérer 10 nb différents avec un calcul aléatoire
    Par BXDSPORT dans le forum Langage
    Réponses: 3
    Dernier message: 04/08/2002, 02h35
  5. Algo de calcul de FFT
    Par djlex03 dans le forum Traitement du signal
    Réponses: 15
    Dernier message: 02/08/2002, 17h45

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