Pb de calcule de somme dans un label

Sahmy021 18 Messages postés dimanche 3 décembre 2017Date d'inscription 7 décembre 2017 Dernière intervention - 6 déc. 2017 à 22:23 - Dernière réponse : f894009 12541 Messages postés dimanche 25 novembre 2007Date d'inscription 11 décembre 2017 Dernière intervention
- 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

Afficher la suite 
18Messages postés dimanche 3 décembre 2017Date d'inscription 7 décembre 2017 Dernière intervention

20 réponses

Répondre au sujet
Whismeril 10512 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 11 décembre 2017 Dernière intervention - 6 déc. 2017 à 22:34
Commenter la réponse de Whismeril
Sahmy021 18 Messages postés dimanche 3 décembre 2017Date d'inscription 7 décembre 2017 Dernière intervention - 7 déc. 2017 à 00:04
0
Utile
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://msdn.microsoft.com/fr-fr/vba/language-reference-vba/articles/format-function-visual-basic-for-applications

merci
Commenter la réponse de Sahmy021
f894009 12541 Messages postés dimanche 25 novembre 2007Date d'inscription 11 décembre 2017 Dernière intervention - 7 déc. 2017 à 07:16
0
Utile
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
Commenter la réponse de f894009
Whismeril 10512 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 11 décembre 2017 Dernière intervention - Modifié par Whismeril le 7/12/2017 à 07:18
0
Utile
6
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
Whismeril 10512 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 11 décembre 2017 Dernière intervention - 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.
f894009 12541 Messages postés dimanche 25 novembre 2007Date d'inscription 11 décembre 2017 Dernière intervention > Whismeril 10512 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 11 décembre 2017 Dernière intervention - 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.....!
Sahmy021 18 Messages postés dimanche 3 décembre 2017Date d'inscription 7 décembre 2017 Dernière intervention - 7 déc. 2017 à 11:08
Je confirme je pense tout vient du "." qui se transforme en ",".
Comment dois-je procédé ?
f894009 12541 Messages postés dimanche 25 novembre 2007Date d'inscription 11 décembre 2017 Dernière intervention > Sahmy021 18 Messages postés dimanche 3 décembre 2017Date d'inscription 7 décembre 2017 Dernière intervention - 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 !!!!!!!!!!!!!!!!!!!!!!!!!!!
Sahmy021 18 Messages postés dimanche 3 décembre 2017Date d'inscription 7 décembre 2017 Dernière intervention - 7 déc. 2017 à 14:39
Bonjour
merci oui ca marche pour la Somme !
Mais j'ai toujours les pbs avec mes textBox :
- Qd je re-sélectionne une textbox et que je fais [Enter],sans rien changer, il me zappe les chiffre après la virgule
Commenter la réponse de Whismeril
f894009 12541 Messages postés dimanche 25 novembre 2007Date d'inscription 11 décembre 2017 Dernière intervention - 7 déc. 2017 à 15:01
0
Utile
1
Re,

il me semble ?
C'est bon ou pas bon mais pas il me semble !!!!
Sahmy021 18 Messages postés dimanche 3 décembre 2017Date d'inscription 7 décembre 2017 Dernière intervention - 7 déc. 2017 à 15:29
j'ai modifié ma reponse juste au-dessus ;-)
Je veux bien une petite explication si possible stp
Merci
Commenter la réponse de f894009
Sahmy021 18 Messages postés dimanche 3 décembre 2017Date d'inscription 7 décembre 2017 Dernière intervention - 7 déc. 2017 à 16:09
0
Utile
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é.
Commenter la réponse de Sahmy021
f894009 12541 Messages postés dimanche 25 novembre 2007Date d'inscription 11 décembre 2017 Dernière intervention - 7 déc. 2017 à 17:57
0
Utile
1
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???
Sahmy021 18 Messages postés dimanche 3 décembre 2017Date d'inscription 7 décembre 2017 Dernière intervention - 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 ?
Commenter la réponse de f894009
Whismeril 10512 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 11 décembre 2017 Dernière intervention - 7 déc. 2017 à 21:57
0
Utile
4
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.

Sahmy021 18 Messages postés dimanche 3 décembre 2017Date d'inscription 7 décembre 2017 Dernière intervention - 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
f894009 12541 Messages postés dimanche 25 novembre 2007Date d'inscription 11 décembre 2017 Dernière intervention - 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
Whismeril 10512 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 11 décembre 2017 Dernière intervention - 8 déc. 2017 à 08:14
Ha ben ça, je veux bien que tu me montres
f894009 12541 Messages postés dimanche 25 novembre 2007Date d'inscription 11 décembre 2017 Dernière intervention - 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

http://www.cjoint.com/c/GLikgrQyGrf
Commenter la réponse de Whismeril