Magic_Doctor
XLDnaute Barbatruc
Bonjour,
J’ai une série de 4 chiffres décimaux, par exemple :
-55,4927644455
-125
-35,920236
56,01666666
Je veux connaître le nombre de chiffres après la virgule le plus long de cette série de chiffres.
J’ai bricolé ceci, qui ma foi fonctionne :
Le problème, c’est que la plage « Zardoz » est en fait constituée de 4 cellules fusionnées. Sur la feuille : R17:S17 ; R18:S18 ; R19:S19 ; R20:S20. Pour des raisons techniques ces cellules doivent rester fusionnées. Et là ma routine ne marche plus. Comment y remédier ?
J’ai une série de 4 chiffres décimaux, par exemple :
-55,4927644455
-125
-35,920236
56,01666666
Je veux connaître le nombre de chiffres après la virgule le plus long de cette série de chiffres.
J’ai bricolé ceci, qui ma foi fonctionne :
VB:
Sub NbMaxChiffresAfterVirgule()
Dim c As Range, i As Byte, nb(4) As Byte, tableau
For Each c In [Zardoz] 'nom de la plage de 4 cellules contenant les 4 valeurs
i = i + 1
nb(i) = ChiffresAfterVirgule(c.Value, 1)
Next
tableau = Array(nb(1), nb(2), nb(3), nb(4))
[S14] = Application.Max(tableau) 'résultat
End Sub
-----------------------------------------------------------------------
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
ChiffresAfterVirgule = IIf(Opt = 1, IIf(posDec = 0, 0, nb), IIf(posDec = 0, 0, cap))
End Function