Erreur calcul VBA

Banzai64

XLDnaute Accro
Bonjour et Joyeux Noël

Par cette belle nuit, je viens vers vous car j'ai un petit soucis

En faisant un programme pour ici, je me suis aperçu que des calculs simples (soustractions) en VBA étaient faux
A partir d'un nombre (non entier) je fais des soustractions avec des nombres stockés dans un tableau et à moment le résultat est faux
j'obtiens
Code:
3,19999999999999
au lieu de
Code:
3,2
et bien sur mes tests ultérieurs sont faussés

Je me suis arrangé avec Round mais je ne trouve pas que cela soit la bonne solution

Alors soit j'ai fait une erreur (ce qui ne m'étonnerait pas) soit vba a un soucis


Je joins un fichier exemple avec le problème

Ce n'est pas dans la page que l'on voit l'erreur mais dans la fenêtre exécution
ou si l'on fait du pas-à-pas dans la fenêtre variables locales

Merci de tester si vous avez le même problème

Merci
 

Pièces jointes

  • test erreur calcul vba.xls
    24 KB · Affichages: 42

ROGER2327

XLDnaute Barbatruc
Re : Erreur calcul VBA

Bonjour Banzai64
Même constat chez moi. (Sans étonnement : ces "erreurs" sur le type double sont inévitables, binaire et décimal faisant mauvais ménage.)
Peut-être serait-il bon d'envisager de ne calculer que sur des entiers en interne, puis de passer au décimaux pour l'affichage :
Code:
Sub test()

Dim Tablo
Dim Nombre&
Dim Resultat&
Dim I%

  Tablo = Array(100000, 50000, 15000, 14000, 13000, 12000, 11000, 10000, 9000, 8000, 7000, 6000, 5800, 5700, 5600, 5500, 5400, 5350, 5300, 5250, 5200, 5100, 5070, 5050, 5025)
  Columns("A:B").ClearContents
  Nombre = 218.2
  Resultat = Round(1000 * Nombre, 0)
  For I = 0 To UBound(Tablo)
    Resultat = Resultat - Tablo(I)
    Cells(I + 1, "A") = Resultat / 1000
    Cells(I + 1, "B") = Round(Resultat, 3) / 1000
    Debug.Print Resultat / 1000, Round(Resultat, 3) / 1000
  Next I
End Sub
Sur ce, bonne nuit… À suivre demain ou après-demain…​
ROGER2327
#4812


Mercredi 25 Sable 138 (Nativité d'Archæoptéryx, ST)
5 Nivôse An CCXIX
2010-W51-6T02:16:30Z
 
Dernière édition:

Banzai64

XLDnaute Accro
Re : Erreur calcul VBA

Bonjour à tous et joyeux Noël

Merci ROGER2327

Cela me rassure quelque part, que ce problème n'existe pas que chez moi
C'est bien dommage de passer par voie détournée.
Parce qu'ici le programme n'étant pas trop conséquent, j'ai trouvé assez facilement d'où venait le problème et ainsi j'ai pu trouvé une solution
Mais dans un code plus important bonjour le debuggage
En te remerciant encore d'avoir prit le temps de tester et de trouver une solution pour contourner le problème

Je te (vous) souhaite de bonnes fêtes
 

Fo_rum

XLDnaute Accro
Re : Erreur calcul VBA

Salut,

et en changeant le type de variable (Remplacer , par ,@ dans Array()) ?
Code:
Sub test()

Dim Tablo
Dim Resultat#
Dim I As Byte
  Tablo = Array(100, 50, 15, 14, 13, 12@, 11@, 10, 9, 8, 7, 6, 5.8, 5.7, _
                5.6, 5.5, 5.4, 5.35, 5.3, 5.25, 5.2, 5.1, 5.07, 5.05, 5.025)
  'si on ne connait pas les réponses, @ (type Currency)pour chaque cas
  Columns("A:B").ClearContents
  Resultat = 218.2
  For I = 0 To UBound(Tablo)
    Resultat = Resultat - Tablo(I)
    Cells(I + 1, "A") = Resultat
    Cells(I + 1, "B") = Round(Resultat, 3)
    Debug.Print Resultat, Round(Resultat, 3)
  Next I
End Sub

Désolé mais le formatage de ce code n'est pas pris en compte donc supprimé.
 

Pièces jointes

  • Currency.xls
    19.5 KB · Affichages: 42

Statistiques des forums

Discussions
312 215
Messages
2 086 329
Membres
103 185
dernier inscrit
salhit