Rendre un nombre avec deux decimals

apt

XLDnaute Impliqué
Bonsoir à tous,

Dans A1, j'ai le nombre 99,4328922495274

Pour l'afficher sous forme de xx.xx (99,43), je devrais faire :

Code:
Range("A1").NumberFormat = "0.00"

Mais lorsque je clique dans la cellule A1, je trouve que le nombre est toujours 99,4328922495274.

Alors comment rendre un nombre avec deux décimales dans la cellule elle même ?

Merci.
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : Rendre un nombre avec deux decimals

Bonsoir le fil, apt

apt
Tu as essayé ceci ?
=ARRONDI(A1;2)

Ce qui en VBA peut donner par exemple
Code:
Sub a()
Dim X
X = 99.4328922495274
[A1] = Round(X, 2)
End Sub
 
Dernière édition:

Misange

XLDnaute Barbatruc
Re : Rendre un nombre avec deux decimals

Bonjour
Attention, il ne faut pas confondre dans excel deux choses : le format d'affichage d'un nombre et le nombre lui même.
Si tu écris en =pi() (3.141592654...)
tu peux demander un affichage sans décimales, avec 2, 3 ,... 10 décimales, mais excel stocke toujours le nombre maxi de décimales.
si tu demandes un affichage sans aucune décimale
=pi()*4 renvoie en réalité 12.566....
et affiche 13


Maintenant si tu utilises des fonctions qui tronquent les chiffres après x décimales ou qui arrondissent les nombres (tronque, arrondi, arrondi.sup... plancher, plafond...), excel ne travaille plus avec les nombres complets mais bien avec les nombres tronqués.
Dans ce cas
=TRONQUE(PI();0)*4 renvoie 12.0000000
et tu ne peux plus revenir en arrière.
Il faut donc toujours faire très attention quand on arrondit des nombres au moment où on le fait.
L'exemple type qui montre comment cela affecte un résultat c'est le calcul des factures incluant la TVA

Tu achètes 11,26 litres d'un produit à 10,57 euros le litres HT soit 119,0182 €
Si tu calcules la TVA sur la valeur non arrondie elle est de 23.3275672
la somme des deux valeurs non arrondies est de 142.3457672 ce qui se paye 142.35€

Mais si tu calcules la TVA sur le HT arrondi (119,02€), ça te donne 23.34752
tu arrondis la TVA (23,35) et tu l'ajoutes au montant HT arrondi, ça te donne un prix à payer de 142,47, soit 12 centimes de plus que par l'autre méthode...
D'où l'intérêt de savoir QUAND il faut arrondir.
 

Modeste geedee

XLDnaute Barbatruc
Re : Rendre un nombre avec deux decimals

Bonsour®
Bonsoir à tous,

Dans A1, j'ai le nombre 99,4328922495274

Pour l'afficher sous forme de xx.xx (99,43), je devrais faire :

Code:
Range("A1").NumberFormat = "0.00"

Mais lorsque je clique dans la cellule A1, je trouve que le nombre est toujours 99,4328922495274.

Alors comment rendre un nombre avec deux décimales dans la cellule elle même ?

Merci.
:cool:
Qu'est-ce qui te géne dans le fait que la valeur interne (celle que l'on voit dans la barre de formule)d'une cellule ne soit pas à la précision demandée. ???
Ce que tu vois au niveau de la cellule n'est en fait qu'un format d'affichage :
format Standard ou général ou encore Style "Normal"

Comme expliqué par Misange, l'arrondi financier est a manipuler avec circonception,
autre exemple : le banquier qui mettait sur un compte privé les arrondis inférieurs au centimes de tout les comptes de ses clients.

Par ailleurs comment ferait-on pour afficher des nombres réels tel que Pi, Racine de 2, 1/6éme etc...

Si tu veux ajouter 1/3 de quelque chose tu n'ajoute pas 0,33(i.e 33%) de cette chose
mais 0.33333333333.....(i.e 33,33333....%)

si tu veux absolument travailler avec seulement 2 décimales, il te faut définir la régle d'arrondi :
arrondi au centime inferieur :
=ENT(100*A1)/100
arrondi au centime superieur :
=(1+ENT(100*A1))/100
arrondi au centime le plus proche :
=ENT(0,5+(100*A1))/100
 

Jiheme

XLDnaute Accro
Re : Rendre un nombre avec deux decimals

]Bonjour le fil,

