Pb de calcule de somme dans un label

Fermé
Sahmy021 Messages postés 17 Date d'inscription dimanche 3 décembre 2017 Statut Membre Dernière intervention 7 décembre 2017 - 6 déc. 2017 à 22:23
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 - 8 déc. 2017 à 11:07
Bonjour,

Je suis tréso d'une association et je souhaite faire un formulaire de saisie de ligne comptable ou cette dernière comprend des sous catégories (ventilation budgétaire).

J'aimerais faire un formulaire de saisies ou on saisie les montants des sous lignes et le calcule du total se fait en automatique dans un label.

voici mon code pour ce point :

Private Sub TxbD1_AfterUpdate()
    TxbD1 = Format(Val(TxbD1.Value), "# ##0.00€")
    LblTotal.Caption = Format(Val(TxbD1.Value) + Val(TxbD2.Value) + Val(TxbD3.Value), "# ##0.00€")
End Sub

Private Sub TxbD2_AfterUpdate()
    TxbD2 = Format(Val(TxbD2.Value), "# ##0.00€")
    LblTotal.Caption = Format(Val(TxbD1.Value) + Val(TxbD2.Value) + Val(TxbD3.Value), "# ##0.00€")
End Sub

Private Sub TxbD3_AfterUpdate()
    TxbD3 = Format(Val(TxbD3.Value), "# ##0.00€")
    LblTotal.Caption = Format(Val(TxbD1.Value) + Val(TxbD2.Value) + Val(TxbD3.Value), "# ##0.00€")
End Sub


Le pb c'est que :
- le calcul ne prend pas en compte les chiffre apres la virgule.
- Qd je re-sélectionne une textbox et que je fais [Enter],sans rien changer, il me zappe les chiffre après la virgule

Je pens eque ca vient d'un confli dans les format de décimal entre "." et ",".
je ne vois pas comment régler ce pb ! merci

A voir également:

8 réponses

Whismeril Messages postés 19020 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 15 avril 2024 928
6 déc. 2017 à 22:34
0
Sahmy021 Messages postés 17 Date d'inscription dimanche 3 décembre 2017 Statut Membre Dernière intervention 7 décembre 2017
7 déc. 2017 à 00:04
Salut,

Je te demande un peu d’indulgence pour ce qui va suivre, mais j'ai zéro base en prog.

Donc si je comprend bien le pb viens du fait que qd j'utilise format, ce qui apparais dans la TXB est une chaine de caractère. c'est bien ca ?

Et du coup il n'arrive pas a additionner ? Pourtant je pensais que la fonction Val convertissait cette chaine de caractère en en valeur....

franchement je suis perdu !

je vois pas comment faire même après la lecture de :
https://docs.microsoft.com/fr-FR/office/vba/Language/Reference/User-Interface-Help/format-function-visual-basic-for-applications

merci
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
7 déc. 2017 à 07:16
Bonjour,

une facon de faire:

Private Sub TxbD1_AfterUpdate()
    TxbD1 = Format(Val(TxbD1.Value), "# ##0.00€")
        Call Totaltxt
End Sub

Private Sub TxbD2_AfterUpdate()
    TxbD2 = Format(Val(TxbD2.Value), "# ##0.00€")
        Call Totaltxt
End Sub

Private Sub TxbD3_AfterUpdate()
    TxbD3 = Format(Val(TxbD3.Value), "# ##0.00€")
        Call Totaltxt
End Sub

Sub Totaltxt()
    If IsNumeric(TxbD1) Then Total = CDbl(TxbD1.Value)
    If IsNumeric(TxbD2) Then Total = Total + CDbl(TxbD2.Value)
    If IsNumeric(TxbD3) Then Total = Total + CDbl(TxbD3.Value)
    LblTotal.Caption = Format(Total, "# ##0.00€")
End Sub
0
Whismeril Messages postés 19020 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 15 avril 2024 928
Modifié le 7 déc. 2017 à 07:18
Bonjour

Salut,
Je te demande un peu d’indulgence pour ce qui va suivre, mais j'ai zéro base en prog.

C’est le problème quand on débute en autodidacte, on part direct sur un projet et ce faisant on brule des étapes. J’ai fait pareil y’a longtemps....


Donc si je comprend bien le pb viens du fait que qd j'utilise format, ce qui apparais dans la TXB est une chaine de caractère. c'est bien ca ?

Et du coup il n'arrive pas a additionner ? Pourtant je pensais que la fonction Val convertissait cette chaine de caractère en en valeur...

