WorksheetFunction.sum

C

Chezmoi

Guest
Bonjour forum,

Je souhaitais mettre juste la valeur d'une somme dans une cellule.
Pour cela, jai fais le code ci-dessous :
Sheets(2).Range("A1").value = WorksheetFunction.Sum(Sheets(1).Range("A1:A3"))

Souci : voici le résultat que j'obtiens 387.270,709999999
Alors que le vrai résultat est 387.270,71
Vous savez pourquoi j'ai ce résultat érroné ?

merci davance
 
L

lea

Guest
Bonjour,

Les valeurs que contiennt la plage "A1:A3" sont-elles des valeurs calculées ou des données que tu as entrées ?
Dans le premier cas, la valeur approchée obtenue pour la somme pourrait s'expliquer du fait que tu as certainement limité le nombre de décimales à 2 dans cette plage.
Il te resterait alors à en faire autant pour la cellule "A1"
Dans le deuxième cas je ne sais pas
 
W

WILFRIED

Guest
SAlut

Je pense que cela doit venir de tes données qui doivent être issus d'un calcul et comme tu as du déffinir ta cellule avec un arrondi a deux chiffres après la virgule dans un cas et pas dans l'autre.

Pour eviter tous soussi tu peu :

Sheets(2).Range("A1").formula = WorksheetFunction.Sum(Sheets(1).Range("A1:A3"))
Sheets(2).Range("A1").numberfomat="#.##0,00"
ou
Sheets(2).Range("A1").numberfomat="# ##0,00"
si tu ne veux pas du point comme séparateur de centaine.

A+ Wilfried
 
C

Chezmoi

Guest
Bonjour à tous et merci !

Les valeurs de la plage A1:A3 sont valeurs brutes, non mise en forme et pas franchement possible. (cette plage correspond à ma base de données dont je ne souhaite pas trop modifier)

Donc c'est le second cas malheureusement.
Deplus j'ai bien fais : Sheets(2).Range("A1").numberfomat="#.##0,00"
Mais ca ne fais que voiler l'erreur de 0,000001 car ca arrondi.
Et même une infime erreur, en comptabilité cela reste inadmissible.. malheureusement !

PS: Jai fais :
Sheets(2).Range("A1").formula = Sum("A1:A3")
Et là il y a pas derreur mais je veux la valeur brute et non pas une forme (risqué si on change la base de donnée).
 
C

Chezmoi

Guest
Oula enfaite ca marche mais c'est bizarre !

J'ai mis le code si dessous
Sheets(2).Range("A1").numberfomat="#.##0,0000"

le résultat dans la cellule donne ca :
387.270,7100

Donc c'est très bien !!
Mais si on clique dessus dans le champ fx (pour voir le contenu) c'est écris :
387.270,70999999

Je tenais à le préciser car ca peut vous aider !!(du moins j'espère)
 
W

WILFRIED

Guest
RE

A quoi resembel tes donnée brut exactement (nombre de chiffre après la virgule) car cela peu venir de la. Dans tous les cas, le mode de concaténation aprés la virgule reste uniquement pour l'affichage. Si tu effectue des opérations elle utiliserons la valeur exacte (en fonction du nombre de chiffre aprés la virgule utilisable grace au principe de virgule flottante.).

Question :

Comment effectue tu le calcul de vérification pour dire qu'il n'y a que 2 chiffre aprés la virgule car si tu utilise une calculatrice standard cela vient peut-être qu'elle arrondi directement à deux chiffre après la virgule (mode fix 2)?

A+ Wilfried ;op
 
C

Chezmoi

Guest
Re Wilfried et merci de t'être intéréssé à mon problème.

Petite précision la plage n'est pas exactement A1:A3 :p
J'ai simplifié car le résultat est donné par des fonctions complexes mais juste.
Et je réalise mes testes pour etre exacte sur la plage A2:A744 mais en théorie ca ne devrais rien changer.

Sinon comment je sais que le résultat est faux ?
Réponse ben c'est simple je sais que dans mes données j'ai aucun nombre aillant plus de 3 nombres derrieres la virgule. Donc pour une somme le résultat 387.270,70999999 est forcément faux.
De plus, en fesant une formule normale dexcel "=Somme("A1":"A744")", le résultat est 387.270,710 !

J'ai joins mon classeur avec la macro !
Fais CTR + R pour la lancer et tu veras le résultat érroné dans la case D1.
 

Pièces jointes

  • exemple1.zip
    16.8 KB · Affichages: 80
  • exemple1.zip
    16.8 KB · Affichages: 85
  • exemple1.zip
    16.8 KB · Affichages: 97

Statistiques des forums

Discussions
312 323
Messages
2 087 290
Membres
103 509
dernier inscrit
mcn