Function ZerosFinDeChaine$(num As Variant, x As Byte, Optional sep As Boolean = True)
'**********************************************************************************************************************************
'Complète s'il le faut, avec des 0, un nombre décimal, de telle sorte qu'il y ait un nombre déterminé de chiffres après la virgule
'Place éventuellement des points séparateurs de milliers
'job75 / Magic_Doctor
'**********************************************************************************************************************************
'- num : un nombre
'- x : le nombre de chiffres voulu après la virgule
'Exemple : si x = 2 & sep = True ou omis => num = 2 --> 2,00
' num = 125752,22 --> 125.752,22
' num = -202454524565,5 --> -202.454.524.565,50
' si sep = False il n'y aura pas de point(s) séparateur(s) de milliers
Dim signe$, Txt$, i%, t$, n$, nb$, largo As Byte, pos As Byte, gauche$, droite$, millier$
On Error Resume Next 'pour que n'apparaisse pas #¡VALOR! si num = ""
'If num = "" Then Exit Function
signe = IIf(num = Abs(num), "", "-")
num = FormatNumber(num, 15) 'pour éviter que ne s'impose la notation scientifique
Txt = CStr(Abs(num))
For i = 1 To Len(Txt)
t = Mid(Txt, i, 1)
If Not IsNumeric(t) And t <> "," And t <> "." Then Exit For
Next
t = Replace(Left(Txt, i - 1), ",", ".")
n = IIf(i = 1, "", Format(Val(t), "0." & String(x, "0")))
If x = 0 Then n = Replace(n, ",", "") 'pas de décimale après la virgule donc pas de virgule
nb = n & Mid(Txt, i)
largo = Len(nb)
pos = InStr(1, nb, ",")
gauche = Left(nb, pos - 1)
droite = Right(nb, largo - pos)
millier = Replace(Format(CDec(gauche), "#,##0"), Chr(160), ".")
If InStr(gauche, Application.DecimalSeparator) Then millier = millier & Mid(gauche, InStr(gauche, Application.DecimalSeparator))
ZerosFinDeChaine = IIf(sep, signe & millier & IIf(x = 0, "", ",") & droite & Mid(Txt, i), signe & n & Mid(Txt, i))
End Function