Ce qui est écrit dans le textbox est toujours du texte. Val convertit bien ce texte en nombre, mais Format reconvertit le nombre en texte, et en plus y ajoute une unité.

Là tu te retrouve avec par exemple "1 234.12€" + "1 234.12€" + "1 234.12€" et Val qui doit se démerder avec un espace, un € et peut-être même le point si ton PC est configuré avec la virgule comme symbole décimal.

Je te conseille d’enlever l’€ dans le Format et de regarder si ça marche.
Si oui, alors pose un label à côté de chaque textBox dans lequel tu écris €.
Si non, enlève l’espase puis si besoin vérifie ton symbole décimal.


Quand j'étais petit, la mer Morte n'était que malade.
George Burns
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
7 déc. 2017 à 07:25
Bonjour Whismeril, ca roule?

Je te conseille d’enlever l’€ et Si non, enlève l’espase
Non, pas besoin, c'est juste un probleme d'instruction de conversion
0
Whismeril Messages postés 19020 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 15 avril 2024 928
7 déc. 2017 à 07:31
Ça va et toi?
Ha oui avec CDoubl ça doit marcher, tu es bien plus calé en VBA que moi.
Cependant, ce que j’ai décrit est une « vérité générale », VBA étant très permissif, il arrive plus ou moins à passer outre.
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701 > Whismeril Messages postés 19020 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 15 avril 2024
7 déc. 2017 à 07:35
Re,
Ca roule

« vérité générale », VBA étant très permissif
Ah Que oui, pour une personne qui ne connait pas vraiment la programmation en general.....!
0
Sahmy021 Messages postés 17 Date d'inscription dimanche 3 décembre 2017 Statut Membre Dernière intervention 7 décembre 2017
7 déc. 2017 à 11:08
Je confirme je pense tout vient du "." qui se transforme en ",".
Comment dois-je procédé ?
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701 > Sahmy021 Messages postés 17 Date d'inscription dimanche 3 décembre 2017 Statut Membre Dernière intervention 7 décembre 2017
7 déc. 2017 à 11:13
Re,

Je confirme je pense tout vient du "."
Non, avez vous tester le code que j'ai mis post 3 !!!!!!!!!!!!!!!!!!!!!!!!!!!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
7 déc. 2017 à 15:01
Re,

il me semble ?
C'est bon ou pas bon mais pas il me semble !!!!
0
Sahmy021 Messages postés 17 Date d'inscription dimanche 3 décembre 2017 Statut Membre Dernière intervention 7 décembre 2017
Modifié le 7 déc. 2017 à 15:47
j'ai modifié ma reponse juste au-dessus ;-)
Je veux bien une petite explication si possible stp
Merci
0
Sahmy021 Messages postés 17 Date d'inscription dimanche 3 décembre 2017 Statut Membre Dernière intervention 7 décembre 2017
7 déc. 2017 à 16:09
re-salut à tous,
Bon je crois que j'ai compris.... (j'ai bien dit je crois)
EN fait "If IsNumeric" vient tester la chaine de caractère de ma TxtBox. cela me permet de savoir si je dois utiliser "CDbl" ou "Val" pour convertir en nombre.
Du coup j'ai fait le code suivant qui marche :
Private Sub TxbD1_AfterUpdate()
    If IsNumeric(TxbD1) Then
        TxbD1 = Format(CDbl(TxbD1.Value), "# ##0.00€")
    Else
        TxbD1 = Format(Val(TxbD1.Value), "# ##0.00€")
    End If
        Call Totaltxt
End Sub

Private Sub TxbD2_AfterUpdate()
    If IsNumeric(TxbD2) Then
        TxbD2 = Format(CDbl(TxbD2.Value), "# ##0.00€")
    Else
        TxbD2 = Format(Val(TxbD2.Value), "# ##0.00€")
    End If
        Call Totaltxt
End Sub

Private Sub TxbD3_AfterUpdate()
    If IsNumeric(TxbD3) Then
        TxbD3 = Format(CDbl(TxbD3.Value), "# ##0.00€")
    Else
        TxbD3 = Format(Val(TxbD3.Value), "# ##0.00€")
    End If
    Call Totaltxt
End Sub

Sub Totaltxt()
    If IsNumeric(TxbD1) Then Total = CDbl(TxbD1.Value)
    If IsNumeric(TxbD2) Then Total = Total + CDbl(TxbD2.Value)
    If IsNumeric(TxbD3) Then Total = Total + CDbl(TxbD3.Value)
    LblTotal.Caption = Format(Total, "# ##0.00€")
End Sub


