CONVERSION D'UNE CHAÎNE NUMÉRIQUE EN CHAÎNE DE CARACTÈRE

Signaler
Messages postés
515
Date d'inscription
dimanche 17 février 2002
Statut
Membre
Dernière intervention
10 mars 2008
-
Messages postés
515
Date d'inscription
dimanche 17 février 2002
Statut
Membre
Dernière intervention
10 mars 2008
-
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/30712-conversion-d-une-chaine-numerique-en-chaine-de-caractere

Messages postés
515
Date d'inscription
dimanche 17 février 2002
Statut
Membre
Dernière intervention
10 mars 2008
3
pour les vingt et un trente-deux etc....suffit de mofifier le tableau d'index(0) comme suit :

TabTexte(0) = Array("zéro", "et un", "-deux", "-trois", "-quatre", "-cinq", "-six", "-sept", "-huit", "-neuf")


il reste un problème d'espace mais je te laisse chercher un peu ;-)

pour les chaines vide, le prog peut bien faire le test avant d'appeler la fonction genre :

if val(toto) <> 0 then msgbox epeller(toto)

pour le zéro en 2secondes j'ai pas trouvé un test à rajouter surement genre :

If (Val(ValTmp) = 1) And (MilleMulti > 0 And MilleMulti < 2) Then
Chaine = TabTexte(3)(MilleMulti) & Chaine
ElseIf (Val(ValTmp) <> 0) Then
Chaine = ChaineTmp & TabTexte(3)(MilleMulti) & Chaine
End If

à transformer en :

If Valeur = 0 Then
Chaine = "zéro"
ElseIf (Val(ValTmp) = 1) And (MilleMulti > 0 And MilleMulti < 2) Then
Chaine = TabTexte(3)(MilleMulti) & Chaine
ElseIf (Val(ValTmp) <> 0) Then
Chaine = ChaineTmp & TabTexte(3)(MilleMulti) & Chaine
End If

après pour les "s" , là je te laisse bosser , mois l'ortaugrafe ses pat mon faure ;-)

@+ et bon dev
Messages postés
160
Date d'inscription
dimanche 7 décembre 2003
Statut
Membre
Dernière intervention
14 janvier 2009

Yomm,

je te renvoi ta procédure que j'ai modifée légèrement pour deux points
- gestion des nombres 'vides'
- mise en place d'une 'syntaxe' plus conforme à savoir un tiret dasn des nombres du style vingt-trois : avec le tiret..
et trente et un avec le 'et'
il manquen en fait la règle de l'accord des cents : un 's' si la centaine n'est pas suivie de chiffres
ex : trois cents
et pas de s si suivi de chiffres trois cent vingt-trois

enfin je crois que c'est cela..

Drissou
Messages postés
160
Date d'inscription
dimanche 7 décembre 2003
Statut
Membre
Dernière intervention
14 janvier 2009

salut yomm

merci pour la modif..
deux points seulement :
- si le nombre transmis est vide : erreur (j'ai mis une condition)..
- le chiffre transmis est "0" : renvoie une chaine vide...

en tout cas j'essaie de décortiquer ta proc
merci encore

Drissou
Messages postés
515
Date d'inscription
dimanche 17 février 2002
Statut
Membre
Dernière intervention
10 mars 2008
3
bon j'ai regardé , désolé pour le retard, j'était partie sur ce code pour m'occupé 2 minutes et proposer quelque chose d'autre à primael et finalement voilà qu'il me faut réfléchir lol

enfin voilà, j'avais pas mal de taf perso et j'avais pas pu me replonger sur le code de primael ou plutot sur ce ke je proposait moi et je viens de m'y remettre...

donc pour vous , j'ai testé pas mal de possibilité mais pas toutes je pense ;-) et je pense que cela peut marcher jusk'a : 999999999999,999999999999
et oui après ma variable est trop petite lol

enfin , pour le code modifié, voici le résultat , c'était pas grand chose :

------------------------------------------------------------------
Public Function Eppeler(ByVal Nombre As String, Optional SymbolMone As SymbolTmenu = Sans) As String

Dim Parties() As String
Dim i As Integer

Dim TabTexte(4)
Dim TabSymbol(2)

Dim Valeur As Double
Dim ValTmp As String

Dim MilleMulti As Integer

Dim Chaine As String
Dim ChaineTmp As String

TabTexte(0) = Array("zéro", "un", "deux", "trois", "quatre", "cinq", "six", "sept", "huit", "neuf")
TabTexte(1) = Array("", "un", "deux", "trois", "quatre", "cinq", "six", "sept", "huit", "neuf", "dix", "onze", "douze", "treize", "quatorze", "quinze", "seize", "dix-sept", "dix-huit", "dix-neuf")
TabTexte(2) = Array("", "dix", "vingt", "trente", "quarante", "cinquante", "soixante", "soixante-dix", "quatre-vingt", "quatre-vingt-dix")
TabTexte(3) = Array("", " mille ", " million ", " milliard ")

TabSymbol(0) = Array("", " €", " $", " £")
TabSymbol(1) = Array("", " cent", " cents", " shilling")

Nombre = Replace(Nombre, ",", ".")
Parties = Split(Nombre, ".")
Valeur = Val(Parties(0))
GoSub TraiteValeur
Eppeler = Chaine & TabSymbol(0)(SymbolMone)
If UBound(Parties) = 1 Then
Valeur = Val(Parties(1))
GoSub TraiteValeur
Eppeler = Eppeler & " et " & Chaine & TabSymbol(1)(SymbolMone)
End If

Exit Function

TraiteValeur:
MilleMulti = 0
Chaine = ""
Do
ChaineTmp = ""
ValTmp = Format(Val(Right(CStr(Valeur), 3)), "000")
If Val(Left(ValTmp, 1)) > 1 Then
ChaineTmp = TabTexte(0)(Val(Left(ValTmp, 1))) & " cent "
ElseIf Val(Left(ValTmp, 1)) = 1 Then
ChaineTmp = "cent "
End If

If Val(Mid(ValTmp, 2)) < 20 Then
ChaineTmp = ChaineTmp & TabTexte(1)(Val(Mid(ValTmp, 2, 2)))
Else
ChaineTmp = ChaineTmp & TabTexte(2)(Val(Mid(ValTmp, 2, 1)))
If Val(Right(ValTmp, 1)) <> 0 Then ChaineTmp = ChaineTmp & " " & TabTexte(0)(Val(Mid(ValTmp, 3, 1)))
End If
If (Val(ValTmp) = 1) And (MilleMulti > 0 And MilleMulti < 2) Then
Chaine = TabTexte(3)(MilleMulti) & Chaine
ElseIf (Val(ValTmp) <> 0) Then
Chaine = ChaineTmp & TabTexte(3)(MilleMulti) & Chaine
End If

Valeur = (Valeur - Val(ValTmp)) / 1000
MilleMulti = MilleMulti + 1
Loop Until Valeur = 0
Return

End Function
------------------------------------------------------------------

voilà , si vous avez besoin de plus d'infos ou d'autes chiffre non converti correctement n'hésitez surtout pas!!!

@+ et bon dev

Yomm
Afficher les 11 commentaires