Microsoft 365 VBA incompréhension inégalité

  • Initiateur de la discussion Initiateur de la discussion danielco
  • Date de début Date de début
  • Mots-clés Mots-clés
    vba

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

danielco

XLDnaute Accro
Bonjour,

Dans la cellule R1327, j'ai 18,32, la cellule S1327 est vide et la cellule T1327 contient 2,99

Capture d'écran 2025-04-04 110539.png


?[r1327]=18.32
Vrai
?[s1327]=0
Vrai
?[t1327]=2.99
Vrai
?[r1327]+[s1327]+[t1327]
21,31

?[r1327]+[s1327]+[t1327]=21,31
Faux 31
?[r1327]+[s1327]+[t1327]=21.31
Faux

Les cellules sont au format standard et n'ont pas de décimales cachées. Je devrais donc avoir VRAI au lieu de FAUX ?

Avez-vous une explication ?

Merci d'avance.

Daniel
 

Pièces jointes

  • Capture d'écran 2025-04-04 110326.png
    Capture d'écran 2025-04-04 110326.png
    6.6 KB · Affichages: 5
Solution
Pourriez-vous m'expliquer comment vous obtenez ce résultat ?
Un peu compliqué, ça … En gros j'extrais d'abord du Double l'exposant de puissance de 2, puis je divise le Double par 2 ^ cet exposant pour obtenir une mantisse >=1 et <2. Pour la restitution exacte en décimal je passe par une représentation en base numérique 10000 codée en tableaux dynamiques d'Integer.
Est-ce que cela veut dire qu'on ne peut pas utiliser ces nombres.
Ça veut dire qu'ils ne peuvent pas être codés exactement en Double. Il peuvent l'être en Currency et en Variant/Decimal.
Comment contourner ?
Une pratique archi classique pour estimer si deux valeurs numériques obtenues par des voies différentes sont quasi égales consiste à tester si la...
Bonjour.
Joignez votre classeur et je pourrais vous dire quelles sont exactement les valeurs de vos cellules.
Cela dit, ayant entré les valeurs citées dans mon classeur d'analyse, je peux déjà vous dire ceci :
Cellule C22, constante affichée "18,32" par format "Standard",
vaut: +1,&H251EB851EB852 × 2^+&H004, soit: 2578310786669609 / 2^47,
soit: 18,32000000000000028421709430404007434844970703125
———————————————————————————————————
Cellule C23, constante affichée "2,99" par format "Standard",
vaut: +1,&H7EB851EB851EC × 2^+&H001, soit: 1683220360729723 / 2^49,
soit: 2,9900000000000002131628207280300557613372802734375
———————————————————————————————————
Cellule C24, formule: =C22+C23, affichée "21,31" par format "Standard",
vaut: +1,&H54F5C28F5C290 × 2^+&H004, soit: 374889484606505 / 2^44,
soit: 21,31000000000000227373675443232059478759765625
———————————————————————————————————
Cellule C25, constante affichée "21,31" par format "Standard",
vaut: +1,&H54F5C28F5C28F × 2^+&H004, soit: 5998231753704079 / 2^48,
soit: 21,309999999999998721023075631819665431976318359375
 
Bonjour.
Joignez votre classeur et je pourrais vous dire quelles sont exactement les valeurs de vos cellules.
Cela dit, ayant entré les valeurs citées dans mon classeur d'analyse, je peux déjà vous dire ceci :
Cellule C22, constante affichée "18,32" par format "Standard",
vaut: +1,&H251EB851EB852 × 2^+&H004, soit: 2578310786669609 / 2^47,
soit: 18,32000000000000028421709430404007434844970703125
———————————————————————————————————
Cellule C23, constante affichée "2,99" par format "Standard",
vaut: +1,&H7EB851EB851EC × 2^+&H001, soit: 1683220360729723 / 2^49,
soit: 2,9900000000000002131628207280300557613372802734375
———————————————————————————————————
Cellule C24, formule: =C22+C23, affichée "21,31" par format "Standard",
vaut: +1,&H54F5C28F5C290 × 2^+&H004, soit: 374889484606505 / 2^44,
soit: 21,31000000000000227373675443232059478759765625
———————————————————————————————————
Cellule C25, constante affichée "21,31" par format "Standard",
vaut: +1,&H54F5C28F5C28F × 2^+&H004, soit: 5998231753704079 / 2^48,
soit: 21,309999999999998721023075631819665431976318359375

