OVH Cloud OVH Cloud

Erreur de calcul

8 réponses
Avatar
Jacky
Bonjour à tous

Dans le code ci-dessous se produit des erreurs de calcul avec:
0.37
0.47
0.57
etc...
alors que
1.37 ou 1.47 et 1.57 ne posent pas de problème.
Sur xl97
Je ne pige pas pourquoi...Si quelqu'un pouvait tester.....

Salutations
JJ
'-------------
bil = Array(500, 200, 100, 50, 20, 10, 5, 2, 1, "0.50", "0.20", "0.10",
0.05, 0.02, 0.01)
x = InputBox("Entrer la somme à distribuer", "Calcul le nombre de billets et
de pièces")
msg = "Montant= " & x & Chr$(10) & Chr$(10)
If Val(x) = 0 Then Exit Sub
For i = 0 To 6
y = Int(x / bil(i))
If y > 1 Then
msg = msg & y & " Billets de " & bil(i) & "?" & Chr$(10)
ElseIf y > 0 Then
msg = msg & y & " Billet de " & bil(i) & "?" & Chr$(10)
End If
x = x - (y * bil(i))
Next

For j = i To 14
y = Int(x / bil(j))
If y > 1 Then
msg = msg & y & " Pièces de " & bil(j) & "?" & Chr$(10)
ElseIf y > 0 Then
msg = msg & y & " Pièce de " & bil(j) & "?" & Chr$(10)
End If
x = x - (y * bil(j))
Next

MsgBox msg
'--------------

8 réponses

Avatar
j
pb amusant !
excel ne fait pas toujours des calculs parfaitement exacts !
en cas de grande fatique, Excel peut indiquer 0.999999999 au lieu de 1
et quand tu fais int(0.999999), tu obtiens 0 au lieu de 1 !
dans ta macro, tu peux remplacer y=int(x/bil(j)) par
y = Int(0.000001 + x / bil(j))
c'est pas très très propre, mais ça marche...

http://jacxl.free.fr



"Jacky" a écrit dans le message
de news:
Bonjour à tous

Dans le code ci-dessous se produit des erreurs de calcul avec:
0.37
0.47
0.57
etc...
alors que
1.37 ou 1.47 et 1.57 ne posent pas de problème.
Sur xl97
Je ne pige pas pourquoi...Si quelqu'un pouvait tester.....

Salutations
JJ
'-------------
bil = Array(500, 200, 100, 50, 20, 10, 5, 2, 1, "0.50", "0.20", "0.10",
0.05, 0.02, 0.01)
x = InputBox("Entrer la somme à distribuer", "Calcul le nombre de billets
et

de pièces")
msg = "Montant= " & x & Chr$(10) & Chr$(10)
If Val(x) = 0 Then Exit Sub
For i = 0 To 6
y = Int(x / bil(i))
If y > 1 Then
msg = msg & y & " Billets de " & bil(i) & "?" & Chr$(10)
ElseIf y > 0 Then
msg = msg & y & " Billet de " & bil(i) & "?" & Chr$(10)
End If
x = x - (y * bil(i))
Next

For j = i To 14
y = Int(x / bil(j))
If y > 1 Then
msg = msg & y & " Pièces de " & bil(j) & "?" & Chr$(10)
ElseIf y > 0 Then
msg = msg & y & " Pièce de " & bil(j) & "?" & Chr$(10)
End If
x = x - (y * bil(j))
Next

MsgBox msg
'--------------




Avatar
AV
Dans le fil du
03/12/04 18:01
Il y a la question et des réponses

AV
Avatar
Jacky
Bonjour Alain

J'ai vu, mais celle de Pounet95 me fait une erreur sur Replace..
Reste = CDbl(Replace(Rep, ".", ","))
C'est pour cela que j'ai construit la mienne.
Sur un autre PC (nt -xl 97) avec mon code j'ai l'erreur 13 type
incompatible sur ''y = Int(x / bil(j))''
Je ne saisie pas tout à fait la cause.
Solution peut-être pour que mon code fonctionne sans erreur ??

Salutations
JJ

"AV" a écrit dans le message de
news:
Dans le fil du
03/12/04 18:01
Il y a la question et des réponses

AV




Avatar
Jacky
Bonjour

Je n'ai pas encore pu tester ta solution , pour le moment sur un autre pc
(nt xl97) , j'ai l'erreur 13 '' type incompatible''
sur " y = Int(x / bil(j))"
Tu as une idée ??

Salutations
JJ

"" a écrit dans le message de
news:41b7ec4a$0$30124$
pb amusant !
excel ne fait pas toujours des calculs parfaitement exacts !
en cas de grande fatique, Excel peut indiquer 0.999999999 au lieu de 1
et quand tu fais int(0.999999), tu obtiens 0 au lieu de 1 !
dans ta macro, tu peux remplacer y=int(x/bil(j)) par
y = Int(0.000001 + x / bil(j))
c'est pas très très propre, mais ça marche...

http://jacxl.free.fr



"Jacky" a écrit dans le
message

de news:
Bonjour à tous

Dans le code ci-dessous se produit des erreurs de calcul avec:
0.37
0.47
0.57
etc...
alors que
1.37 ou 1.47 et 1.57 ne posent pas de problème.
Sur xl97
Je ne pige pas pourquoi...Si quelqu'un pouvait tester.....

Salutations
JJ
'-------------
bil = Array(500, 200, 100, 50, 20, 10, 5, 2, 1, "0.50", "0.20", "0.10",
0.05, 0.02, 0.01)
x = InputBox("Entrer la somme à distribuer", "Calcul le nombre de
billets


et
de pièces")
msg = "Montant= " & x & Chr$(10) & Chr$(10)
If Val(x) = 0 Then Exit Sub
For i = 0 To 6
y = Int(x / bil(i))
If y > 1 Then
msg = msg & y & " Billets de " & bil(i) & "?" & Chr$(10)
ElseIf y > 0 Then
msg = msg & y & " Billet de " & bil(i) & "?" & Chr$(10)
End If
x = x - (y * bil(i))
Next

For j = i To 14
y = Int(x / bil(j))
If y > 1 Then
msg = msg & y & " Pièces de " & bil(j) & "?" & Chr$(10)
ElseIf y > 0 Then
msg = msg & y & " Pièce de " & bil(j) & "?" & Chr$(10)
End If
x = x - (y * bil(j))
Next

MsgBox msg
'--------------








Avatar
AV
J'ai vu, mais celle de Pounet95 me fait une erreur sur Replace..
Reste = CDbl(Replace(Rep, ".", ","))


C'est parceque tu fonctionnes sous XL97
pour une instruction compatible :
Remplacer
Reste = CDbl(Replace(Rep, ".", ","))
par
Reste = CDbl(Application.Substitute(Rep, ".", ","))

AV

Avatar
Jacky
Ok Merci, je vais faire.
Heu! et la mienne à moi tout seul ;-) ne te plait pas ??

JJ

"AV" a écrit dans le message de
news:
J'ai vu, mais celle de Pounet95 me fait une erreur sur Replace..
Reste = CDbl(Replace(Rep, ".", ","))


C'est parceque tu fonctionnes sous XL97
pour une instruction compatible :
Remplacer
Reste = CDbl(Replace(Rep, ".", ","))
par
Reste = CDbl(Application.Substitute(Rep, ".", ","))

AV





Avatar
Jacky
Presque aussi têtu que Pounet
Pour ceux que cela interresse le code qui fonctionne
'--------------
bil = Array("500", "200", "100", "50", "20", "10", "5", "2", "1", "0.50",
"0.20", "0.10", "0.05", "0.02", "0.01")
x = InputBox("Entrez la somme à distribuer", "Calcul le nombre de billets et
de pièces")
x = Format(Val(x), "0.00")
If x = 0 Then Exit Sub
msg = "Montant= " & x & Chr$(10) & Chr$(10)
For i = 0 To 6
y = Int(0.000001 + x / Val(bil(i)))
If y > 1 Then
msg = msg & y & " Billets de .." & bil(i) & " ?" & Chr$(10)
ElseIf y > 0 Then
msg = msg & y & " Billet de ..." & bil(i) & " ?" & Chr$(10)
End If
x = x - Val((y * bil(i)))
Next

For j = i To 14
y = Int(0.000001 + x / Val(bil(j)))
If y > 1 Then
msg = msg & y & " Pièces de .. " & bil(j) & " ?" & Chr$(10)
ElseIf y > 0 Then
msg = msg & y & " Pièce de ..." & bil(j) & " ?" & Chr$(10)
End If
x = x - (y * Val(bil(j)))
Next

MsgBox msg
'--------------
JJ

"Jacky" a écrit dans le message
de news:
Bonjour à tous

Dans le code ci-dessous se produit des erreurs de calcul avec:
0.37
0.47
0.57
etc...
alors que
1.37 ou 1.47 et 1.57 ne posent pas de problème.
Sur xl97
Je ne pige pas pourquoi...Si quelqu'un pouvait tester.....

Salutations
JJ
'-------------
bil = Array(500, 200, 100, 50, 20, 10, 5, 2, 1, "0.50", "0.20", "0.10",
0.05, 0.02, 0.01)
x = InputBox("Entrer la somme à distribuer", "Calcul le nombre de billets
et

de pièces")
msg = "Montant= " & x & Chr$(10) & Chr$(10)
If Val(x) = 0 Then Exit Sub
For i = 0 To 6
y = Int(x / bil(i))
If y > 1 Then
msg = msg & y & " Billets de " & bil(i) & "?" & Chr$(10)
ElseIf y > 0 Then
msg = msg & y & " Billet de " & bil(i) & "?" & Chr$(10)
End If
x = x - (y * bil(i))
Next

For j = i To 14
y = Int(x / bil(j))
If y > 1 Then
msg = msg & y & " Pièces de " & bil(j) & "?" & Chr$(10)
ElseIf y > 0 Then
msg = msg & y & " Pièce de " & bil(j) & "?" & Chr$(10)
End If
x = x - (y * bil(j))
Next

MsgBox msg
'--------------




Avatar
AV
Heu! et la mienne à moi tout seul ;-) ne te plait pas ??


Ben je la snobe pas mais je ne m'y suis pas penché dessus dans la mesure où des
solutions avaient été données récemment

AV