Nombre de zéro(s) immédiatement après la virgule

Magic_Doctor

XLDnaute Barbatruc
Rebonjour,

Je voudrais connaître, pour des chiffres décimaux, le nombre de 0 (zéro(s)) qu'il y a immédiatement après la virgule.
Par exemple :
123,0258 ---> 1
5,00088 ---> 3
-0,000009036 ---> 5

J'avais conservé sous le coude ces 2 fonctions :

------------------------------------------------------------------------------------
Function HowLong(dNum As Double) As Byte
'Renvoie le nombre réel de chiffres après la virgule d'une nombre

Dim SepDec$, tmp$, posDec As Byte

On Error Resume Next

SepDec = Application.International(xlDecimalSeparator)
tmp = CStr(dNum)
posDec = InStr(tmp, SepDec)

If posDec = 0 Then
HowLong = 0
Else
HowLong = Len(tmp) - Len(Right(tmp, posDec))
End If

End Function

------------------------------------------------------------------------------------
Function ApresLaVirgule(cell As Range) As Byte

Dim SepDec$, tmp$, pos As Byte, res

On Error Resume Next

SepDec = Application.International(xlDecimalSeparator)
tmp = cell.Text
pos = InStr(1, tmp, SepDec)

If pos = 0 Then
res = 0
Else
res = Left(Right(tmp, Len(tmp) - pos), 8)
End If
If Len(res) = 1 Then res = res * 10

ApresLaVirgule = Len(res * 1)

End Function

------------------------------------------------------------------------------------
En soustrayant ces 2 fonctions (je sens que certains vont rigoler au vu de cet infâme bricolage...) :
HowLong([K17]) - ApresLaVirgule([K17])

J'obtiens bien le résultat attendu, mais ça plante avec les nombres entiers. ¡Caramba!

Un grand merci pour m'aider à sortir du ¡Caramba!
 

pierrejean

XLDnaute Barbatruc
Re : Nombre de zéro(s) immédiatement après la virgule

Bonjour Magic_Doctor

A tester fonction personnalisée
 

Pièces jointes

  • nb_zero_post_virgule.xls
    33 KB · Affichages: 83
  • nb_zero_post_virgule.xls
    33 KB · Affichages: 80
  • nb_zero_post_virgule.xls
    33 KB · Affichages: 81
Dernière édition:

13GIBE59

XLDnaute Accro
Re : Nombre de zéro(s) immédiatement après la virgule

Bonjour à tous.
@ hoerwind : j'ai essayé ta formule, elle ne fonctionne pas, que les chiffres décimaux soit écrits avec une "," ou un "."
Ca marche chez toi ?
Si oui, et sans abuser, tu peux joindre un fichier, s'il te plaît ?
Merci d'avance.
 

pierrejean

XLDnaute Barbatruc
Re : Nombre de zéro(s) immédiatement après la virgule

Re

Petit recapitulatif

NB : Le point a parfois été remplacé par la virgule
 

Pièces jointes

  • nb_zero_post_virgule.xls
    39 KB · Affichages: 54
  • nb_zero_post_virgule.xls
    39 KB · Affichages: 56
  • nb_zero_post_virgule.xls
    39 KB · Affichages: 55

Magic_Doctor

XLDnaute Barbatruc
Re : Nombre de zéro(s) immédiatement après la virgule

Bonjour pierrejean, Jean-Marcel,

Merci pour vos réponses.
J'ai retenu celle de pierrejean.
Les fonctions de Jean-Marcel me restituaient toujours 0, j'ai donc fait une petite modification :

Function RechercheNbDeZéro(MaValeur As Double)


SepDec = Application.International(xlDecimalSeparator)

For Compteur = Len(Split(MaValeur, SepDec)(0)) + 2 To Len(MaValeur)
If Mid(MaValeur, Compteur, 1) = 0 Then
RechercheNbDeZéro = RechercheNbDeZéro + 1
Else
Exit Function
End If
Next
End Function

Mais le problème c'est qu'elle compte TOUS les zéros après la virgule et où qu'ils soient, alors que je ne veux compter que les zéros situés immédiatement après la virgule jusqu'au premier chiffre qui ne soit pas zéro.
Ex : 5000,205 ---> 1, alors que l'on attendait 0
0,00009025 ---> 5, alors que l'on attendait 4

Bonne fin d'après-midi à tous.
 

job75

XLDnaute Barbatruc
Re : Nombre de zéro(s) immédiatement après la virgule

Bonjour à tous :)

Pas très en avance mais je pense que ça peut intéresser :

Code:
Function NBZERO(n#) As Byte
Dim t$
t = Replace(n, ",", ".")
t = Mid(t, InStr(t, ".") + 1, 20)
NBZERO = Len(t) - Len(CStr(Val(t)))
End Function
Aucune boucle, fonctionne quelque soit le séparateur décimal.

A+
 

pierrejean

XLDnaute Barbatruc
Re : Nombre de zéro(s) immédiatement après la virgule

Re

Mise a jour du recapitulatif

A noter que je me suis permis de raccourcir encore le code de mon ami job
 

Pièces jointes

  • nb_zero_post_virgule.xls
    41 KB · Affichages: 64
  • nb_zero_post_virgule.xls
    41 KB · Affichages: 58
  • nb_zero_post_virgule.xls
    41 KB · Affichages: 54

job75

XLDnaute Barbatruc
Re : Nombre de zéro(s) immédiatement après la virgule

Re,

Par formule, sur le même principe que ma fonction VBA :

Code:
=SI(A1=ENT(A1);0;NBCAR(STXT(A1;TROUVE(STXT(0,1;2;1);A1)+1;20))-NBCAR(--STXT(A1;TROUVE(STXT(0,1;2;1);A1)+1;20)))
Le séparateur décimal peut être la virgule ou le point.

A+
 

Discussions similaires