Probleme de somme boucle...
Résolu
GermPeru
Messages postés
175
Statut
Membre
-
yg_be Messages postés 24281 Statut Contributeur -
yg_be Messages postés 24281 Statut Contributeur -
Bonjour,
Mon problème est très simple a comprendre, je fais une boucle, j´additionne les chiffres petit a petit est quand c´est égale a 1 une message box.
Fonctionne avec toutes mes combinaison, jusqu´au moment mes valeur sont 0.825, 0.1, 0.075; la somme fait 1 (vérifier et revérifier ça fait 1). Je fais des tests et des tests pour comprendre avec d´autres macros, d´autres valeurs, sur d´autres feuille et avec d´autres formats, rien ni fait je n´ai pas de msgbox qui apparait.
Mais lorsque je converti en texte pour faire ma comparaison si j´ai ma message box qui apparait....
Ça me dépasse, je ne comprends pas, alors je sollicite l´aide d´un d´entre vous qui aura plus de lucidité que moi...
Merci d´avance
Mon problème est très simple a comprendre, je fais une boucle, j´additionne les chiffres petit a petit est quand c´est égale a 1 une message box.
Fonctionne avec toutes mes combinaison, jusqu´au moment mes valeur sont 0.825, 0.1, 0.075; la somme fait 1 (vérifier et revérifier ça fait 1). Je fais des tests et des tests pour comprendre avec d´autres macros, d´autres valeurs, sur d´autres feuille et avec d´autres formats, rien ni fait je n´ai pas de msgbox qui apparait.
Mais lorsque je converti en texte pour faire ma comparaison si j´ai ma message box qui apparait....
Ça me dépasse, je ne comprends pas, alors je sollicite l´aide d´un d´entre vous qui aura plus de lucidité que moi...
Merci d´avance
Sub test() Dim CantL As Double With Sheets("Plantilla") NbLi = .Range("A" & Rows.Count).End(xlUp).Row: TB = .Range("A2:L" & NbLi) For i = LBound(TB) To UBound(TB) CantL = CantL + CDbl(TB(i, 7)) If CantL = 1 Then MsgBox "ok" If CStr(CantL) = "1" Then MsgBox "ok" Next i End With End Sub
A voir également:
- Probleme de somme boucle...
- Formule somme excel colonne - Guide
- Somme si couleur - Guide
- Somme en anglais excel - Guide
- Somme excel ne fonctionne pas ✓ - Forum Excel
- Xiaomi s'éteint tout seul et se rallume en boucle - Forum Xiaomi
2 réponses
bonsoir germperu, je pense que c'est parce que 1 n'est pas toujours totalement égal à 1.
pour un ordi, 0.825 + 0.1 + 0.075 ne fait pas exactement 1. parce que l'ordi ne travaille pas avec une base décimale.
suggestion:
pour un ordi, 0.825 + 0.1 + 0.075 ne fait pas exactement 1. parce que l'ordi ne travaille pas avec une base décimale.
suggestion:
Dim CantL As single
Bonjour
C'est une conséquence du codage des décimaux
Essaies en comparant la différence CantL-1 à un nombre proche de 0 par exemple
If abs(CantL - 1) < 0.00001 Then MsgBox "ok"
Cdlmnt
C'est une conséquence du codage des décimaux
Essaies en comparant la différence CantL-1 à un nombre proche de 0 par exemple
If abs(CantL - 1) < 0.00001 Then MsgBox "ok"
Cdlmnt
Bonjour ccm81 et merci,
quant tu dis "conséquence du codage des décimaux" ça me sonne très abstrait; car durant mes tests j´ai testé les décimales:
-exemple 1
0.666666666666667
0.333333333333333
-exemple 2
0.100000000000000
0.017600000000000
0.639200000000000
0.043200000000000
0.100000000000000
0.050000000000000
0.030000000000000
0.020000000000000
C’est 2 exemples fonctionnent, mais pas avec: 0.825, 0.1, 0.075; alors que dans l´exemple 1 il y a plus de décimale et dans l´exemple 2 il y a plus de valeur a compter...
J´ai testé ta fonction et oui cela fonctionne ce qui veut dire que la somme n´est pas exactement égale 1?...
Cdt,
quant tu dis "conséquence du codage des décimaux" ça me sonne très abstrait; car durant mes tests j´ai testé les décimales:
-exemple 1
0.666666666666667
0.333333333333333
-exemple 2
0.100000000000000
0.017600000000000
0.639200000000000
0.043200000000000
0.100000000000000
0.050000000000000
0.030000000000000
0.020000000000000
C’est 2 exemples fonctionnent, mais pas avec: 0.825, 0.1, 0.075; alors que dans l´exemple 1 il y a plus de décimale et dans l´exemple 2 il y a plus de valeur a compter...
J´ai testé ta fonction et oui cela fonctionne ce qui veut dire que la somme n´est pas exactement égale 1?...
Cdt,
en modifiant la déclaration de ma variable a single cela fonctionne avec tous mes exemples... Aurais tu une explication que 1 ça fait pas 1 en double mais 1 en single? Alors que les deux sont des décimales.
Merci :)
en single, moitié moins précis, cela fait 1.00000, donc 1
Par tout hasard je cherche a me perfectionner en VBA, est ce que tu aurais une bonne référence de livre ou cours a me conseiller.
Merci yg_be