Magic_Doctor
XLDnaute Barbatruc
Bonjour,
Quand Excel renvoie des chiffres, il élimine les "0" superflus, mais parfois, dans un tableau, on aimerait les conserver pour une question essentiellement visuelle. Je m'explique :
On décide que tous les chiffres apparaissant sur un tableau aient 4 chiffres après la virgule. Nous obtiendrons ceci :
1,2365 g
1,12 g
1,365 g
1 g
Mais, en fait nous désirerions :
1,2365 g
1,1200 g
1,3650 g
1,0000 g
Comment y parvenir sans passer par le formatage ?
J'ai tenté de bidouiller une fonction :
La fonction semble bien marcher sauf si le nombre de chiffres avant la virgule est supérieur à x (apparaît alors un "truc" bizarre avec 2 virgules...).
Je tourne en rond et ne comprends pas pourquoi.
Je ne doute pas un instant qu'il puisse y avoir un moyen plus simple.
En attendant, merci d'avance pour qui m'aidera à résoudre ce problème.
Quand Excel renvoie des chiffres, il élimine les "0" superflus, mais parfois, dans un tableau, on aimerait les conserver pour une question essentiellement visuelle. Je m'explique :
On décide que tous les chiffres apparaissant sur un tableau aient 4 chiffres après la virgule. Nous obtiendrons ceci :
1,2365 g
1,12 g
1,365 g
1 g
Mais, en fait nous désirerions :
1,2365 g
1,1200 g
1,3650 g
1,0000 g
Comment y parvenir sans passer par le formatage ?
J'ai tenté de bidouiller une fonction :
VB:
Function ZerosFinDeChaine(cel As Range, x As Byte) As String
'Rajoute (éventuellement) des 0 en fin de chaîne
'Magic_Doctor
'- cel : cellule sélectionnée
'- x : nombre de "0" que l'on veut après la ","
'Si x = 4 : - num = 12,7896 ---> ZerosFinDeChaine(12,7896, 4) = "12,7896"
' - num = 7,12 ---> ZerosFinDeChaine(7,12, 4) = "7,1200"
' - num = 25 ---> ZerosFinDeChaine(25, 4) = "25,0000"
Dim txt As String, pos As Byte, largo1 As Byte, largo2 As Byte
Dim beforvirgule As String, aftervirgule As String, i As Byte
On Error Resume Next 'au cas où le nombre de décimales après la "," est supérieur à x
txt = CStr(cel): txt = Replace(txt, ".", ",") 'transforme le chiffre en chaîne de caractères et remplace le "."
'(équivalent de la "," chez les Anglo-Saxons) par ","
If cel = CInt(cel) Then '"cel" contient un entier
ZerosFinDeChaine = txt & "," & Application.Rept("0", x)
Else
pos = InStr(txt, ",") 'position de la virgule
largo1 = Len(txt) - pos 'nombre de caractères après la ","
beforvirgule = Left(txt, pos - 1) 'texte avant la ","
aftervirgule = Right(txt, largo1) 'texte après la ","
largo2 = Len(aftervirgule) 'longueur du texte après la ","
i = x - largo2
If i > 0 Then aftervirgule = aftervirgule & Application.Rept("0", i)
ZerosFinDeChaine = beforvirgule & "," & aftervirgule
End If
End Function
La fonction semble bien marcher sauf si le nombre de chiffres avant la virgule est supérieur à x (apparaît alors un "truc" bizarre avec 2 virgules...).
Je tourne en rond et ne comprends pas pourquoi.
Je ne doute pas un instant qu'il puisse y avoir un moyen plus simple.
En attendant, merci d'avance pour qui m'aidera à résoudre ce problème.