Calcul d'un total QUE jusqu'au dizième

Bonjour,

Dans le module frmAjouter_Ventiller se trouve la fonction qui me permet de calculer un total et de comparer en fonction du montant indiqué, soit :

Sub Check_Data()
    Dim Ct As Integer
    Dim Sqdata1(6) As String
    Dim All, Zz As Integer

    'Calcul du total
    txtTotal = 0
       txtTotal = txtMontantl + txtMontant2 + txtMontant3 + txtMontant4 + txtMontant5 + txtMontant6

End Sub

Excel semble calculer jusqu'à 10^-12 (10 puissance -12) . Ceci impliques quelques erreurs durant la comparaison du montant (qui n'est pas calculé). Est-ce que vous pourriez m'indiquer le code à installer pour calculer que jusqu'à 10^-2 ?

Cette feuille dans excel est affiché grâce à la touche "ventilation" qui se trouve en cliquant sur Ajouter dans l'onglet Crédit_Débit.

14calcul-total.xlsm (183.22 Ko)

Merci.

Cdt,

Bonsoir,

un petit coucou mais hélas sans réponse

@ bientôt

LouReeD

Bonsoir à tous les 2,

Heureux de se retrouver. Bel outil

Pas de réponse non plus.

Bonne soirée

Bouben

Et oui ! C'est vrai ! Bonsoir bouben !

Dans tous les posts

Duportal absent ?

@ bientôt

LouReeD

Bonsoir,

Non non, bien ici, toujours sur mon projet de compte .

Félicitation LooReeD pour les téléchargements de votre application... que je suis toujours...

Amicalement,

RD

Bonjour,

en regardant le code fourni et les explication je dirais que c'est un simple problème d'arrondi.

x = Round(x, 2)

eric

Bonsoir,

J'ai mis en place cette fonction sur les lignes concernant le calcul, mais l'arrondi n'est pas actif. je ne comprends pas pourquoi

6calcul-total.xlsm (181.26 Ko)

Cdt,

RD

Bonjour,

On s'y perd dans ton code...

tu parlais de comparaison, c'est à ce moment qu'il faut le faire.

si x=1.5 et y=1.499999999

avec :

If round(x,2)=round(y,2) then

sera True au lieu de False

eric

Bonsoir,

C'est ce que j'ai fait dans

Sub Total_Click()
Dim i
moShCD.Unprotect
'Calcul du total
    txtTotal.Text = 0
    txtTotal.Text = Round(txtTotal.Text, 2)
    'MsgBox (Total)
     Worksheets("Crédit_Débit").Select
     Cells(10, 26) = frmAjouter_Ventiller.txtMontant1.Text
     Cells(11, 26) = frmAjouter_Ventiller.txtMontant2.Text
     Cells(12, 26) = frmAjouter_Ventiller.txtMontant3.Text
     Cells(13, 26) = frmAjouter_Ventiller.txtMontant4.Text
     Cells(14, 26) = frmAjouter_Ventiller.txtMontant5.Text
     Cells(15, 26) = frmAjouter_Ventiller.txtMontant6.Text
     Cells(16, 26) = Cells(10, 26) + Cells(11, 26) + Cells(12, 26) + Cells(13, 26) + Cells(14, 26) + Cells(15, 26)
     Cells(17, 26) = frmAjouter_Ventiller.textMontant0.Text
     frmAjouter_Ventiller.txtTotal = Round(Cells(16, 26), 2)
     Cells(16, 26) = Round(Cells(16, 26), 2)
     If frmAjouter_Ventiller.textMontant0.Text <> Round(frmAjouter_Ventiller.txtTotal, 2) Then
        MsgBox ("Vérifier que la somme des valeurs est égale du montant à ventiler"), i = 0
        frmAjouter_Ventiller.cmdOK.Enabled = True
        Call SaisieOK
     End If
     If frmAjouter_Ventiller.textMontant0.Text = frmAjouter_Ventiller.txtTotal Then
        frmAjouter_Ventiller.cmdOK.Enabled = True
        Call SaisieOK
     End If

     For i = 10 To 17
     Cells(i, 26) = ""
     Next
End Sub

LA comparaison se fait ici :

If frmAjouter_Ventiller.textMontant0.Text <> Round(frmAjouter_Ventiller.txtTotal, 2) Then
        MsgBox ("Vérifier que la somme des valeurs est égale du montant à ventiler"), i = 0
        frmAjouter_Ventiller.cmdOK.Enabled = True
        Call SaisieOK
     End If
     If frmAjouter_Ventiller.textMontant0.Text = frmAjouter_Ventiller.txtTotal Then
        frmAjouter_Ventiller.cmdOK.Enabled = True
        Call SaisieOK
     End If

Les valeurs de If frmAjouter_Ventiller.textMontant0.Text sont écrites manuellement (donc pas calculé), toujours avec le dixième.

C'est la valeurs "frmAjouter_Ventiller.txtTotal" qui est calculé avec

Sub Check_Data()
    Dim Ct As Integer
    Dim Sqdata1(6) As String
    Dim All, Zz As Integer

    'Calcul du total
    txtTotal = 0
       txtTotal = txtMontantl + txtMontant2 + txtMontant3 + txtMontant4 + txtMontant5 + txtMontant6

End Sub

