Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Problème sur condition "<=" vba

JuZi

XLDnaute Nouveau
Bonjour à tous,

Dans un programme relativement simple contenant plusieurs boucles imbriquées, je rencontre le problème suivant:

dans une ligne de type " Do While x <= L " où x est une variable et L une constante, toutes 2 déclarées en Double, il arrive parfois (et parfois pas), de façon apparemment aléatoire, que le programme n'entre pas dans la boucle quand x = L ...

Je précise que ma connaissance en vba est assez restreinte... N'y-aurait-il donc pas une explication toute simple à ce problème ?
 

JuZi

XLDnaute Nouveau
Re : Problème sur condition "<=" vba

Merci Lone-wolf

x varie de 0 à L avec un pas de 0,1.
L est égale à une valeur renseignée par l'utilisateur (10 par exemple).

Pour x=0 jusqu'à x=9,9 tout fonctionne correctement. Mais quand x passe à 10 donc quand x=L, le programme ne rentre pas toujours dans la boucle alors qu'il devrait puisque la condition est "Do while x <= L"

J'ai mis le fichier en pj, au cas où il y en a qui s'ennuieraient
 

Pièces jointes

  • Programme CDR v1.xlsm
    24.8 KB · Affichages: 20

eriiic

XLDnaute Barbatruc
Re : Problème sur condition "<=" vba

Bonjour,

ça doit être dû à une perte de précision suite aux conversions décimal/binaire.
Essaie avec :
Code:
Do While Round(y, 6) <= Round(L, 6)
eric

edit : ajoute en-dessous la ligne :
If (Round(y, 6) = Round(L, 6)) <> (y = L) Then Debug.Print y - L: Stop
Tu verras que pour y=L=2 en fait y - L = 4.44089209850063E-16 et non 0
 
Dernière édition:

Hieu

XLDnaute Impliqué
Re : Problème sur condition "<=" vba

Salut tous,

Je m'incruste à la conversation,
Ca ne repond pas à la question du tout, mais bon ^^

Pourquoi ne pas remplacer :
Code:
x=0
Do While x <= L
...
x=x+p
loop

Par :
Code:
for x = 0 to L step p
...
next x

Perso, j'ai toujours un doute entre "while" et "until" (peut etre aussi dû à mes lacunes en anglais ^^)

++
 

eriiic

XLDnaute Barbatruc
Re : Problème sur condition "<=" vba

Re,

Pourquoi ne pas remplacer : ... par : ...

Pas mauvaise idée mais avec Step 0.1 le problème se reposera.
Code:
Sub test()
    Dim i As Single
    For i = 0 To 2 Step 0.1
        Debug.Print i
    Next i
End Sub
s'arrêtera à 1.9
Il faudrait un pas de 1 et diviser par 10 avant d'utiliser i.
eric
 

Hieu

XLDnaute Impliqué
Re : Problème sur condition "<=" vba

Re,

Que fait:
Code:
        Debug.Print i

??

En effet, j'ai remarqué la problématique. Bizarre... et dommage, j'étais convaincu de mon idée ^^

++
 

JuZi

XLDnaute Nouveau
Re : Problème sur condition "<=" vba



Bonsoir tout le monde,

Merci eriiiic, c'est exactement la solution à mon problème!
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…