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.
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
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.
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
Merci à tous pour vos réponses
ah oui ... j'ai apprécié fantomas ... que de saisie. Je dois avoué que j'ai mis plus de 5 secondes à comprendre. Décidemment je ne connais pas assez Excel.
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.
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