Bonjour,
Pourriez-vous m'expliquer comment vous obtenez ce résultat ? Est-ce que cela veut dire qu'on ne peut pas utiliser ces nombres. Comment contourner ?
Je joins le classeur demandé.
Daniel
 

Pièces jointes

Pourriez-vous m'expliquer comment vous obtenez ce résultat ?
Un peu compliqué, ça … En gros j'extrais d'abord du Double l'exposant de puissance de 2, puis je divise le Double par 2 ^ cet exposant pour obtenir une mantisse >=1 et <2. Pour la restitution exacte en décimal je passe par une représentation en base numérique 10000 codée en tableaux dynamiques d'Integer.
Est-ce que cela veut dire qu'on ne peut pas utiliser ces nombres.
Ça veut dire qu'ils ne peuvent pas être codés exactement en Double. Il peuvent l'être en Currency et en Variant/Decimal.
Comment contourner ?
Une pratique archi classique pour estimer si deux valeurs numériques obtenues par des voies différentes sont quasi égales consiste à tester si la valeur absolue de leur différence est inférieure à un très petit seuil.

J'ai ajouté deux formules à votre classeur et :

'[test carine.xlsx] 1 TOUT'!A1, constante affichée "18,32" par format "Standard",
vaut: +1,&H251EB851EB852 × 2^+&H004, soit: 2578310786669609 / 2^47,
soit: 18,32000000000000028421709430404007434844970703125
———————————————————————————————————
'[test carine.xlsx] 1 TOUT'!C1, constante affichée "2,99" par format "Standard",
vaut: +1,&H7EB851EB851EC × 2^+&H001, soit: 1683220360729723 / 2^49,
soit: 2,9900000000000002131628207280300557613372802734375
———————————————————————————————————
'[test carine.xlsx] 1 TOUT'!D1, formule: =A1+C1, affichée "21,31" par format "Standard",
vaut: +1,&H54F5C28F5C290 × 2^+&H004, soit: 374889484606505 / 2^44,
soit: 21,31000000000000227373675443232059478759765625
———————————————————————————————————
'[test carine.xlsx] 1 TOUT'!E1, formule: =ARRONDI(D1;2), affichée "21,31" par format "Standard",
vaut: +1,&H54F5C28F5C28F × 2^+&H004, soit: 5998231753704079 / 2^48,
soit: 21,309999999999998721023075631819665431976318359375
 
Dernière édition:
Un peu compliqué, ça … En gros j'extrais d'abord du Double l'exposant de puissance de 2, puis je divise le Double par 2 ^ cet exposant pour obtenir une mantisse >=1 et <2. Pour la restitution exacte en décimal je passe par une représentation en base numérique 10000 codée en tableaux dynamiques d'Integer.
Ça veut dire qu'ils ne peuvent pas être codés exactement en Double. Il peuvent l'être en Currency et en Variant/Decimal.

Une pratique archi classique pour estimer si deux valeurs numériques obtenues par des voies différentes sont quasi égales consiste à tester si la valeur absolue de leur différence est inférieure à un très petit seuil.

J'ai ajouté deux formules à votre classeur et :

'[test carine.xlsx] 1 TOUT'!A1, constante affichée "18,32" par format "Standard",
vaut: +1,&H251EB851EB852 × 2^+&H004, soit: 2578310786669609 / 2^47,
soit: 18,32000000000000028421709430404007434844970703125
———————————————————————————————————
'[test carine.xlsx] 1 TOUT'!C1, constante affichée "2,99" par format "Standard",
vaut: +1,&H7EB851EB851EC × 2^+&H001, soit: 1683220360729723 / 2^49,
soit: 2,9900000000000002131628207280300557613372802734375
———————————————————————————————————
'[test carine.xlsx] 1 TOUT'!D1, formule: =A1+C1, affichée "21,31" par format "Standard",
vaut: +1,&H54F5C28F5C290 × 2^+&H004, soit: 374889484606505 / 2^44,
soit: 21,31000000000000227373675443232059478759765625
———————————————————————————————————
'[test carine.xlsx] 1 TOUT'!E1, formule: =ARRONDI(D1;2), affichée "21,31" par format "Standard",
vaut: +1,&H54F5C28F5C28F × 2^+&H004, soit: 5998231753704079 / 2^48,
soit: 21,309999999999998721023075631819665431976318359375
Merci.
Daniel
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Retour