XL 2010 À la recherche d'une fonction

Magic_Doctor

XLDnaute Barbatruc
Bonjour,

Le titre est un peu nébuleux, mais il aurait été difficile de le résumer en une simple phrase.
J'essaie de résoudre un problème et, pour ce faire, j'envisage d'utiliser une fonction (donc VBA) qui me renvoie, pour un chiffre décimal, le nombre de "0" après la virgule avant le premier chiffre qui ne soit pas nul.
Ex :
- 0,52866320023 (mais ça aurait pu être 258,52866320023) --> 0
- 0,0528066320023 --> 1
- 0,00528066320023 --> 2
- 0,000528066320023 --> 3

Merci d'avance pour toute aide.
 

kiki29

XLDnaute Barbatruc
Salut,
VB:
Option Explicit

Function ZeroCount(r As Range) As Long
Dim sStr As String, n
    ZeroCount = 0
    n = CDec(r.Text)
    If InStr(1, n, Application.DecimalSeparator) = 0 Then Exit Function
    sStr = Split(n, Application.DecimalSeparator)(1)
    While Left$(sStr, 1) = "0"
        sStr = Right$(sStr, Len(sStr) - 1)
        ZeroCount = ZeroCount + 1
    Wend
End Function
 
Dernière édition:

R@chid

XLDnaute Barbatruc
Bonsoir @ tous,

Une formule matricielle si cela te convient.

VB:
=SIERREUR(EQUIV(0;--STXT(TEXTE(MOD(A1;1);"0,"&REPT(0;15));3;LIGNE($1:$15)));"Néant")
@ valider toujours par Ctrl+Maj+Entrée

Voir PJ


Cordialement
 

Pièces jointes

  • Magic_Doctor_V1_FormuleMatricielle_V2.xlsx
    9.1 KB · Affichages: 14

patricktoulon

XLDnaute Barbatruc
bonjour
pour une fois que les 0 devant qui disparaissent sur excel ou VBA vont nous servir
VB:
Function nb0afercomma(cel As String)
   Dim A, B
   A = Split(cel, ",")
    If UBound(A) = 0 Then nb0afercomma = 0: Exit Function 'si pas de décimale
    B = Val(A(1))
    nb0afercomma = Len(A(1)) - Len(B)
End Function
la formule de base
=nb0afercomma(A2)
 

Dudu2

XLDnaute Barbatruc
Bonjour,
Une autre option pour une fonction personnalisée:
VB:
Function NbZéros(Cellule As Range) As Integer
    Dim d As Double
    Dim Nb As Integer
 
    If Not IsNumeric(Cellule.Value) Then Exit Function
    d = Cellule.Value - Int(Cellule.Value) 'Modif PatrickToulon
    If d = 0 Then Exit Function
 
    Do While d < 1
        d = 10 * d
        Nb = Nb + 1
    Loop
 
    NbZéros = Nb - 1
End Function

2020-11-27_092621.jpg
 
Dernière édition:

R@chid

XLDnaute Barbatruc
Bonjour @ tous,
bien sûr il peut y avoir des nombres non décimaux, alors la formule deviendra :
VB:
=SIERREUR(EQUIV(0;--STXT(TEXTE(SI(MOD(A1;1)>0;MOD(A1;1));"0,"&REPT(0;15));3;LIGNE($1:$15)));"Néant")
@ valider toujours par Ctrl+Maj+Entrée


Cordialement
 

Dudu2

XLDnaute Barbatruc
Patrick, en effet, tu as vu juste, il faut faire ce que tu dis.
J'ai modifié le code en Post #5.

De ton coté il faudrait que tu ajoutes:
VB:
If UBound(A) = -1 Then Exit Function
Sinon #VALEUR! en ligne 4 ci-dessous.
 
Dernière édition:

R@chid

XLDnaute Barbatruc
Bonjour @ tous,
J'ai dû rater quelque chose pour la formule matricielle de R@chid, sinon c'est ça se tient.
Oui t'as raté "D'utiliser ma formule" du POST #6 là où je l'ai éditée pour qu'elle gère les nombres non décimaux, et peut être tu ne l'as pas validée correctement comme je l'ai bien précisé en Rouge.

On peut modifier la formule de R@chid par celle-ci (non matricielle):
=SIERREUR(NBCAR(STXT(A2;TROUVE(",";A2)+1;NBCAR(A2))) - NBCAR(VALEURNOMBRE(STXT(A2;TROUVE(",";A2)+1;NBCAR(A2))));0)
Ma formule n'a pas besoin de modification, elle est plus courte que la tienne et renvoie des résultats correctes.
Si c'est juste pour avoir des 0 au lieu de Néant, il suffit de supprimer "Néant" de la formule et laisser ce 2ème argument sans le renseigner.

Voir PJ

Cordialement
 

Pièces jointes

  • Magic_Doctor_V1_Dudu2.xlsx
    9.7 KB · Affichages: 4

Dudu2

XLDnaute Barbatruc
En effet, après reprise de ton dernier fichier ta formule fonctionne, c'est juste que je n'ai pas réussi à la mettre en place dans le 1er exemple.
Et pour jouer aux gamins à l'urinoir de l'école, en effet la tienne est plus courte ! Mais la mienne n'est pas matricielle et donc plus simple à gérer.
2020-11-27_161555.jpg
 

Dudu2

XLDnaute Barbatruc
😱 J'espère qu'on n'ira pas jusque là 🤑

La dernière formule de R@chid est parfaite, y a pas de souci. Mais ce n'est pas celle issue du post #6 que j'ai tenté de placer dans le tableau qui a donné des 15 et que j'ai tenté d'adapter sans succès. Et ça n'a rien à voir avec la question du "néant" qu'on associe aisément à 0 !

A noter que sa formule fonctionne aussi pour les notations numériques à exposant ce qui est parfait!
La mienne aussi pourrait le faire (en formatant le nombre à exposant pour "l'étirer") mais je devrais rendre ma formule encore plus longue, et là je risque d'être disqualifié à la récré
1606492830082.gif
.
 
Dernière édition:

Discussions similaires

Réponses
8
Affichages
410

Statistiques des forums

Discussions
312 078
Messages
2 085 110
Membres
102 782
dernier inscrit
Basoje