Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2010 Tronquer un nombre décimal/rationnel

Magic_Doctor

XLDnaute Barbatruc
Bonjour,

J'ai presque honte de poser cette question, mais je la pose quand même.

J'utilise une formule que j'ai développée. J'obtiens quasiment toujours un nombre décimal ou plutôt rationnel. Bref il y a toujours un paquet de chiffres après la virgule. Je voudrais tronquer ce chiffre à uniquement 2 décimales après la virgule mais sans affecter pour autant la 2ème décimale, de telle sorte que si celle-ci est suivie d'un "5" (3ème décimale) elle ne soit pas augmentée d'une unité.
Je m'explique au travers d'un exemple.
J'ai écri :
VB:
[N9] = Application.WorksheetFunction.Round([C7] * [F6] / ([C8] * firstvolrestant), 2)
Ce qui donne :
[N9] = 0,746268656716418 soit, en arrondissant : 0,75
Or, je voudrais 0,74

Comment s'y prendre ?

Merci pour tout commentaire.
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Bonjour à tous

Comme cela peut être
VB:
Sub a()
Range("A1") = 0.746268656716418
'deux possibilités
MsgBox Application.Floor(Range("A1"), 0.01)
MsgBox Application.RoundDown(Range("A1"), 2)
End Sub

EDITION: Bonjour JHA, même idée que toi
 
Dernière édition:

JHA

XLDnaute Barbatruc
Bonjour à tous,

Pourquoi ne pas utiliser la fonction arrondi.inf()
=ARRONDI.INF(N9;2)
=ARRONDI.INF(0,746268656716418;2)

Edit: Bonjour Staple, Bonjour Modeste Geedee

JHA
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Bonjour ModesteGeedee

Je venais de dire qu'on ne peut pas utiliser Application.Trunc (voir mon précédent message)
(message d'erreur (en tout cas) dans Excel 2013)

Donc pour y pallier, une fonction personnalisée
VB:
Sub b()
Range("A1") = 0.746268656716418
MsgBox TRONQUER(Range("A1"), 2)
End Sub
Public Function TRONQUER(ByVal V As Double, ByVal N As Integer) As Double
TRONQUER = Int(V * (10 ^ N)) / (10 ^ N)
End Function
 

Magic_Doctor

XLDnaute Barbatruc
Bonjour tout le monde,

D'abord, merci pour votre intérêt.

Modeste geedee, je confirme ce qu'avance Staple1600 :
VB:
WorksheetFunction.Trunc([N9],2)
ne marche pas !
J'avais essayé en vain, d'où ma question.

Staple1600, ta fonction a l'air de marcher très bien.

Bonne journée.
 

Modeste geedee

XLDnaute Barbatruc
Bonsour®
Re

ModesteGeedee
Quel est le souci d'employer ARRONDI.INF ou PLANCHER plutôt que TRONQUE ?
PS: Sur ton Excel, tu as bien un message d'erreur avec Application.Trunc, non ?
affirmatif ...

il n'y a aucun souci, il s'agit d'une réponse à Mapomme il y a quelque temps à propos du même sujet ...

Quoique ...
l'arrondi inférieur ou Plancher se fait vers les valeurs inférieures, que le nombre soit positif ou négatif
alors que Tronque opère par rapprochement du zéro
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonsoir à toutes et tous ,

Sur mon Excel 2010, les instructions suivantes semblent fonctionner :
VB:
Sub test()
Dim v

   Range("b:b").ClearContents
   [b1] = [TRUNC(100*0.746268656716418,0)/100]

   [a2] = 55.5555
   [b2] = [=TRUNC(100*a2,0)/100]

   v = 99.1188
   ActiveWorkbook.Names.Add Name:="AUX", RefersToR1C1:=v
   [b3] = [TRUNC(100*aux,0)/100]

   [b4] = [TRUNC(-0.746268656716418*100,0)/100]

   [a5] = -55.5555
   [b5] = [=TRUNC(100*a5,0)/100]

   v = -99.1188
   ActiveWorkbook.Names.Add Name:="AUX", RefersToR1C1:=v
   [b6] = [TRUNC(100*aux,0)/100]

End Sub
 

Pièces jointes

  • Magic_Doctor- Troncatures- v1.xlsm
    14.7 KB · Affichages: 41
Dernière édition:

Staple1600

XLDnaute Barbatruc
Bonsoir mapomme

Oui cela fonctionne (aussi sur Excel 2013) mais en passant par Evaluate (les fameux [ ])
On ne peut pas utiliser Application.Trunc ou Application.WorksheetFunction.Trunc
 
Dernière édition:
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…