XL 2010 [RESOLU] Question inégalité qui donne un résultat ... étrange

Micka28

XLDnaute Nouveau
Hello Messieurs, Mesdames :)
Alors je viens faire appel à la communauté car une chose bien étrange se passe dans mon code..et j'avoue être dépassé par les choses :confused:
(Je n'ai copié ci-après que la partie du code qui nous intéresse)

Voici mon code :

Dim hauteur_couche2 As Double
Dim diametre2 As Double

Dim Elan2 As Double
Dim Coef2 As Double
Dim Coef3 As Double
Dim Kh2 As Double


hauteur_couche2 = 3
diametre2 = 0.75


diametre2 = diametre2 * 0.8

'___________deuxième cylindre___________________
Elan2 = hauteur_couche2 / diametre2 'à ce stade, Elan2 vaut 5
MsgBox "Elan2 : " & Elan2
'MsgBox "hauteur_couche2 : " & hauteur_couche2
'MsgBox "diametre2 : " & diametre2
If Elan2 < 2 Then
Coef2 = 1.12
Coef3 = 1.1
ElseIf (Elan2 >= 2 And Elan2 < 3) Then
Coef2 = 1.53
Coef3 = 1.2
ElseIf (Elan2 >= 3 And Elan2 < 5) Then
Coef2 = 1.78
Coef3 = 1.3
MsgBox "nok"
ElseIf (Elan2 >= 5 And Elan2 < 20) Then 'on devrait donc rentrer ici
MsgBox "ok"
Coef2 = 2.14
Coef3 = 1.4
ElseIf Elan2 >= 20 Then
Coef2 = 2.65
Coef3 = 1.5
End If


et pourtant on rentre dans la boucle de "nok" ...et je me retrouve avec
Coef2 = 1.78
Coef3 = 1.3

alors qu'ils devraient valoir :
Qui voudrait bien m'expliquer??!

Coef2 = 2.14
Coef3 = 1.4

J'ai essayé de débugger comme un grand..mais là....mystère !!!!!
quelqu'un aurait-il une idée?

Merci à tous !!!!
 

Pièces jointes

  • Classeur1.xlsm
    15.9 KB · Affichages: 41
Dernière modification par un modérateur:

Roland_M

XLDnaute Barbatruc
Re : Question inégalité qui donne un résultat ... étrange

re

les calculs côté vba ne sont pas aussi précis que sur les feuilles excel !?
ça demanderait une longue explication !
l'expérience fait que je ne suis plus surpris avec des affichages qui ne correspondent pas à la réalité en mémoire !
c'est un très vieux problème depuis le début de basic !

un ancien du forum avait déjà donné une explication que j'ai malheureusement égarée !
mais une recherche sur le net devait te donner l'explication ! vba et précision !?

single ou double ne garantie pas plus de précision c'est simplement un calcul avec plus de décimales !

EDIT: vite fait je tombe là-dessus:
[Toutes versions] Perte de précision lors de calculs simples
 
Dernière édition:

Micka28

XLDnaute Nouveau
Re : Question inégalité qui donne un résultat ... étrange

Encore Merci Roland_M pour ta réponse pertinente !
Je risque donc d'être fort embêté par la suite...car pour trouver ce genre d'erreurs, j'ai du débugger mes lignes de code (plusieurs centaines..)...durant plusieurs heures !!
D'autant que cette erreur de calcul est imprévisible !
Grr VBA !!!!!

Merci encore à toi pour le coup de main..je peux donc repartir dans le droit chemin :)
 
Dernière modification par un modérateur:

Roland_M

XLDnaute Barbatruc
Re : Question inégalité qui donne un résultat ... étrange

re

je sais j'avais des erreurs dans ma gestion de comptes que j'ai solutionné
en utilisant des variables Currency plutôt que Single

c'est un véritable problème pour les tests !
certains disent que la précision est suffisante mais ils ne comprennent pas que lors des tests si < ou = ou >
et bien si au lieu de 4 tu as 3.99999999 et bien le résultat est faux !
 
Dernière édition:

ODVJ

XLDnaute Impliqué
Re : Question inégalité qui donne un résultat ... étrange

Bonjour à tous,

essaye ce code :
Code:
MsgBox "(0.8 - 4 / 5) * 100000000000000#    vaut    " & (0.8 - 4 / 5) * 100000000000000#
diametre2 = diametre2 * 4 / 5
La 1ère ligne montre la différence entre 0.8 et 4/5. (tu la vires dès que tu seras convaincu)
La seconde remplace ton calcul de diametre2.

Ton code qui suit l'affectation de diamètre2 retombe alors sur ses pattes.

Cordialement
 

Micka28

XLDnaute Nouveau
Re : Question inégalité qui donne un résultat ... étrange

Pour ce qui est de ta première ligne de code, je le comprends sans problème;, à un moment donné, on a une erreur de précision...ok !
Mais qu'Excel "déconne" pour comparer deux nombres à une décimale...là..ça m'a étonné !!!! :mad:
Merci pour l'astuce du 4/5, c'est la solution que je vais adopter :)
 

Dranreb

XLDnaute Barbatruc
Re : [RESOLU] Question inégalité qui donne un résultat ... étrange

Bonsoir.
Non, il ne ne compare pas deux nombres à 1 décimales.
Il compare deux nombres binaires en virgule flottante double précision différents, mais suffisamment proches pour que leur visualisation sous forme de nombre décimal ne permet pas de voir de différence.
Il n'y a pas de décimales dans les nombres de type Double, constituant aussi les valeurs de cellules.
Ce n'est pas Excel qui en est la cause, c'est une question de technologie machine.
 
Dernière édition:

Statistiques des forums

Discussions
312 414
Messages
2 088 225
Membres
103 774
dernier inscrit
b'njah974