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