Type de donnée ERREUR énorme! - VB/VBA/VBS - Programmation
Marsh Posté le 16-11-2005 à 14:32:13
j'ai connu cette erreur lors d'un projet de fin d'études asp/vbs. Je crois que ça vient de la représentation en mémoire des nombres et des casts fait par l'interpréteur VB. En faisant une recherche, j'avais même trouvé un exe écrit par un gars qui montrait ce bug et que expliquait le pourquoi du comment, et surtout, comment contourner le pb. Mais je ne n'ai plus le lien, désolé ...
Marsh Posté le 16-11-2005 à 16:05:11
Salut à tous,
J'ai trouvé d'ou vient le pb, en fait cela ne vient pas de VBA mais du PC et de ses soft en général. C'est due la méthode de calcul, c'est un peu dur à expliquer donc voici un lien:
http://support.microsoft.com/defau [...] n-us;42980
J'espère que cela pourra aider du monde.
A+
Marsh Posté le 16-11-2005 à 16:23:00
un autre lien qui explique les erreurs d'arrondi sur les float:
http://blogs.msdn.com/ericlippert/ [...] 53000.aspx
Marsh Posté le 16-11-2005 à 20:50:18
bonsoir,
on corrige la plupart du temps ce problème avec :
Outils / Options / Calculs + Cocher Calcul avec la précision....
A+
Marsh Posté le 17-11-2005 à 09:32:22
Salut à tous,
Galopin l'option dont tu parles n'est pas liée avec le problème d'arondi que peuvent générer les soft mais c'est juste un astuce d'excel pour gérer les options d'affichage et qui est très dangereuse à utiliser pour les novices.
A quoi sert cette option, un exemple:
si tu mets les cellules A1, A2 et A3 au format de cellule "nombre" avec un chiffre derrière la virgule, et que tu écris dans ces 3 cellules la formule "=1/3", tu obtiens pour chaque cellule "0.3".
Si maintenant tu fais la somme de ces 3 cellules dans la cellule A4: "=A1+A2+A3", tu obtiens:
Sans l'option: 1 car 1/3 + 1/3 + 1/3 = 1
Avec l'option: 0.9 car 0.3 +0.3 +0.3 = 0.9
Perso, je te tiens à mettre en garde quant à l'utilisation de cette option
A+
Marsh Posté le 16-11-2005 à 12:00:34
Boujour à tous,
Savez vous que pour VBA 7.6-7.4 = 0.199999999999999 lorsque l'on ne définit pas le type de donnnée de notre variable (par défaut elle est définit pas VBA en tant que "Variant" ).
Je trouve cela très dérangeant, et ce qui est encore plus dérangeant, c'est que le résultat différe, pour le type de données "single" selon que l'on affiche le résultat dans une cellule ou dans un msgbox.
Quelqu'un pourrait-il m'éclairer sur cette ERREUR qui fausse beaucoup de résultats?
Voici un code qui permet de vérifier le résultat de "monnombre=7.6-7.4" en fonction du type de donnée et qui affiche 2 résultats: un dans excel et un dans un msgbox:
Code:
Sub type_donnée()
Dim i, j
Dim MyInteger As Integer
Dim MyLong As Long
Dim MySingle As Single
Dim MyDouble As Double
Dim MyVariant As Variant
Dim MyCurrency As Currency
MyInteger = 7.6 - 7.4
MyLong = 7.6 - 7.4
MySingle = 7.6 - 7.4
MyDouble = 7.6 - 7.4
MyVariant = 7.6 - 7.4
MyCurrency = 7.6 - 7.4
j = 1
Cells(1, j).Value = "Type de donnée"
Cells(2, j).Value = "Integer"
Cells(3, j).Value = "Long"
Cells(4, j).Value = "Single"
Cells(5, j).Value = "Double"
Cells(6, j).Value = "Variant"
Cells(7, j).Value = "Currency"
j = 2
Cells(1, j).Value = "Résultat de 7.6-7.4"
Cells(2, j).Value = MyInteger
Cells(3, j).Value = MyLong
Cells(4, j).Value = MySingle
Cells(5, j).Value = MyDouble
Cells(6, j).Value = MyVariant
Cells(7, j).Value = MyCurrency
Range("B2:B7" ).Select
Range("B7" ).Activate
Selection.NumberFormat = "0.000000000000000"
MsgBox "Voici le résultat de ""monnombre = 7.6-7.4"" en fonction du type de donnée déclaré:" _
& Chr(10) & Chr(10) & _
"Interger:" & Chr(9) & Chr(9) & MyInteger & Chr(10) & _
"Long: " & Chr(9) & Chr(9) & MyLong & Chr(10) & _
"Single: " & Chr(9) & Chr(9) & MySingle & Chr(10) & _
"Double: " & Chr(9) & Chr(9) & MyDouble & Chr(10) & _
"Variant: " & Chr(9) & Chr(9) & MyVariant & Chr(10) & _
"Currency: " & Chr(9) & MyCurrency & Chr(10)
End Sub
Merci d'avance.
A+