NOMBRE EN LETTRES

cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 - 26 août 2010 à 16:50
 Grafid - 16 avril 2013 à 16:26
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/52224-nombre-en-lettres

Bonsoir
comment puis-je ajouter d'autre monnaie que l'euro et le dollar (pound par exemple (£)) ?
Merci
microsophistic Messages postés 3 Date d'inscription lundi 3 décembre 2012 Statut Membre Dernière intervention 17 janvier 2013
17 janv. 2013 à 16:40
Bonjour, j'utilise cette fonction dans access 2007 et j'ai regroupé les deux modules dans un seul mais je bute sur quelques petites erreurs d'orthographe en Français, votre aide serait la bienvenue:
les centaines avec vingt par exemple 220 deux cent vingt et non deux cent vingts ...
si par exemple 80 000 s'écrit bien quatre-vingt mille, par contre avec 80 millions ou 80 milliards vingt prend un "s"!
Ceci dit cette fonction est très bien.
Merci de votre réponse.
Cordialement.
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
23 nov. 2011 à 18:29
Salut
avec la conversion
Sep = System.Convert.ToChar(Application.CurrentCulture.NumberFormat.NumberDecimalSeparator)
cs_lermite222 Messages postés 492 Date d'inscription jeudi 5 avril 2007 Statut Membre Dernière intervention 2 juillet 2012 4
23 nov. 2011 à 17:35
Re tous,
Pour info, en .Net trouver le séparateur décimale du PC

dim Sep As Char
Sep = Application.CurrentCulture.NumberFormat.NumberDecimalSeparator
A+
nathansecret Messages postés 63 Date d'inscription mardi 11 novembre 2008 Statut Membre Dernière intervention 31 octobre 2011
13 févr. 2011 à 14:49
'Pas terrible les Goto...

'A la place d'écrire :

reco:
If Len(Nombre) / 3 <> Int(Len(Nombre) / 3) Then
Nombre = "0" & Nombre
GoTo reco
End If

'ecrivez :

While Len(Nombre) / 3 <> Int(Len(Nombre) / 3)
Nombre = "0" & Nombre
Wend
cs_lermite222 Messages postés 492 Date d'inscription jeudi 5 avril 2007 Statut Membre Dernière intervention 2 juillet 2012 4
11 févr. 2011 à 12:28
Re tous,
Si l'ami petchy avais directement préciser qu'il travaillais en VB6 j'aurais directement fait les modif pour VB6, enfin, quoi qu'il en soi, la modification de la fonction EnTexte pour permettre l'affichage des nombres négatif en VB6.
Remplacer la fonction EnTexte par...

Function EnTexte(Chiffre As Double, Optional Langue As Byte 0, Optional Devise As Byte 0, Optional Decimale As Byte = 0) As String
Dim i As Integer, txt As String
Dim strTemp As String
Dim a As String, Nombre As String, TB, P As String
If Chiffre 0 Then EnTexte "Zéro": Exit Function
Nombre = CStr(Abs(Chiffre))
If Decimale 0 Or Int(Abs(Chiffre)) Abs(Chiffre) Then
Nombre = Arrondi(Nombre, 0)
Reste = 0
If Int(Abs(Chiffre)) 0 And Reste 0 Then EnTexte = "Zéro": Exit Function
Else
TB = Split(CStr(Chiffre), sep)
Reste = TB(1) / 10 ^ Len(TB(1)) 'pour 2 décimales
StrReste = TB(1) 'si pas de devise, met toutes les décimales
If Abs(Chiffre) = 0 Then
strTemp = "Zéro "
GoTo PasUnite
End If
Nombre = Int(Abs(Chiffre))
End If
Pays = Langue
If Unite(1) = "" Then InitVar
InitPays
reco:
If Len(Nombre) / 3 <> Int(Len(Nombre) / 3) Then
Nombre = "0" & Nombre
GoTo reco
End If
Stade = (Len(Nombre) / 3)
For i = 0 To Stade - 1
txt = Mid(Nombre, (i * 3) + 1, 3)
ValNb(i) = Val(txt)
strResultat(i) = Centaine(txt)
Next i
i = 0
If Stade > 4 Then 'Billiard
If strResultat(i) <> "" Then
strTemp strTemp & VoirRegle(strResultat(i)) & IIf(ValNb(i) 1, "Billiard ", "Billiards ")
End If
i = i + 1
End If
If Stade > 3 Then 'Milliard
If strResultat(i) <> "" Then
strTemp strTemp & VoirRegle(strResultat(i)) & IIf(ValNb(i) 1, "Milliard ", "Milliards ")
End If
i = i + 1
End If
If Stade > 2 Then 'Million
If strResultat(i) <> "" Then
strTemp strTemp & VoirRegle(strResultat(i)) & IIf(ValNb(i) 1, "Million ", "Millions ")
End If
i = i + 1
End If
If Stade > 1 Then 'millier
If strResultat(i) <> "" Then
If strResultat(i) = "un " Then
strTemp = strTemp & "Mille "
Else
strTemp = strTemp & VoirRegle(strResultat(i)) & "Mille "
End If
End If
i = i + 1
End If
If Stade > 0 Then 'les unités
If strResultat(i) <> "" Then
If strTemp <> "" And ValNb(i) < 100 And (Right(strResultat(i), 3) <> "un " Or Len(strResultat(i)) = 3) Then
TB = Split(strTemp, " ")