Et si je met if Round(frmAjouter_Ventiller.textMontant0.Text,2) <> Round(frmAjouter_Ventiller.txtTotal, 2) then avec ou sans "Cells(17, 26) = Round(frmAjouter_Ventiller.textMontant0.Text, 2), la macro m'indiquer "incompatibilité de type".

C'est quoi frmAjouter_Ventiller.textMontant0 et frmAjouter_Ventiller.txtTotal ?

Si ce sont tes textbox ils retournent des chaines, pas des numériques.

Il faut les convertir en numérique si tu veux les arrondir pour les comparer :

cdbl(frmAjouter_Ventiller.textMontant0.Text) <> Round(cdbl(frmAjouter_Ventiller.txtTotal.Text), 2)

Cela ne fonctionne pas...

Comme on ne sait pas comment fonctionne ton fichier il faut dire en détail les manip à effectuer pour avoir l'anomalie.

Et toutes les précision que tu peux fournir : dans tel module, telle proc,, telle ligne je devrais avoir ça dans tel contexte (feuille, ligne colonne en cours par exemple)

Merci pour votre aide.

J'ai bien compris le soucis : Comment calculer une valeurs qui est déclaré comme du texte dans les macro. Et pourtant, le total est tous de même bien calculé.

Ce que je souhaite semble pourtant simple : calculer jusqu'au dixième. Mais si je me plonge dedans, je m'aperçois que cela n'est au final pas si simple.

En tous cas, merci encore une fois pour vos idées, elle me semble tout à fait pertinente. Mais il y a encore dans ces lignes de macros des subtilités que je n'ai pas encore trouvé...

Bonne soirée.

Amicalement,

RD

Comme on ne sait pas comment fonctionne ton fichier il faut dire en détail les manip à effectuer pour avoir l'anomalie.

Et toutes les précision que tu peux fournir : dans tel module, telle proc,, telle ligne je devrais avoir ça dans tel contexte (feuille, ligne colonne en cours par exemple)

Je ne suis pas sûr de bien comprendre votre demande...

Pour le fonctionnement du fichier, il faut cliquer sur la touche "Ajouter" de l'onglet Crédit-débit. Dans le VBA, cela active la feuille "frmAjouter" le module modAjouter. Mais il n'y a pas besoin de lire ces lignes, elles fonctionnent et je suis sûr que le problème ne vient pas de là.

Ensuite, il faut remplir les champs de l'userform "Ajouter" puis cliquer sur la touche ventilé, ce qui va ouvrir un autre écran. Dans le VBA, c'est la feuille "frmAjouter_Ventiller" qui reprends le relais.

Cette userForm ventilé me permet de recopier dans mon tableau plusieurs rubriques différentes en utilisant les même champs (tiers, compte, date...).

Lorsque l'ensemble des libellés principaux et secondaires sont remplis, je clique sur total : La somme calculé est comparé au montant indiquer en haut, à coté des touche "Crédit" et "Débit".

PAr exemple, si mon montant est de 20, et que dans les rubriques j'utilise 2 lignes avec un montant de 10 et 10, alors mon total si je clique sur la touche sera de 20, et la comparaison sera bonne.

PAr contre, avec un autre exemple ; S'il y a un montant indiqué en haut de 110, 45, et que j'utilise 3 lignes de rubrique avec un montant de 89.65, 10.65 et 10.15, alors en cliquant sur total, mon résultat calculé sera juste mais pas la comparaison entre le montant du haut et mon total calculé en bas. Parce qu'Excel travail avec trop de chiffre après la virgule. Et par conséquent, un message d'info (qui est écrit et inclut dans la macro) apparaît indiquant que le total n'est pas correcte.

Est-ce que j'ai pu vous aider avec ces explication. Sinon, je vous transmet un doc avec des copie d'écran.

RD

Comprend bien qu'on ne va pas faire 300 essais au hasard en espérant rencontrer ton anomalie...

Donc oui, fait des captures écran avec toutes les saisies entourées (et avec lesquelles tu constates le pb), et précise module, proc,et la ligne de code fautive.

Bonjour,

Voici le doc. je vous ai écrit tous ce que je sais, parce que je n'ai pas entièrement fait le code, et je ne comprends pas forcémet toute les lignes.

Je ne sais pas par contre où se trouve la ligne fautive... Le code fonctionne, mais il calcul trop après la virgule.

7calcul-total.docx (71.97 Ko)

Cdt,

RD

Tu n'as pas du tout fait ce que je t'indiquais, tu continues à comparer des choux et des carottes.

Une chaine est forcément différente d'un numérique...

C'est bien d'apprendre à programmer mais il faudrait peut-être prendre le temps d'acquérir les bases avant, là c'est le B.A.BA.

If Round(frmAjouter_Ventiller.textMontant0.Text, 2) <> Round(frmAjouter_Ventiller.txtTotal, 2) Then

eric

Bonsoir,

Désolé de vous agacer eriiic.

Merci pour votre aide. Cependant, c'est mon diagnostique qui était erroné : Le problème ne venait pas du calcul, mais de la comparaison avec le "." et ",".

J'ai donc ajouter la ligne : frmAjouter_Ventiller.textMontant0.Text = CDbl(Replace(textMontant0.Text, ".", ","))

Ceci à régler mon problème.

J'ai mis beaucoup de temps mais c'est en essayant continuellement qu'on fini par réussir.

Bonne soirée

Rechercher des sujets similaires à "calcul total que dizieme"