Compter le nbre de chiffres après la virgule (Macro)

Bonjour à toutes et à tous,

j'aimerai savoir s'il existe un moyen de compter le nombre de chiffre après la virgule d'un nombre.

j'aurai besoin de ce nombre comme condition dans un macro existante.

bien cordialement,

Elhadj

Bonjour,

regarde ceci, si cela peut te permettre d'avancer :

Dim i As Double, s As Single
i = 123.45678
s = i - Int(i)
MsgBox Len(Replace(s, "0.", ""))

bon après midi

@+

Bonsoir,

Prenons deux exemples avec Pi et 2/3.

Que veux-tu comme résultat?

Il faut être plus précis dans la question.

Cdlt

Et comme çà ?

149classeur1.xlsx (7.98 Ko)

Re,

au cas ou il n'y aurait pas de décimale :

Dim i As Double, s As Single
i = 123.45678
s = i - Int(i)
MsgBox IIf(s > 0, Len(Replace(s, "0.", "")), 0)

Bonjour à tous et merci pour vos réponses et désolé de n'avoir pas pu vous répondre hier soir.

ce que je voudrai c'est un moyen de compter pour chaque cellule compris dans un plage donnée, le nombre de chiffre qu'il y a après la virgule s'il y en a.

par exemple:

123.456789 ==> 6 chiffres après la virgule

12345 ==> 0 chiffre

12345.6 ==> 1 chiffre.

je vais explorer les réponses données jusque là et revenir vers vous.

cordialement,

Elhadj

@Ginga999

c'est exactement ce que je veux mais avec une macro

@Pierrot93

j'ai essayé les deux codes mais je ne comprends pas le résultat qu'ils me donnent?!! ça ne correspond pas au nombre de chiffres après la virgule. Que signifie la fonction

Int(i)

j'ai penseé aussi à utiliser la fonction Len mais étant donné que le nombre termes des deux côtés de la virgule est variable, j'ai pas su comment le formuler.

@Jean-Eric

mes résultats seront du genre 2/3, avec un nombre de chiffres après la virgule fini.

Merci à toutes et à tous pour votre aide

Elhadj

Re

j'approche de ce que je souhaite avec cette formule là

For i = 3 To 6
    Cells(i, 3) = Cells(i, 2) - Int(Cells(i, 2))
Next

mon seul problème c'est que aléatoirement, le résultat se présente de manière un peu bizarre:

pour 15,995 mon code donne un résultat 0,994999999999999 au lieu de 0.995

or pour 6.25 j'ai bien 0.25

Bonjour,

Ci-dssous fonction personnalisée à tester et à adapter

Option Explicit
Public Function Nb_Chiffres(Valeur)
Dim LgChaîne
Dim PosVirgule
Dim NbArrondi
Dim PartieDécimale

    Select Case VarType(Valeur)
        Case 4, 5, 6, 14
            LgChaîne = Len(Valeur)
            NbArrondi = LgChaîne - PosVirgule
            PartieDécimale = Valeur - Int(Valeur)
            Nb_Chiffres = Len(Replace(Round(PartieDécimale, NbArrondi), "0,", ""))
        Case Else
            Nb_Chiffres= ""
    End Select

End Function

@ edit pour la forme

Bonjour,

Parce qu'il y a souvent des erreurs d'arrondi dûes aux conversions décimal/binaire que tu ne vois pas.

Tu peux te baser sur l'affichage avec :

Cells(i, 4) = Len(Cells(i, 3).Text) - 2

Si tu as le nombre 0.666666667 affiché au format nombre avec 2 chiffres après la virgule (donc 0.67 affiché) ça te retournera 2. A voir si c'est un avantage ou un inconvénient pour toi.

Ou bien arrondir le calcul précédent :

Cells(i, 3) = Round(Cells(i, 2) - Int(Cells(i, 2)), 12)

eric

@eriiic

super en prenant le dernier code

Cells(i, 4) = Len(Cells(i, 3).Text) - 2

juste en rajoutant ".Text" ça a réglé le problème

Merci à tous pour votre aide

Elhadj

Rechercher des sujets similaires à "compter nbre chiffres virgule macro"