Select Case TB(UBound(TB) - 1)
Case "Million", "Millions", "Milliard", "Milliards", "Billiard", "Billiards"
strTemp = strTemp & "et "
End Select
End If
strTemp = strTemp & VoirRegle(strResultat(i), False)
End If
End If
TB = Split(strTemp, " ")
Select Case TB(UBound(TB) - 1)
Case "Million", "Millions", "Milliard", "Milliards", "Billiard", "Billiards"
Select Case Devise
Case 1, 3: strTemp = strTemp & "de "
Case 2: strTemp = strTemp & "d'"
End Select
End Select
PasUnite:
Select Case Devise
Case Is > 0: strTemp strTemp & Monnaie(Devise) & IIf(Nombre 1, " ", "s ")
End Select
If Reste <> 0 And Decimale = 1 Then
If Devise = 0 Then
strTemp = strTemp & "Virgule "
'Appel pour les décimales en base 3
strTemp = strTemp & AprVirgule(StrReste)
Else:
strTemp = strTemp & " " & P
Reste = Int(Reste * 1000) / 10
ValNb(1) = Arrondi(Reste, 0)
If ValNb(1) = 100 Then 'rectifie 100 centimes
strTemp = EnTexte(Arrondi(Chiffre, 0), Pays, Devise, 0)
Else
txt = Right("00" & Trim(Str(ValNb(1))), 3)
txt Centaine(txt): txt Trim(txt) & " "
strTemp = strTemp & VoirRegle(txt)
strTemp strTemp & Monnaie(Devise + 4) & IIf(ValNb(1) 1, "", "s")
End If
End If
End If
If Chiffre < 0 Then strTemp = "Moins " & strTemp
EnTexte = strTemp
End Function

Bonne suite,
A+
cs_lermite222 Messages postés 492 Date d'inscription jeudi 5 avril 2007 Statut Membre Dernière intervention 2 juillet 2012 4
10 févr. 2011 à 17:39
Re tous,
Suite à la demande de petchy, modification de la fonction EnTexte pour oermettre l'affichage des nombres négatif.
Remplacer la fonction EnTexte par...
Function EnTexte(Chiffre As Range, Optional Langue As Byte 0, Optional Devise As Byte 0, Optional Decimale As Byte = 0) As String

Dim i As Integer, txt As String