Dans mon fichier définitif j'ai 15 TxtBox à additionner. Donc pour la "sub Totaltxt()" je devrais m'en sortir avec des "Controls()" et une boucle "For i=1 to 15"
Par contre est-il possible de faire une boucle pour les "Private Sub" ?
si pas possible je bourrinnerai ...^^

Encore merci pour votre patience et la disponibilité.
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
7 déc. 2017 à 17:57
Re,

Comprends pas votre histoire de val ou cdbl, chez moi pas besoin de ca

Par contre est-il possible de faire une boucle pour les "Private Sub" ?
Quelle boucle???
0
Sahmy021 Messages postés 17 Date d'inscription dimanche 3 décembre 2017 Statut Membre Dernière intervention 7 décembre 2017
7 déc. 2017 à 21:02
Re
en fait si j'ai bien suivit :
Val traduit du texte en nombre qd il y a un "."
Cdbl traduit du text en nombre qd il y a une ","

pour la boucle :
vue que dans le fichier final j'aurais 15 TexteBox ben je vais etre obligé de répéter 15 fois la séquence suivante en changeant que le chiffre dans le nom de mes textbox:
Private Sub TxbD3_AfterUpdate()
    If IsNumeric(TxbD3) Then
        TxbD3 = Format(CDbl(TxbD3.Value), "# ##0.00€")
    Else
        TxbD3 = Format(Val(TxbD3.Value), "# ##0.00€")
    End If
    Call Totaltxt
End Sub


je voulais savoir si il y a moyen de faire une boucle pour éviter CA.
Tu vois mieux ?
0
Whismeril Messages postés 19020 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 15 avril 2024 928
7 déc. 2017 à 21:57
Bonsoir,

je viens de tester de mon coté.
En effet, quand le pc est configuré avec la virgule comme symbole décimal,
  • si je tape 1,5 dans un textbox avec Cdbl j'obtiens bien la conversion, et avec Val ça retourne 1
  • si je tape 1.5 avec Cdbl, j'ai "incompatibilité de type" et avec Val j'ai la bonne conversion.

Y'a une subtilité qui m'échappe.

Cependant ceci
TextBox1.Text = Format(CDbl(Replace(TextBox1.Text, ".", ",")), "# ##0.00")
résout le problème, attention ça ne marchera pas avec un PC dont le symbole décimal est le point.

Par contre est-il possible de faire une boucle pour les "Private Sub" ?

non ça n'est pas possible, pas plus qu'il n'est possible de dire, tous mes AfterUpdate pointent vers la même sub (en VB.net c'est possible).
Par contre, rien ne t'empêche de faire faire le boulot à Totaltxt (ou une autre sub)

Private Sub TextBox1_AfterUpdate()
   Totaltxt TextBox1
End Sub

Private Sub TextBox2_AfterUpdate()
   Call Totaltxt(TextBox2)
End Sub

Sub Totaltxt(monTextBox)
    monTextBox.Text = Format(CDbl(Replace(monTextBox.Text, ".", ",")), "# ##0.00")

    If IsNumeric(TextBox1.Text) Then Total = CDbl(TextBox1.Value)
    If IsNumeric(TextBox2.Text) Then Total = Total + CDbl(TextBox2.Value)

    Label1.Caption = Format(Total, "# ##0.00€")
End Sub

Ça marche avec ou sans le Call.

0
Sahmy021 Messages postés 17 Date d'inscription dimanche 3 décembre 2017 Statut Membre Dernière intervention 7 décembre 2017
7 déc. 2017 à 23:09
Ok mais je pense que je vais garder ma version elle devrait marcher partout je pense.
Merci pour l'astuce à mettre dans le Totaltxt
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
8 déc. 2017 à 07:57
Bonjour,

non ça n'est pas possible, pas plus qu'il n'est possible de dire,

Avec un module de classe pour les textbox ca devrait le faire
0
Whismeril Messages postés 19020 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 15 avril 2024 928
8 déc. 2017 à 08:14
Ha ben ça, je veux bien que tu me montres
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
8 déc. 2017 à 11:07
Bonjour,

Fichier avec module de classe pour les textbox (a modifier si il y a d'autres textbox que celles qui sont pour le calcul, mais c'est l'evidence..)
Pour les textbox, je prend le separateur decimal utilise par excel pour avoir le bon separateur
Par contre pas de Afterupdate(!!), j'ai pris keyup qui va tres bien mais, en contre partie pour le format pas marche mais bon....Peut-etre faisable, ai pas cherche
Cote format pour le label, vba excel ne demord pas de sa virgule

https://www.cjoint.com/c/GLikgrQyGrf
0