Compter le nombre de décimale d'un nombre

Bonjour,

J'arrive à trouver la partie décimale du nombre

Je voulais savoir comment on pouvait compter le nombre de décimales pour un nombre saisi dans un TextBox. ?

Nombre saisi dans TextBox : Déversement dans une cellule => Val(Replace(Me.TextBox1, ",", "."))

Partie décimale du nombre saisi => PartDeci = Val(Replace(Me.TextBox1, ",", ".")) - Int(Val(Replace(Me.TextBox1, ",", ".")))

Bonjour

La partie décimale, c'est le reste de la division par 1 : voir la fonction Mod

Bonsoir,

Merci de la réponse

Le résultat n'est pas concluant pour moi :

A = 1,1 Mod 1

A = 0

Bonjour,

Le nombre de décimales significatives peut être obtenu par formule :

Si la cellule A2 est le nombre à étudier : =NBCAR(GAUCHE(A2;20))-NBCAR(ENT(A2))-1

Selon les versions d'Excel, la limite peut être différente (15 pour 2010)

ici, limite haute à 20 décimales

Bonne suite

Cordialement

Bonsoir,

Merci de la réponse,

Je n'ai peut-être pas précisé mais c'est en VBA que je recherche cette solution

Effectivement,

Mais Dslé, mes connaissances en la matière.......

Je passe la main

Si les réponses tardent, crées un nouveau post en le précisant

Bonne suite

Cordialement

Re,

Avec :

Dim d As Double
d = Val(Mid(Replace(TextBox1.Value, ",", "."), InStr(1, TextBox1.Value & ",", ",")))

bonjour,

voici une possibilité :

Function Galopin()
Galopin = Len(Split(Me.TextBox1, ".")(1))
End Function

A+

Bonjour @Patrice33740

Merci de la réponse

Quand je saisis dans le TextBox un nombre décimal :

  • Avec un point (1.1) => d = 0
  • Avec une virgule (1,1) => d = 0,1 : C'est la partie décimale et non le nombre de chiffre après la virgule !!!

Bonjour @Galopin

Merci de la réponse

Quand je saisis dans le TextBox un nombre décimal :

  • Avec un point (1.1) => Galopin = 1
  • Avec une virgule (1,1) => Problème Macro : Voir capture d'écran ci-dessous :
annotation 2020 04 20 123728

Entre les deux mon coeur balance ?

Function Galopin()
On Error Resume Next
Galopin = Len(Split(Me.TextBox1, ".")(1))
Galopin = Len(Split(Me.TextBox1, ",")(1))
End Function

A+

Re @Galopin

Merci pour la réponse

Le nombre de décimale fonctionne bien que le nombre possède un "." ou une ","

Par contre, si je comprends bien :

Len => Longueur de la variable

Split => Transforme "Me.TextBox1" les chiffres en caractères string si on veut faire simple

Je ne comprends pas trop de quel code dépend ", "." " et à quoi correspond en fin de code "(1) "

Bonjour tout le monde !

Split découpe une chaîne de caractères en sous-chaînes selon un séparateur donné, par exemple ,. Le résultat est une variable tableau.

Exemple :

Sub Démo()

NombreTexte = "0,12"
TableauResultat = Split(NombreTexte, ",")
MsgBox "Partie entière = " & TableauResultat(0)
MsgBox "Partie décimale = " & TableauResultat(1)

End Sub

En accolant directement l'indice du tableau de résultat (1) derrière split, on renvoie juste la partie décimale.

Len sert ensuite à donner la longueur de cette chaîne (nombre de caractères).

Une adaptation de la fonction de @Galopin qui te permet de choisir le séparateur :

Function Galopin2(Nombre As String, Optional Sep As String = ",")
If InStr(Nombre, Sep) > 0 Then 
   Galopin2 = Len(Split(Nombre, Sep)(1))
Else
   Galopin2 = "" 'Cas où il n'y a pas le séparateur demandé dans le nombre
End If
End Function

Exemples d'utilisation :

MsgBox Galopin2(Me.TextBox1, ".") 'Séparateur point
MsgBox Galopin2(Me.TextBox1) 'Séparateur virgule (par défaut)

Heu c'est un petit peu compliqué...

Split est une fonction qui pour une chaine de caractère donnée renvoie un tableau des différentes parties de cette chaine.

Var = split("Ceci est une phrase avec des mots séparés par des espaces")
'Var contient un tableau de 11 mots ou 
Var(0) "Ceci"
Var(1) ="est"
'...

La syntaxe complète de cette fonction est

split(Chaine$, Séparateur$) par défaut le séparateur est l'espace donc on le précise pas mais j'aurai pu écrire :

Var = split("Ceci est une phrase avec des mots séparés par des espaces" , " ")

Ce qui aurait donné le même résultat

Si au lieu d'une phrase on a une liste de mots séparé par un tiret (par exemple...)

On pourrait écrire :

Var = split("alpha,béta,delta,epsilon" , "-")
'Ce qui renverrait
Var(0) = "alpha"
Var (1) = "beta"
'...

Et si on a des chiffres au lieu de lettres

Var = Split("123456;456789;654123", ";") avec comme séparateur le point virgule
'Dans ce cas on aurait :
Var(0) = "123456"
Var(1) = "456789"
'...

Il est possible de se passer de l'utilisation de la variable (puisque split est une fonction) de lui passer en paramètre le N° de l'élément de tableau qui nous intéresse : Dans le dernier exemple :

MsgBox Split("123456;456789;654123", ";") (1)
'renverrait  : "456789"

Ok ?

[Edit] Merci Pedro.

A+

Bonsoir @Galopin et @Pedro22

Merci pour toutes ces explications car on a du mal à les trouver dans des livres ou sur le net

J'aimerai bien trouver un bouquin qui explique très bien ces codes et fonctions

Bonsoir …

Que dois-je choisir, galopin, quand ça balance (mais du côté hors norme) ?

Avec 3,4500000 (= 3,45), il faut s'attendre à 7 ou 2 (pour les significatifs )? D'où :

  If Ordonc Like "*,*" Then s = Split(Ordonc, ",")(1)
  If Ordonc Like "*.*" Then s = Split(Ordonc, ".")(1)
  While Right(s, 1) = "0":  s = Left(s, Len(s) - 1):  Wend  'sans les 0 inutiles
  Nb = Len(s)

Bonjour,

Avec une rondelle de saucisson trouvé dans une poubelle je ne peux pas te dire si le repas a été bon...

Il sort d’où ce nombre ?

Dans le fil on était censé trouver le nombre de caractère d'un string issu d'un TextBox :

Un exemple de ce qu'on peux attendre :

Sub test()
Dim ordonc
ordonc = Val("3.450000")
MsgBox Len(Split(ordonc, ".")(1))

ordonc = 22 / 7
MsgBox Len(Split(ordonc, ".")(1))
End Sub

A+

Rechercher des sujets similaires à "compter nombre decimale"