Dim strTemp As String
Dim a As String, Nombre As String, TB, P As String
Application.Volatile
Nombre = CStr(Abs(Chiffre))
If Chiffre "" Then EnTexte "": Exit Function
If Nombre 0 Then EnTexte "Zéro": Exit Function
If Decimale 0 Or Int(Chiffre) Chiffre Then
Nombre = RoundA(Nombre, 0)
Reste = 0
If Int(Chiffre) 0 And Reste 0 Then EnTexte = "Zéro": Exit Function
Else
TB = Split(CStr(Chiffre), Sep)
Reste = TB(1) / 10 ^ Len(TB(1)) 'pour 2 décimales
StrReste = TB(1) 'si pas de devise, met toutes les décimales
If Chiffre = 0 Then
strTemp = "Zéro "
GoTo PasUnite
End If
Nombre = Int(Abs(Chiffre))
End If
Pays = Langue
If Unite(1) = "" Then InitVar
InitPays
reco:
If Len(Nombre) / 3 <> Int(Len(Nombre) / 3) Then
Nombre = "0" & Nombre
GoTo reco
End If
Stade = (Len(Nombre) / 3)
For i = 0 To Stade - 1
txt = Mid(Nombre, (i * 3) + 1, 3)
ValNb(i) = Val(txt)
strResultat(i) = Centaine(txt)
Next i
i = 0
If Stade > 4 Then 'Billiard
If strResultat(i) <> "" Then
strTemp strTemp & VoirRegle(strResultat(i)) & IIf(ValNb(i) 1, "Billiard ", "Billiards ")
End If
i = i + 1
End If
If Stade > 3 Then 'Milliard
If strResultat(i) <> "" Then
strTemp strTemp & VoirRegle(strResultat(i)) & IIf(ValNb(i) 1, "Milliard ", "Milliards ")
End If
i = i + 1
End If
If Stade > 2 Then 'Million
If strResultat(i) <> "" Then
strTemp strTemp & VoirRegle(strResultat(i)) & IIf(ValNb(i) 1, "Million ", "Millions ")
End If
i = i + 1
End If
If Stade > 1 Then 'millier
If strResultat(i) <> "" Then
If strResultat(i) = "un " Then
strTemp = strTemp & "Mille "
Else
strTemp = strTemp & VoirRegle(strResultat(i)) & "Mille "
End If
End If
i = i + 1
End If
If Stade > 0 Then 'les unités
If strResultat(i) <> "" Then
If strTemp <> "" And ValNb(i) < 100 And (Right(strResultat(i), 3) <> "un " Or Len(strResultat(i)) = 3) Then
TB = Split(strTemp, " ")

Select Case TB(UBound(TB) - 1)
Case "Million", "Millions", "Milliard", "Milliards", "Billiard", "Billiards"
strTemp = strTemp & "et "
End Select
End If
strTemp = strTemp & VoirRegle(strResultat(i), False)
End If
End If
TB = Split(strTemp, " ")
Select Case TB(UBound(TB) - 1)
Case "Million", "Millions", "Milliard", "Milliards", "Billiard", "Billiards"
Select Case Devise
Case 1, 3: strTemp = strTemp & "de "
Case 2: strTemp = strTemp & "d'"
End Select
End Select
PasUnite:
Select Case Devise
Case Is > 0: strTemp strTemp & Monnaie(Devise) & IIf(Nombre 1, " ", "s ")
End Select
If Reste <> 0 And Decimale = 1 Then
If Devise = 0 Then
strTemp = strTemp & "Virgule "
'Appel pour les décimales en base 3
strTemp = strTemp & AprVirgule(StrReste)
Else:
strTemp = strTemp & " " & P
Reste = Int(Reste * 1000) / 10
ValNb(1) = RoundA(Reste, 0)
If ValNb(1) = 100 Then 'rectifie 100 centimes
strTemp = EnTexte(RoundA(Chiffre, 0), Pays, Devise, 0)
Else
txt = Right("00" & Trim(Str(ValNb(1))), 3)
txt Centaine(txt): txt Trim(txt) & " "
strTemp = strTemp & VoirRegle(txt)
strTemp strTemp & Monnaie(Devise + 4) & IIf(ValNb(1) 1, "", "s")
End If
End If
End If
If Chiffre < 0 Then strTemp = "Moins " & strTemp
EnTexte = strTemp
End Function

Bonne suite.
PS : pas possible de l'intégrer en "<Code>"
A+
cs_lermite222 Messages postés 492 Date d'inscription jeudi 5 avril 2007 Statut Membre Dernière intervention 2 juillet 2012 4
8 sept. 2010 à 15:05
Re,
Vu le rythme des remarques et modif, je ne suis plus avec les Maj, donc par pour tout de suite.
Limiter à trois décimales ? le code étant dispo, chacun peu le modifier à sa guise, et j'ai choisi l'option base 3 jusqu'au milliardième.

Le bug quand il n'y à rien dans le TextBox est déjà résolu dans la modif de mon poste précédant sous...'Autre résolution de bug.
pour la modif à appliquer, dans la fonction EnTexte rechercher le If then dans le haut de la fonction,
If Decimale 0 Or Int(Chiffre) Chiffre Then
et remplacer le code jusqu'au
End If
Ensuite descendre dans le code de la fonction et rechercher les lignes...

