Somme erronée en VBA

Résolu/Fermé
Iama Messages postés 319 Date d'inscription mercredi 13 janvier 2010 Statut Membre Dernière intervention 27 mars 2020 - 14 août 2015 à 11:56
Iama Messages postés 319 Date d'inscription mercredi 13 janvier 2010 Statut Membre Dernière intervention 27 mars 2020 - 15 août 2015 à 09:05
Bonjour,

Je cherche une explication et une solution, pouvez-vous me renseigner svp?

Je récupère des chiffres d'un fichier texte via une macro que je range dans une feuille excel.

Dans une boucle j'additionne la valeur de cellules contant ces chiffres pour déterminer un nombre de cellule. (quand j'arrive à zéro, c'est Ok).

A un moment la macro arrive à:
116,33 + -21,15
excel trouve =95,1799999999999

Je pense que cela est dû à une impression de calcul.
Comment puis-je l'éviter?

Cordialement
Alain



Vista

3 réponses

Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 778
Modifié par Patrice33740 le 14/08/2015 à 13:38
Bonjour,

C'est probablement un problème d'arrondi lors de la conversion décimal - binaire mais sans le code difficile d'être précis.

Ce code ne pose pas de problème :
Sub test()
Const d1 As Double = 116.33
Const d2 As Double = -21.15
Const s1 As String = "116.33"
Const s2 As String = "-21.15"

  MsgBox (d1 + d2) & vbCr & _
         (Val(s1) + Val(s2))
         
End Sub

Cordialement
Patrice
0
NHenry Messages postés 15162 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 24 octobre 2024 340
Modifié par NHenry le 14/08/2015 à 13:45
Autant, on peut dire un entier peut être égal à une valeur, autant, dire que 2 flottant peuvent être égaux est faux.

Tu peux dire par contre que si ta somme et entre 0.001 et -0.001 tu considère que c'est bon.

J'interviens principalement en VB6 et VB.NET, avec un peu de C#, mais la modération m'amène souvent sur d'autre langages.
En VB.NET pensez à activer "Option Explicit" et "Option Strict"
0
Iama Messages postés 319 Date d'inscription mercredi 13 janvier 2010 Statut Membre Dernière intervention 27 mars 2020 14
14 août 2015 à 14:14
Merci à vous deux

Apparemment il n'y a pas de solutions simples. La précision informatique!

Je suis passé par des nombres entiers.
Pour ce problème,
j'ai multiplié par 100 toutes mes valeurs et cela tombe juste.

Cordialement
Alain
0
NHenry Messages postés 15162 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 24 octobre 2024 340
14 août 2015 à 14:56
Si ton problème es résolu, penses à maquer le sujet comme tel.
0
Iama Messages postés 319 Date d'inscription mercredi 13 janvier 2010 Statut Membre Dernière intervention 27 mars 2020 14
15 août 2015 à 09:05
Un oublie Excuse
Alain
0