Contourner les problèmes de stockage des nombres par Excel

Bonjour,

Je galère depuis de nombreuses heures pour un problème tout bête, en tout cas en apparence : j'ai besoin de récupérer un prix sur une cellule excel (dans mon exemple 25,360000014305115 (je précise que je n'ai pas besoin d'une telle précision, qui doit d'ailleurs venir de pbs de calculs précédents via des macros vba), et de l'afficher dans une autre feuille excel, mais avec un "." comme séparateur décimal au lieu d'une "," , et un nombre limité à 3 chiffres après la virgule (25.36 dans le cas présent) car je dois ensuite transformer ma feuille en fichier csv, fichier qui doit être importé dans un logiciel.

Or je me retrouve systématiquement avec bien trop de chiffres après la virgule, ou plutôt après mon point.

J'ai essayé la fonction Round, j'ai essayé de multiplier mon nombre par mille, de récupérer la partie entière dans un "integer", puis de placer dans un "single" ce nombre divisé par mille.

Mais lorsque j'inscris mon nombre final dans ma cellule de destination, c'est à chaque fois le même problème : j'obtiens 25.3600006103516 ... (ou une variante selon l'approche de calcul)

Voici mon dernier code, que j'ai fini par décomposer au maximum pour tenter de comprendre en phase débogage (désolé si c'est donc un peu lourd), mais cela ne change rien :

dim prix1, prix3 as single
dim prix2, j, ligne, colonne as integer

prix1 = Cells(ligne, colonne).Value
prix1 = prix1 * 1000
prix2 = Int(prix1)
prix3 = prix2 / 1000

Cells(j, 8).Value = prix3
Cells(j, 8).NumberFormat = "0.00"
Cells(j, 8).NumberFormat = "@"

Jusqu'ici, tout va bien, et j'obtiens un joli 25,36 dans ma cellule.

Mais dès la ligne suivante, c'est la cata...

Cells(j, 8).Value = Replace(Cells(j, 8).Value, ",", ".")

Avec un joli 25.3600006103516 comme résultat dans ma cellule !

D'après ce que j'ai pu lire, cela viendrait de la façon dont Excel stocke les nombres. Comment puis-je toutefois contourner le problème, à défaut de le résoudre ?

Bonsoir,

Une proposition non réfléchie :

dim prix1, prix3 as string
dim prix2, j, ligne, colonne as integer

prix1 = Cells(ligne, colonne).Value
prix1 = prix1 * 1000
prix2 = "" & Int(prix1) & ""
prix3 = left(prix2, len(prix2)-2) & "." & right(prix2,2)

Cells(j, 8).Value = prix3
'Cells(j, 8).NumberFormat = "0.00"
'Cells(j, 8).NumberFormat = "@"

@ bientôt

LouReeD

Bonjour à tous,

il n'y a pas tes essais avec Round
[B2] = Replace(Round(prix3, 3), ",", ".")
fonctionne chez moi (?!?)
eric

Merci à tous les deux de votre retour rapide.

Pas encore testé la première solution, mais qui devrait effectivement marcher : de passer le champ en texte plus tôt est effectivement une solution.

Pour le Round, je l'avais appliqué en amont, à la place du "Int". En le plaçant plus tard au niveau de la cellule, et en faisant le remplace en même temps, cela fonctionne. Bien vu !

Bonsoir,

merci pour votre retour et vos remerciements ! Et bravo à eriiic !

@ bientôt

LouReeD

Rechercher des sujets similaires à "contourner problemes stockage nombres"