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

XL 2010 Recherche d'une fonction qui tronque un nombre décimal sans altérer la dernière décimale

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Magic_Doctor

XLDnaute Barbatruc
Supporter XLD
Bonjour,

Existerait-il une fonction permettant de manipuler un nombre décimal de la sorte ?
Supposons que cette fonction s'intitule "MaFonction".
MaFonction(15,3659879;3) --> 15,365 et non pas 15,366
 
Re,

En fonction VBA, cela donne :
VB:
Function tronquer(x As Range, n As Long)
   tronquer = Fix(x * 10 ^ n) / 10 ^ n
End Function
  • x étant le nombre à tronquer
  • n étant le nombre de décimale à conserver
 
Bonjour mapomme,

En attendant, j'avais bidouillé ça à partir d'une autre fonction que j'avais conservée :
VB:
Function TronquerDec(cell As Range, nbdec As Byte)

Dim tmp$, pos As Byte, res

  tmp = cell.Text
  pos = InStr(1, tmp, Application.International(xlDecimalSeparator))
  If pos = 0 Then
    res = 0
  Else
    res = Left(Right(tmp, Len(tmp) - pos), nbdec)
  End If
  If Len(res) = 1 Then res = res * 10
 
  TronquerDec = res * 10 ^ -nbdec + Int(cell.Value)
 
End Function
Le "TRONQUE" me convient davantage. En Anglais c'est "TRUNC". Mais si je veux l'utiliser en VBA ainsi :
VB:
Sub Essai()

Dim wf As WorksheetFunction

    [M16] = wf.TRUNC([M14], 3)

End Sub
ça plante...
Comment y remédier ?
 
Re,

D'ailleurs si vous tapez en VBA,
VB:
Sub test()
dim a
   a = Application.WorksheetFunction.
End Sub
vous verrez, après avoir tapez le point, que VBE ne vous propose pas Trunc dans la liste des fonctions ???
 
VB:
Sub test()
Debug.Print MaFonction(15.3659879, 3)
End Sub
Function MaFonction(V As Double, n As Integer) As Double
Dim T As String
T = Format(V, "#0." & String(100, "0"))
MaFonction = Left(T, Len(T) - 100 + n)
End Function
 
Bonsoir à tous,

Je viens de tout essayer et ce qui me paraît faire face à toutes les éventualités (nombre négatif, 0 pour le nombre de décimales...) est la solution de dysorthographie.

Cela dit en passant, c'est quand même incroyable qu'un truc en apparence aussi simple soit tellement prise de tête et qu'Excel n'ait pas prévu de fonction pour faire face à cette demande. C'est à croire que cette demande est exceptionnelle...

En tout cas merci pour votre aide.
 
re
salut
evaluate "trunc" ne fonctionne pas chez moi 2013

solution1
VB:
Sub test()
MsgBox tronque(15.3659879)
MsgBox tronque("15,3659879")
MsgBox tronque(15)
End Sub

Function tronque(x) As Double 'ici la source (x) doit être variant !!!
tronque = CDbl(Int(x) & IIf(InStr(x, ",") > 0, Mid(x, Len(Int(x)) + 1, 4), ""))
End Function

solution2

VB:
Sub test2()
MsgBox tronque2(15.3659879)
MsgBox tronque2("15,3659879")
MsgBox tronque2(15)
End Sub

Function tronque2(x As String) As Double ' x est en string
tronque2 = CDbl(Mid(x, 1, IIf(InStr(x, ",") > 0, InStr(1, x, ",") + 3, Len(x))))
End Function

solution3
VB:
Sub test3()
MsgBox tronque3(15.3659879)
MsgBox tronque3("15,3659879")
MsgBox tronque3(15)
End Sub

Function tronque3(x As String) As Double ' x est en string
tronque3 = CDbl(Mid(x, 1, IIf(InStr(x, ",") > 0, InStrRev(x, ",") + 3, Len(x))))
End Function

les 3 gèrent la source en double ou string et l'absence de décimales
 
Bonjour,

Je viens de tout essayer et ce qui me paraît faire face à toutes les éventualités (nombre négatif, 0 pour le nombre de décimales...) est la solution de dysorthographie
Parce que ma proposition présente des défauts chez toi ?
Pour rappel :
VB:
Evaluate("trunc(" & a & ", 3)")
eric
 
Bonjour
Parce que ma proposition présente des défauts chez toi ?
Pour rappel :
VB:
Evaluate("trunc(" & a & ", 3)")
Comme chez tous le monde, comme je m'y attendais, à moins d'avoir un Excel anglais.
Là ce serait mieux :
VB:
MsgBox Evaluate("TRUNC(" & Trim$(Str$(A)) & ",3)")
… mais pas aussi simple à mon avis que le Fix(x * 10 ^ n) / 10 ^ n de mapomme.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…