Affichage curieux

un internaute

XLDnaute Impliqué
Bonsoir le forum,
Il me semble avoir rencontré ce problème mais il y a longtemps.
Dans une cellule je suis à 0.00 €
Si je fait Format => Cellule => Standard ça m'affiche -1.56319E-13
Merci pour vos éventuels retours
Bonne fin de soirée
 

Modeste geedee

XLDnaute Barbatruc
Bonsoir le forum,
Il me semble avoir rencontré ce problème mais il y a longtemps.
Dans une cellule je suis à 0.00 €
Si je fait Format => Cellule => Standard ça m'affiche -1.56319E-13
Merci pour vos éventuels retours
Bonne fin de soirée
problème d'arrondi comptable
:oops: tu nous parles d'affichage...
:confused: mais quelle valeur lis-tu réellement dans la barre de formule ?
 

un internaute

XLDnaute Impliqué
Bonjour eriiiic,
Pour améloier mon "savoir" et pour toi j'avais oublié de dire que dans :
Format => Cellule => Nombre => Personnalisé => j'ai mis ça pour avoir des + et des - devant les nombres.
+ # ##0.00 €;[Rouge]- # ##0.00 €;[Bleu]0.00 €
Bien à toi
Bonne journée
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Moi ce que j'aimerais bien savoir c'est d'où vient cette valeur de cellule, qui est forcément de type Double.
Parce qu'en principe dans les cellules portant un format comportant un symbole monétaire, Excel enregistre normalement les valeurs en Currency.
 

eriiic

XLDnaute Barbatruc
Bonjour,

Tu es sûr Dranreb ?
Pour moi, sur feuille excel ne stocke qu'en Double toute valeur numérique. J'étais resté là dessus...
Currency n'existe qu'en vba.
eric

Edit : par acquis de conscience j'ai mis en monétaire B20 également et Debug.Print [B20].Value = 0 me retourne bien vrai.
Il semble que ta solution soit valide :)

Edit2 : quoique...
Regarde sur le 2nd fichier la colonne D par rapport à la B. Les nombres semblent bien stockés en Double.
Je ne sais pas ce que vous en pensez. S'ils étaient stocké en currency (virgule fixe à 4 décimales) on aurait le compte juste en B20
 

Pièces jointes

  • Classeur2.xlsx
    9.7 KB · Affichages: 42
  • Classeur2.1.xlsx
    10 KB · Affichages: 36
Dernière édition:

Dranreb

XLDnaute Barbatruc
Bonsoir
Dans le classeur Classeur2.1.xls, Feuil1 les nombres sont stocké en Double en colonne A, Currency en B et D, sauf B20 qui est Double.
J'ai cette fonction dans un classeur de macros perso, je m'en sers assez souvent :
VB:
Function TypeDon(ByVal Cel As Range) As String
TypeDon = TypeName(Cel.Value)
End Function
Edit: En revalidant la formule en B20 elle passe à 0 en Currency.
 

eriiic

XLDnaute Barbatruc
Non, je ne pense pas.
Monétaire est un bien un format comme les autres, pas une exception. Les nombres sont stockés en Double, même avec lui. C'est le format qui fait que tu lis un nombre arrondi à 0 en B20, mais il reste à -1.77636E-14.
Pour t'en convaincre met dans une cellule =B20=0, même avec B20 en format monétaire et tu verras.

Currency est un Entier avec virgule fixe à 4 décimales. Tu ne peux pas y avoir de perte de précision à la 14ème décimales (c'est d'ailleurs son but) comme tu le vois en B20, c'est impossible.
Par contre en D où j'arrondi sur chaque ligne je n'ai pas cette perte de précision sur la somme, tel que me ferait un vrai currency. 0 est bien 0
Pour moi plus de doute, tous les nombres sont bien stockés en Double sur une feuille. Et le format monétaire n'est qu'un arrondi à 2 décimales # ##0.00 plus l'ajout de la monnaie, non comparable au Currency de vba.

Par contre, si tu manipules la valeur B20 en vba, il la convertira en Currency à la lecture du fait du format monétaire. Et fera même un transit par Currency avant de remettre en double si ta variable est Double
eric
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Essayez ma fonction, c'est tout.
Code:
=TypeDon((B2))
Edit: Avant que je retouche aux formules =TypeDon(B20) affichait "Double".
J'ai alors sélectionné B20, cliqué dans la barre de formule, Entrée: c'est passé "Currency" et la B20 affichait 0,00 €
Mais si le format monétaire avait été mis après évaluation de la formule ça ne changeait plus sa valeur Double: il fallait d'abord la revalider.
 
Dernière édition:

eriiic

XLDnaute Barbatruc
Pas besoin d'essayer puisque vba va le convertir en Currency.

Ce qui ne l'empêche pas d'être un Double sur la feuille.
Toi fait le test =B20=0 sur la feuille, et tu verras qu'il te répondra FAUX malgré le format en monétaire sur B20 et que tu y lises 0.
Dans une autre cellule, que tu remettras en Standard après, tu mets =B20 :
tu lis toujours -1.77636E-14, nombre impossible à avoir en Currency (4 décimales).

Conclusion : une cellule est toujours un Double avec mantisse et exposant et ses problèmes de perte de précision et non un Currency, et monétaire est un format comme les autres (si ce n'est son interprétation par vba) qui se contente d'arrondir l'affichage.
Convaincu, ou vois-tu une faille dans ce raisonnement ?
eric
 

Dranreb

XLDnaute Barbatruc
Non. la Fonction TypeName de VBA ne convertit rien. Elle donne le nom du type d'une expression tel qu'il est, un point c'est tout.
Et encore une fois çà ne sert à rien de mettre un format monétaire sur une cellule dont la valeur est un Double: il faut la revalider pour qu'elle devienne Currency, sinon elle reste Double.

Tiens, un essai intéressant en passant :
VB:
Sub t()
MsgBox "[SUM(B2:B19)] - 19.953# = " & [SUM(B2:B19)] - 19.953 _
& vbLf & "[SUM(B2:B19)] - 19.953@ = " & [SUM(B2:B19)] - 19.953@
End Sub
Ça montre en fait que le -1,77636E-14 ne vient pas de la somme mais de la constante 19.953 imparfaitement représentée en Double.
 
Dernière édition:

eriiic

XLDnaute Barbatruc
Bonjour,

Intéressant.
Cependant MsgBox 19.953 - 19.953@ donne 0.
Admettons que parce qu'il a un currency dans l'expression il converti 19.953 en currency avant de faire la somme pour expliquer ce 0 et valider ton test.

Alors comment expliques-tu qu'en D20 la même formule =SOMME(D2:D19)-19.953-0 donne bien 0 ?
19.953 serait correct en D20 et pas dans B20 ?
La différence pour moi se situe plutôt qu'en D20 on somme les nombres (arrondis) tel qu'ils seraient s'ils étaient Currency.
J'ai beaucoup de mal à changer ma conclusion, Currency sur feuille n'existe pas, on a que des Doubles.
eric
 

Discussions similaires

Statistiques des forums

Discussions
312 185
Messages
2 086 016
Membres
103 093
dernier inscrit
Molinari