Magic_Doctor
XLDnaute Barbatruc
Bonjour,
J'ai bricolé une fonction toute simple qui marche bien. Elle me renvoie soit le nombre de décimales après la virgule du chiffre traité, soit l'ensemble des chiffres après la virgule.
Si je rentre dans la fonction, par exemple, 25,000587, j'obtiens bien 000587 sous forme de chaîne (qui apparaîtra, bien évidemment, à gauche de la cellule du résultat.
Maintenant, si je rentre dans la fonction 125,298, j'obtiens bien 298, mais toujours sous forme de chaîne, et je voudrais, à ce moment là, que ce soit un chiffre (qui devrait apparaître à droite de la cellule du résultat).
J'ai essayé, sans succès, par différents moyens de régler ce problème.
J'ai bricolé une fonction toute simple qui marche bien. Elle me renvoie soit le nombre de décimales après la virgule du chiffre traité, soit l'ensemble des chiffres après la virgule.
Si je rentre dans la fonction, par exemple, 25,000587, j'obtiens bien 000587 sous forme de chaîne (qui apparaîtra, bien évidemment, à gauche de la cellule du résultat.
Maintenant, si je rentre dans la fonction 125,298, j'obtiens bien 298, mais toujours sous forme de chaîne, et je voudrais, à ce moment là, que ce soit un chiffre (qui devrait apparaître à droite de la cellule du résultat).
J'ai essayé, sans succès, par différents moyens de régler ce problème.
VB:
Function ChiffresAfterVirgule(dNum As Double, opt As Byte)
'Renvoie le nombre de chiffres après la virgule ou tous les chiffres après la virgule
'- dNum : le chiffre à traiter
'- opt : si opt = 1 --> le nombre de chiffres après la virgule
' si opt <> 1 --> tous les chiffres après la virgule
'Ex : 125,587349 | opt = 1 --> 6
' opt <> 1 --> 587349
Dim SepDec$, tmp, posDec, nb As Double, cap$
SepDec = Application.International(xlDecimalSeparator)
tmp = CStr(dNum)
posDec = InStr(tmp, SepDec)
nb = Len(tmp) - Len(Right(tmp, posDec)) 'nombre de chiffres après la virgule
cap = Right(dNum, nb) 'chiffres après la virgule
'*******************************************************************************************************************
'If Left(cap, 1) <> "0" Then cap = CDbl(cap) 'ne fait strictement rien
'If Left(cap, 1) <> "0" Then TypeName(cap) = "Double" 'ne marche pas
'*******************************************************************************************************************
ChiffresAfterVirgule = IIf(opt = 1, IIf(posDec = 0, 0, nb), IIf(posDec = 0, 0, cap))
End Function