XL 2019 comparaison de nombres

RichardS

XLDnaute Junior
Bonjour à tous,

Je sais, je ne suis pas un cador en VBA Excel mais tout de même, là, je suis vraiment perplexe.
Explications : J'ai un tableau qui possède entre autre une colonne montant et une colonne balance.
Comme tout lecteur de relevés bancaire, nous savons que balance ligne - 1 + Montant ligne L = balance ligne L
Pour vérifier cela, j'ai ajouté dans mon tableau une colonne balance calculée = (balance L-1) + montant (L)
Et une colonne ou je compare la balance calculée avec la balance du tableau. OK si = et pas ok sinon

Or stupéfaction, si visuellement toutes les balances du tableau sont égales aux balances calculées, sur certaines lignes, le programme me dit "PAS OK"
J'ai pensé au début qu'un des montants ne se limitait pas à 2 décimales comme visuellement. J'ai donc arrondi les 2 colonnes en question (montant et balance) à 2 décimales par la fonction ROUND. J'ai toujours au mêmes endroits les PAS OK qui reviennent ???
J'en perd mon latin ou mon hébreux, enfin je n'y comprend rien.
Pouvez vous m'aider svp.
Ci-joint un fichier que j'ai nommé Test qui comporte le tableau et le programme.

Please help. Je n'y comprend rien. Je ne vois pas où j'ai pu faire une bêtise.
J'attends d'autant plus impatiemment votre réponse que je me demande si je ne deviens pas sénile.

Merci d'avance.
 

Pièces jointes

  • Test.xlsm
    62.3 KB · Affichages: 10

bsalv

XLDnaute Occasionnel
bonjour, excel calcule avec 16 chiffres et comme vos montants sont environ 5 chiffres avant la virgule, il y a encore 10 chiffres décimal que vous ne voyez pas.
si vous modifiez cette ligne, donc arrondir 11 chiffres décimals, tout est okay, avec 12, ce n'est plus le cas.
Enrichi (BBcode):
       If Round(Cells(L, Balc) - Cells(L, Bal), 11) = 0 Then
               Cells(L, Cbal) = "ok"

Donc comme c'est une erreur d'arrondir, je pense, comme vous calculer avec de centiemes, que "If Round(Cells(L, Balc) - Cells(L, Bal), 4) = 0" suffit
 

Gégé-45550

XLDnaute Accro
Bonjour à tous,

Je sais, je ne suis pas un cador en VBA Excel mais tout de même, là, je suis vraiment perplexe.
Explications : J'ai un tableau qui possède entre autre une colonne montant et une colonne balance.
Comme tout lecteur de relevés bancaire, nous savons que balance ligne - 1 + Montant ligne L = balance ligne L
Pour vérifier cela, j'ai ajouté dans mon tableau une colonne balance calculée = (balance L-1) + montant (L)
Et une colonne ou je compare la balance calculée avec la balance du tableau. OK si = et pas ok sinon

Or stupéfaction, si visuellement toutes les balances du tableau sont égales aux balances calculées, sur certaines lignes, le programme me dit "PAS OK"
J'ai pensé au début qu'un des montants ne se limitait pas à 2 décimales comme visuellement. J'ai donc arrondi les 2 colonnes en question (montant et balance) à 2 décimales par la fonction ROUND. J'ai toujours au mêmes endroits les PAS OK qui reviennent ???
J'en perd mon latin ou mon hébreux, enfin je n'y comprend rien.
Pouvez vous m'aider svp.
Ci-joint un fichier que j'ai nommé Test qui comporte le tableau et le programme.

Please help. Je n'y comprend rien. Je ne vois pas où j'ai pu faire une bêtise.
J'attends d'autant plus impatiemment votre réponse que je me demande si je ne deviens pas sénile.

Merci d'avance.
Bonsoir,
si j'ajoute la ligne suivante à votre code :
VB:
Debug.Print Cells(L, Balc) = Cells(L, Bal), Cells(L, Balc) - Cells(L, Bal)
Voici le résultat que j'obtiens, explicatif de votre problème :
Vrai 0
Vrai 0
Faux 1,81898940354586E-12
Vrai 0
Vrai 0
Vrai 0
Vrai 0
Vrai 0
Faux -3,63797880709171E-12
Vrai 0
Faux 3,63797880709171E-12
Vrai 0
Vrai 0
Vrai 0
Vrai 0
Vrai 0
Vrai 0
Vrai 0
Vrai 0
Vrai 0
Vrai 0
Vrai 0
Vrai 0
Vrai 0
Vrai 0
Vrai 0
Vrai 0
Vrai 0
Vrai 0
Faux 3,63797880709171E-12
Faux -3,63797880709171E-12
Vrai 0
Faux -3,63797880709171E-12
Vrai 0
Vrai 0
Faux 1,81898940354586E-12
Vrai 0
Faux -1,81898940354586E-12
Vrai 0
Vrai 0
Faux 1,81898940354586E-12
Faux -1,81898940354586E-12
Vrai 0
Vrai 0
En conclusion, soit vous devez gérer les arrondis finement, soit vous remplacez votre contrôle par VBA au moyen d'une colonne contenant
Code:
=SI(D3=E3;"OK";"pas OK")
... et suivantes.
Cette formule donnera "OK" dans tous les cas présents dans votre fichier.
Cordialement,
 

RichardS

XLDnaute Junior
bonjour, excel calcule avec 16 chiffres et comme vos montants sont environ 5 chiffres avant la virgule, il y a encore 10 chiffres décimal que vous ne voyez pas.
si vous modifiez cette ligne, donc arrondir 11 chiffres décimals, tout est okay, avec 12, ce n'est plus le cas.
Enrichi (BBcode):
       If Round(Cells(L, Balc) - Cells(L, Bal), 11) = 0 Then
               Cells(L, Cbal) = "ok"

Donc comme c'est une erreur d'arrondir, je pense, comme vous calculer avec de centiemes, que "If Round(Cells(L, Balc) - Cells(L, Bal), 4) = 0" suffit
ça marche et en reprenant le même esprit en faisant :
If Round(Cells(L, Balc), 2) = Round(Cells(L, bal), 2) Then
ça marche aussi. Donc il faut arrondir en testant pour que cela fonctionne.
Car j'avais arrondi chaque nombre des 2 colonnes et cela ne fonctionnait pas.
Merci, j'ai compris
 

RichardS

XLDnaute Junior
Ce que j'en ai retiré c'est que en VBA, les montants sont dans des zones de 16 chiffres et que quelque opération que l'on effectue, il y a des scories dans ces buffers. Donc lors de comparaisons utiliser la fonction round permet d'avoir une identité sur les chiffres concernés.

Merci à tous et ... à bientôt
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Ce que j'en ai retiré c'est que en VBA, les montants sont dans des zones de 16 chiffres et que quelque opération que l'on effectue, il y a des scories dans ces buffers
Non, ce n'est pas ça. VBA offre plutôt davantage de possibilité de stockage exact de valeurs que Excel, comme avec ce code qui transforme les Double d'Excel en Currency pour toujours trouver l'égalité dans votre exemple :
VB:
    If CCur(Cells(L, Balc)) = CCur(Cells(L, Bal)) Then
Des précisions dans ce classeur.
 

Pièces jointes

  • ValeursExcelVsVBA.xlsm
    72.2 KB · Affichages: 2

Discussions similaires

Réponses
5
Affichages
285

Membres actuellement en ligne

Statistiques des forums

Discussions
315 097
Messages
2 116 186
Membres
112 679
dernier inscrit
Yupanki