Mais si tu calcules la TVA sur le HT arrondi (119,02€), ça te donne 23.34752
tu arrondis la TVA (23,35) et tu l'ajoutes au montant HT arrondi, ça te donne un prix à payer de 142,47, soit 12 centimes de plus que par l'autre méthode...

Misange, désolé je ne suis pas d'accord avec ton calcul, je trouve 142.37 soit 0.02 d'écart.

Personnellement pour ce qui est factures, je préconise d'arrondir à 2 chiffres ce qui évite que HT +TVA soit différent du TTC, ce qui pour le comptable que je suis est génant !

A+
 

Misange

XLDnaute Barbatruc
Re : Rendre un nombre avec deux decimals

]Bonjour le fil,



Misange, désolé je ne suis pas d'accord avec ton calcul, je trouve 142.37 soit 0.02 d'écart.

Personnellement pour ce qui est factures, je préconise d'arrondir à 2 chiffres ce qui évite que HT +TVA soit différent du TTC, ce qui pour le comptable que je suis est génant !

A+

tu as probablement raison, j'ai fais ça vite mais le but était d'illustrer que suivant le moment ou l'on fait l'arrondi (sur chaque élément de la somme ou sur la somme) ça ne donne pas nécessairement le même résultat, pas de dire comment il faut faire en comptabilité. Quand tu dis "je préconise d'arrondir à deux chiffres" justement le problème est là. Par exemple pour l'essence, le prix est à 3 chiffres après la virgule...
Quand tu achètes en devises étrangères tu te retrouves aussi très facilement avec des prix à bien plus de 2 chiffres après la virgule en fonction du taux de change.
Quand ton fournisseur t'accorde une remise de 6.2% sur ton prix d'achat, il faut bien arrondir à un moment donné..
bref les préconisations c'est bien mais tout dépend de qui fait la préconisation et bizarrement les fournisseurs ont souvent une méthode de calcul qui majore de 1ct la facture finale plutôt que de la minorer...
 

grisan29

XLDnaute Accro
Re : Rendre un nombre avec deux decimals

bonjour a vous
pour reste dans l'esprit du post, j'ai 2 lignes de codes que voici
Code:
.Cells(lig, "J").FormulaR1C1 = "=IF(RC[-2]=1,RC[-6]*RC[-4]*0.07,"""")"
.Cells(lig, "K").FormulaR1C1 = "=IF(RC[-3]=2,RC[-7]*RC[-5]*0.196,"""")"
qui fonctionnent bien mais écrivent acec 3;4;5;6 décimales,
ces lignes font le calcul de tva a chaque ajout d'article en col J où K mais comment faire pour qu'au moins le total ne soit pas a plusieurs décimales qui lui est calculer par ce code
Code:
des totaux montant HT, TVA5,5, TVA 19,6
For i = lig To 1 Step -1
    If .Cells(i, "F") <> "REPORT" And .Cells(i, "F") <> "Quantité" Then
        If IsNumeric(.Cells(i, "G")) Then ctrmt = ctrmt + .Cells(i, "G")
        
        If IsNumeric(.Cells(i, "J")) Then ctrtva7 = ctrtva7 + .Cells(i, "J")
        If IsNumeric(.Cells(i, "K")) Then ctrtva19 = ctrtva19 + .Cells(i, "K")
    Else
        If IsNumeric(.Cells(i, "G")) Then ctrmt = ctrmt + .Cells(i, "G")
        If IsNumeric(.Cells(i, "J")) Then ctrtva7 = ctrtva7 + .Cells(i, "J")
        If IsNumeric(.Cells(i, "K")) Then ctrtva19 = ctrtva19 + .Cells(i, "K")
       
        Exit For
    End If
Next i
    .Cells(lig + 1, "G") = ctrmt
    .Cells(lig + 1, "J") = ctrtva7
    .Cells(lig + 1, "K") = ctrtva19
ctrmt est le montant total de la colonne ht
ctrtva7 et 19 sont les montants totaux des colonnes
j'ai bien essayer .Cells(lig + 1, "J") .NumberFormat = "### 0,00 "

mais mets toutes les lignes sans virgule et a 3 chiffres incohérents

merci de vos lumières car la mienne ne s'allume plus

Pascal
 

apt

XLDnaute Impliqué
Re : Rendre un nombre avec deux decimals

Bonsoir Staple1600, Misange, Modeste geedee, Jiheme,

L'exemple type qui montre comment cela affecte un résultat c'est le calcul des factures incluant la TVA

Heureusement qu'a présent, je ne cherche pas à faire de la comptabilité.

C'est juste un chiffre représentant un pourcentage.