Select Case Devise
Case Is > 0: strTemp strTemp & Monnaie(Devise) & IIf(Nombre 1, " ", "s ")

et juste audessus du Select Case Devise taper..
PasUnite:
Avec ces modif, tout les bugs relevés sont résolus.
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
8 sept. 2010 à 13:08
Salut
A propos du 2 je ne sais pas où il faut modifier
donc j'attend que tu envoies le code corrigé
A propos du 3
limites à 3 chiffres après le séparateur

encore un autre petit bug si le textbox est vide et appuies envoyer
ou la touche enter
peut etre comme ça
Private Sub Data_Change()
If Not IsNumeric(Trim(Data)) Then
Beep
If Len(Data) < 1 Then
Data = ""
Me.Command1.Enabled = False
Else
Data = Left(Data, Len(Data) - 1)
Data.SelStart = Len(Data)
End If
Else
Me.Command1.Enabled = True
End If

End Sub

Private Sub Data_KeyDown(KeyCode As Integer, Shift As Integer)
If Trim(Data.Text) = "" Then
Exit Sub
End If
If KeyCode = 13 Then
Envoyer
End If
End Sub
cs_lermite222 Messages postés 492 Date d'inscription jeudi 5 avril 2007 Statut Membre Dernière intervention 2 juillet 2012 4
8 sept. 2010 à 03:34
Pour info,
le système fonctionne maintenant avec point ou virgule quelque soit le séparateur décimale employer.
cs_lermite222 Messages postés 492 Date d'inscription jeudi 5 avril 2007 Statut Membre Dernière intervention 2 juillet 2012 4
8 sept. 2010 à 03:25
Commentaire de ShayW
Merci de ton implication pour la mise au point de ce code.
et pour répondre à tes remarques...
1°) Exact, ça m'avais échaper.
2°) c'est régler... dans Entexte
If Decimale 0 Or Int(Chiffre) Chiffre Then
Nombre = Arrondi(Nombre, 0)
Reste = 0
'Autre résolution de bug.
If Int(Chiffre) 0 And Reste 0 Then EnTexte = "Zéro": Exit Function
Else
TB = Split(CStr(Chiffre), sep)
Reste = TB(1) / 10 ^ Len(TB(1)) 'pour 2 décimales
StrReste = TB(1) 'si pas de devise, met toutes les décimales
If Chiffre < 1 Then
strTemp = "Zéro "
GoTo PasUnite
End If
Nombre = Int(Chiffre)
End If
....
PasUnite:
Select Case Devise
Case Is > 0: strTemp strTemp & Monnaie(Devise) & IIf(Nombre 1, " ", "s ")

3°) beh oui, sinon faudrait faire en base 1 avec dixième, centième, millième, dix millième etc.. faudrait prévoir une page pour transcrire !!
Dans mon explication je dis bien que je le fais en base 3

4°) si tu n'aime pas l'affichage du message..
J'ai tester ton code, il plante quand ont a employé la touche Tab mais je pense que ma solution est plus adaptée...et plus simple
Private Sub Data_Change()
If Not IsNumeric(Trim(Data)) Then
Beep
If Len(Data) < 1 Then
Data = ""
Else
Data = Left(Data, Len(Data) - 1)
Data.SelStart = Len(Data)
End If
End If
End Sub
A+
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
8 sept. 2010 à 01:22
Salut
Beaucoup de travaille félicitation
mais il y a encore des bugs
avec le vb6
1 : dans la Function EnTexte
il faut écrire TB = Split(CStr(Chiffre), Sep)
et non TB = Split(CStr(Chiffre), ",")

2 si j'écris 0.5 ou tout nombre commençant par 0.(0,) j'ai une erreur j'ai vérifié avec le debugger
le parametre chiffre de la function entexte = .5 et non 0.5
donc après le split TB(0) = "" qui créer une erreur

3 10.1234 cela donne dix Virgule cent vingt-trois Millièmes quatre cent Millionnièmes ?

4 un bout de code pour permettre seulement les chiffres et le
point ou la virgule comme cela ça evite les messages