En essayant de créer un code VBA pour gérer les différentes fonction proposées j'ai des messages d'erreurs d’exécution.


Code:
Sub Arrondir()

    Range("B3").Select
    ActiveCell.Formula = "=ROUND(" & Range("A1") & ",2)" '"=ROUND(R[-2]C[-1],2)"
    Range("B4").Select
    ActiveCell.Formula = "=INT(100*" & Range("A1") & ")/100" '"=INT(100*R[-3]C[-1])/100"
    Range("B5").Select
    ActiveCell.Formula = "=(1+INT(100*" & Range("A1") & "))/100" '"=(1+INT(100*R[-4]C[-1]))/100"
    Range("B6").Select
    ActiveCell.Formula = "=INT(0.5+(100*" & Range("A1") & "))/100" '"=INT(0.5+(100*R[-5]C[-1]))/100"
    Range("B7").Select
End Sub
 

Modeste geedee

XLDnaute Barbatruc
Re : Rendre un nombre avec deux decimals

Bonsour®
:confused: Pourquoi écrire une macro pour écrire une formule faisant reference à une cellule fixe ???

ActiveCell.Formula = "=ROUND(" & Range("A1") & ",2)"
Range("A1") contient une valeur décimale avec un séparateur décimal FR=","
VBA ne sait pas interpreter numeriquement la formule constituée, il s'attend a un séparateur décimal US ".",
la virgule est ici interprétée comme séparateur d'argument.
:cool: pour vérification mettre un nombre entier en A1

Contournement :
Format US
ActiveCell.Formula = "=ROUND(" & WorksheetFunction.Substitute(Range("A1"), ",", ".") & ",2)"
ou bien
Format FR
ActiveCell.FormulaLocal = "=ARRONDI(" & Range("A1") & ";2)"
Code:
Sub Arrondir()
     Range("B3").Formula = "=ROUND(A1,2)"
     Range("B4").Formula = "=INT(100*A1)/100"
     Range("B5").Formula = "=(1+INT(100*A1))/100"
     Range("B6").Formula = "=INT(0.5+(100*A1))/100"
End Sub
 
Dernière édition:

MichD

XLDnaute Impliqué
Re : Rendre un nombre avec deux decimals

Bonjour,

Serait-ce que le monde a oublié ceci pour ceux qui veulent qu'un classeur déterminé
calcule avec le format affiché :

Options d'Excel / Options avancées / section : "lors du Calcul de ce classeur " coché :
"Définir le calcul avec la précision au format affiché"

En VBA, on obtient le même résultat avec ceci :
ThisWorkbook.PrecisionAsDisplayed = True

Si on coche cette option, on pourra utiliser ceci :
'------------------------
Sub test()
With Range("A5")
.NumberFormat = "# ### ##0.00"
.Value = Range("A1")
End With
End Sub
'------------------------

sinon il faut employer :

A ) Le nombre de dièses dépend de la taille des nombres
B ) On utilise le point pour définir le format "# ### ##0.00" à moins
d'une indication contraire dans les options régionales du panneau de configuration de Windows
C ) Cette approche permet de retourner dans la cellule une valeur plutôt qu'une formule inutile!
'------------------------
Sub test()
With Range("A5")
.NumberFormat = "# ### ##0.00"
.Value = Application.Round(Range("A1"))
End With
End Sub
'-------------------------

Pour M. le comptable, Excel a un type de variable "Currency" pour l'argent.
Cette variable tient compte de 4 décimales. Dim X As Currency

Même la banque du Canada exprime les taux de change en utilisant 4 décimales.
Je suppose qu'elle ne doit pas être la seule!
;-)
 

apt

XLDnaute Impliqué
Re : Rendre un nombre avec deux decimals

Bonsoir, Modeste geedee, MichD,

Modeste geedee :

J'ai essayé ce code :

Code:
For Each c In plage
    c = c * 100
    c.Formula = "=ROUND(c,2)"
Next

Mais le résultat est toujours "0.00", et lorsque je clique dans la barre de formule, je trouve ceci :

Code:
=ARRONDI(N:N;2)

N étant la colonne ou sont écris les valeurs.

MichD :

Quand j'exécute la macro test(), ça me déclenche cette erreur :

Nombre d'argument non valide

Et la ligne suivante est marquée :

Code:
.Value = Application.Round(Range("A1"))
 
Dernière édition:

Discussions similaires

Réponses
6
Affichages
540
Réponses
4
Affichages
276

Statistiques des forums

Discussions
313 026
Messages
2 094 498
Membres
106 035
dernier inscrit
antokoko