Private Sub Data_KeyPress(KeyAscii As Integer)
Dim isnotdigit As Boolean
isnotdigit = (KeyAscii < 48) And (KeyAscii <> 8) And (KeyAscii <> 46) And (KeyAscii <> 44) Or (KeyAscii > 57)
If isnotdigit Then
Me.number.Locked = True
Else

End If
If KeyAscii 46 Or KeyAscii 44 Then
If CountFloatingPoint(Me.number.Text, Chr(KeyAscii)) > 1 Then
Me.number.Locked = True
End If
End If

If KeyAscii = 8 Then
Me.number.Locked = False
End If

End Sub

Private Function CountFloatingPoint(checkingstr As String, sep As String) As Integer
Dim countletter As Integer
Dim chrpos As Integer
Dim startpos As Integer
CountFloatingPoint = 1
startpos = 1
For countletter = 1 To Len(checkingstr)
chrpos = InStr(startpos, checkingstr, sep, vbBinaryCompare)
If chrpos <> 0 Then
CountFloatingPoint = CountFloatingPoint + 1
startpos = chrpos + 1
End If
Next countletter
End Function
cs_lermite222 Messages postés 492 Date d'inscription jeudi 5 avril 2007 Statut Membre Dernière intervention 2 juillet 2012 4
7 sept. 2010 à 15:16
Bonjour,
Mise à jour avec toutes vos remarques sont faite
Sauf les liens pour un téléchargement spécifique.
A+
grosbill2004 Messages postés 10 Date d'inscription mercredi 31 mars 2010 Statut Membre Dernière intervention 6 septembre 2010
6 sept. 2010 à 21:03
Merci pour l'explication des macros complémentaire .xla

A+ Bill
grosbill2004 Messages postés 10 Date d'inscription mercredi 31 mars 2010 Statut Membre Dernière intervention 6 septembre 2010
6 sept. 2010 à 20:56
Bonjour,

Quand on entre 61 dans B11:

En Belgique et Suisse : soixante et un
Avec paramètre et France : soixante-un

A+ Bill
cs_lermite222 Messages postés 492 Date d'inscription jeudi 5 avril 2007 Statut Membre Dernière intervention 2 juillet 2012 4
5 sept. 2010 à 23:58
Bonjour tou(te)s,

Commentaire de ShayW
Pour les VB, j'ai adapté ton exemple comme suis..
Dans le module de la forme.
Option Explicit
Public Sep As String
'...
Private Sub Form_Load()
Sep = Right(Left(Format(1234 / 100, "fixed"), 3), 1)
Py 0: Monnaie 2: DCI = 1
Envoyer
End Sub
'Et la modif de la sub...reprenant également le Commentaire de comme
Sub Envoyer()
Dim DT As String
'Pour adapter à la configuration du PC hôte.
DT = Replace(Data, ".", Sep)
DT = Replace(DT, ",", Sep)

Resultat = EnTexte(CDbl(DT), Py, Monnaie, DCI)
Data.SelStart = 0
Data.SelLength = Len(Data)
On Error Resume Next
Data.SetFocus
End Sub

Commentaire de grosbill2004
Concernant le "et", c'est ainsi que je l'avais fait à l'origine mais ont m'a fait remarquer que le "et" ne se mettait qu'a la place de la virgule et nulle part ailleur ??
J'ai donc modifié en ce sens mais je pense que je vais le remettre.
Tu ne saurais pas modifier la macro complémentaire, elle est protégée, mais si le classeur excel est modifié tu peu le sauver en xla à la place de celui télécharger. Attention, fait une copie du classeur car ça le supprime.
Qu'est-ce qui ne va pas pour le français ?
J'attend encore un peu avant de remplacer les sources que vous ayez exprimés toutes vos remarques. !!
A+
cs_comme Messages postés 122 Date d'inscription dimanche 19 mars 2006 Statut Membre Dernière intervention 18 juillet 2009
5 sept. 2010 à 16:49
La première execution donne l'érreure suivante : type incompatible -- c'est une erreur d'oubli voici ce qu'il y a
Sub Envoyer()
Dim DT As String

if faut que ça soit comme ça

Sub Envoyer()
Dim DT As String : DT = Data.Text
grosbill2004 Messages postés 10 Date d'inscription mercredi 31 mars 2010 Statut Membre Dernière intervention 6 septembre 2010
5 sept. 2010 à 14:43
Re bonjour,

Encore une syntaxe douteuse

Je pense que tu es Suisse ou Belge, rasure toi ce n’est pas une tare je suis moi-même né à Porrentruy (Suisse).

J’avais moi même fabriqué un code similaire il y a plusieurs temps, puis récupéré ,une source sur exel labo, de Bruno Jeune, Frédéric Sigonneau, André Ducrot, Clément Marcotte, CFroFro, Laurent Longre, bj-chiffres-en-lettres.

Ton code est sans conteste bien meilleur que le mien car je ne m’étais pas trop appesanti sur les règles orthographe.

J’ai quand même trouvé encore quelques petits problèmes

soixante-un, soixante-onze ;
Il serait préférable d’écrire soixante et un, soixante et onze
Comme c’est le cas pour quarante et un, vingt et un, trente et un.

Il semblerait que ton code marche pour les champs Suisse et Belge mais pas pour le champ français ?

J’ai essayé d’ajouté, bêtement, dans : InitVar() de Module2 mais sa ne fonctionne pas.

En plus quand je modifie ton code ça ne modifie pas la macro complémentaire et je ne sais pas en créé une nouvelle.

A+
Bill
cs_lermite222 Messages postés 492 Date d'inscription jeudi 5 avril 2007 Statut Membre Dernière intervention 2 juillet 2012 4
3 sept. 2010 à 11:51
Bonjour,
Tu a raison, c'est pas fort esthétique !!
Il y aura peut-être d'autre remarque, je n'ai pas tester toutes les possibilités (sinon, j'y serais encore)
Et ton exemple est correct.
Merci
A+
grosbill2004 Messages postés 10 Date d'inscription mercredi 31 mars 2010 Statut Membre Dernière intervention 6 septembre 2010
2 sept. 2010 à 15:37
Bonjours.
Je ne trouve pas esthétique 1000 = un mille

Peut être :

If Stade > 1 Then 'millier
If strResultat(i) <> "" Then
If strResultat(i) = "un " Then
strTemp = strTemp & "mille "
Else
strTemp = strTemp & VoirRegle(strResultat(i)) & "mille "
End If
End If
i = i + 1
End If
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
30 août 2010 à 21:14
Ton code peut servir à écrire une application pour imprimer
des cheques si les cheques sont de taille standard.
cs_lermite222 Messages postés 492 Date d'inscription jeudi 5 avril 2007 Statut Membre Dernière intervention 2 juillet 2012 4
30 août 2010 à 17:54
J'aurais aimé aller plus loin mais le VB le le permet pas.
Peut-être en .net, suis occupé à voir.
Note que pour la fonction cela ne pose aucun problème pour aller plus loin.
cs_Blodox Messages postés 134 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 24 octobre 2010
30 août 2010 à 17:47
... C'était juste pour le principe... (lol) :)
cs_lermite222 Messages postés 492 Date d'inscription jeudi 5 avril 2007 Statut Membre Dernière intervention 2 juillet 2012 4
30 août 2010 à 17:46
Pour exemple..
En VB6 ou VBA.. Tu met un TextBox et tu tape dans ce TextBox 21.321321321321
Ensuite tu met un transfert
Dim A as double
A = Cdbl(TextBox)
Et regarde ce qu'il y a dans la valeur de A
cs_lermite222 Messages postés 492 Date d'inscription jeudi 5 avril 2007 Statut Membre Dernière intervention 2 juillet 2012 4
30 août 2010 à 17:42
De toutes façons, en VB et VBA c'est limité à cette valeur.
cs_lermite222 Messages postés 492 Date d'inscription jeudi 5 avril 2007 Statut Membre Dernière intervention 2 juillet 2012 4
30 août 2010 à 17:42
Commentaire de Blodox
Faut pas exagérer et se donner des limites. Dans mon cas se sera 0.00000009
A+
cs_Blodox Messages postés 134 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 24 octobre 2010
30 août 2010 à 17:39
P.S.
d' où :
0,000 000 000 000 000 000 300; trois cents trilliardièmes

voilà..
cs_Blodox Messages postés 134 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 24 octobre 2010
30 août 2010 à 17:36
Bonjour,
je repense à un truc :
au niveau de la partie décimale, il faut utiliser
' échelle longue
'
'(0,000 000 000 000 000 000 001; un trilliardième) 10^-21
'(0,000 000 000 000 000 001; un trillionnième) 10^-18
'(0,000 000 000 000 001; un billiardième) 10^-15
'(0,000 000 000 001; un billionnième) 10^-12
'(0.000 000 001; un milliardième) 10^-9
'(0,000 001; un millionnième) 10^-6
'(0,000 01; un cent millième) 10^-5
'(0,000 1; un dix millième) 10^-4
'(0,001; un millième) 10^-3
'(0,01; un centième) 10^-2
'(0,1; un dixième) 10^-1
'
en fonction de la dernière décimale significative, sinon, en fonction de ton nombre de décimales, non significatives comprises, il faudra se référer à l'échelle ci-dessus.

(Système international)

Bon courage !
cs_lermite222 Messages postés 492 Date d'inscription jeudi 5 avril 2007 Statut Membre Dernière intervention 2 juillet 2012 4
30 août 2010 à 16:48
Commentaire de nathansecret,
Devise = 0
Décimale = 1
Normalement si tu met ex: 12.365598 .. devait mettre les millième et millionième.
Mais c'est réglé, dans la prochaine MAJ ce sera opérationnel.

Commentaire de ShayW
Merci de ta participation, j'en tient compte et se sera incormporer dans la MAJ.
A+
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
30 août 2010 à 16:38
Salut
pour savoir si ta séparation du system décimal de ton pc
dim dps as strig
dps = Mid$(Format$(1, "0.0"), 2, 1)
tu peux modifier comme ça

Option Explicit
Dim Monnaie As Byte
Dim dps As String
Dim Py As Byte
Dim DCI As Byte
Private Sub Form_Load()
dps = Mid$(Format$(1, "0.0"), 2, 1)
Me.Data.Text = "132" & dps & "80"
'comme ça à la lancer du prog 132,ou . 80 est affiché selon ton séparateur décimal
Py 0: Monnaie 2: DCI = 1
Envoyer
End Sub
Sub Envoyer()

Data = Replace(Data, " ", "")
Resultat = EnTexte(CDbl(Replace(Data, dps, dps)), Py, Monnaie, DCI)
Data.SelStart = 0
Data.SelLength = Len(Data)
On Error Resume Next
Data.SetFocus
End Sub
je l'ai testé chez moi ça marche tu peux verifier en changeant ton sytem décimal
nathansecret Messages postés 63 Date d'inscription mardi 11 novembre 2008 Statut Membre Dernière intervention 31 octobre 2011
30 août 2010 à 13:55
Je n'ai pas tjrs pas trouvé de bugs.
fripon2003 Messages postés 1 Date d'inscription dimanche 16 septembre 2007 Statut Membre Dernière intervention 30 août 2010
30 août 2010 à 09:30
félicitation , très clean, très clair 10/10
pour taper la virgule en appuyant sur le point du clavier numérique :
Private Sub Dep_KeyPress(Index As Integer, KeyAscii As Integer)
If KeyAscii 46 Then KeyAscii Asc(",")
End Sub
mais, pour plus de portabilité : s'enquérir de la config perso de l'ordi hôte :
initialiser dans général par ex
SeparNombre=Right$(Left$(format$(1234/100,"fixed") 3), 1)
et dans la feuille :
Private Sub Dep_KeyPress(Index As Integer, KeyAscii As Integer)
If KeyAscii 46 Then KeyAscii Asc(SeparNombre)
End Sub

If KeyAscii 46 Then KeyAscii Asc(SeparNombre)

et dans le cas ou l'on veut les [:]pour l'heure
SeparTime = Right$(Left$(Format(Time, "short time"), 3), 1)
Private Sub Dep_KeyPress(Index As Integer, KeyAscii As Integer)
If KeyAscii 46 Then KeyAscii Asc(SeparTime)
End Sub
cs_lermite222 Messages postés 492 Date d'inscription jeudi 5 avril 2007 Statut Membre Dernière intervention 2 juillet 2012 4
29 août 2010 à 16:31
Commentaire de nathansecret >>
Attention, il te faudra attendre la MAJ pour que ce soit réellement "top".
Il reste des erreurs et un bug qui ne devrait pas tardé à être résolu.
Notamment les décimales sans Devise.

Commentaire de ShayW >
Je ne trouve pas un utilitair qui me permet de connaître la configuration du clavier, si tu en connaît un !! ? (Poiunt/virgule)
A+
nathansecret Messages postés 63 Date d'inscription mardi 11 novembre 2008 Statut Membre Dernière intervention 31 octobre 2011
29 août 2010 à 15:45
Bonjour.
Génial et utile, c'est la première source qui fait des conversions nombres-->lettres qui marche aussi bien que j'ai trouvé.
cs_lermite222 Messages postés 492 Date d'inscription jeudi 5 avril 2007 Statut Membre Dernière intervention 2 juillet 2012 4
27 août 2010 à 22:48
Bonjour,
Merci de vos commentaires.
Commentaire de ShayW >
Je tiens compte pour le test du Texbox en chiffre
Le point et la virgule... éternelle discution mais je vais chercher pour y remédier.
Décimale ? si je tape 132.8 j'ai quatre-vingt centimes ?

Commentaire de Blodox >
Concernant le lien, j'ignore pourquoi mais un "%" est ajouter quand ont met le lien en étant sur CS. A partir d'une autre page IE, Google ou autre le lien est bon.
Pour Dollars, en fait il y a toujours 2 "L" c'est une erreur de frappe dans le design, par contre je n'avais jamais fait attention qu'il n'y avait pas de D au pluriel.
Billion / Tera : déformation dùe à la programmation comme giga au lieu de milliard. :D
Billion, centime et dollars seront rectifiés dans la prochaine MAJ mais j'attend un peu, voir s'il n'y a pas d'autre remarque(s). J'ai d'aillleur d'autre modif à faire dans le zip de CS et changer l'image.

Je noterais la MAJ dans l'histotique dés qu'elle sera faite.
A+
cs_Blodox Messages postés 134 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 24 octobre 2010
27 août 2010 à 11:06
P.S.
Le lien suivant n'est pas bons :
http://www.cijoint. fr/cjlink.php?file=cj201008/cij4oXmSVn.zip
-> Internet Explorer ne peut pas afficher cette page Web
cs_Blodox Messages postés 134 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 24 octobre 2010
27 août 2010 à 11:01
Note :
Après vérification, selon l'article L111-1 du Code monétaire et financier : "la monnaie de la France est l'euro. Un euro est divisé en cent centimes". (Décret n°2009-196 du 18 février 2009).

Donc "Euro cent" pas bon...
cs_Blodox Messages postés 134 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 24 octobre 2010
27 août 2010 à 10:46
... et pis US$, c'est DOLLAR / DOLLARS tjrs 2 "L" et pas de "D" à la fin ...
cs_Blodox Messages postés 134 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 24 octobre 2010
27 août 2010 à 10:43
.... oups ...
lire
1000 billions = 1 billiard
et PAS
1000 gigas = 1 billiard (en plus ce seraient 1000 teras)....
cs_Blodox Messages postés 134 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 24 octobre 2010
27 août 2010 à 10:42
Bonjour
en français :
1000 millions = 1 milliard
1000 milliards = 1 billion (tera)
1000 gigas = 1 billiard
1000 billiards = 1 trillion
1000 trillions = 1 trilliard
1000 trilliards = 1 quadrillion

etc...
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
26 août 2010 à 17:08
J'ai compris la faute
Data = 132.80
Resultat = EnTexte(CDbl(Replace(Data, ".", ",")), Py, Monnaie, DCI)
donc data = 132,80 mais comme j'ai le decimal avec .
avec la virgule ça donne autre chose
la solution il faut que prog detecte le mode décimal il y a un ex dans les codes du forum et pas changer le point en virgule
Bonne continuation
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
26 août 2010 à 16:50
Salut
Quelques bugs
limites le textbox à des chiffres seulement si non j'ai un runtime error 13 quand je click envoyer
j'ai écrit 45.5 dans le textbox (j'écris le décimal avec un point) France Euro decimal deux
résulat
Quatre Cent cinquante-cinq Euros
et meme quand tu lances le prog tu as le default 132.80
avec treize mille deux Cent quatre-vingt Euros ?
pourquoi avoir ajouté un radio button pour les décimal
si je frappe 34.8 il y a une décimale
il n'y a pas de faute dors tot graphe lol
Rejoignez-nous