Accueil > > > TRADUIRE DES GROS CHIFFRES EN LETTRES AVEC CORRECTION ORTOGRAPHIQUE
TRADUIRE DES GROS CHIFFRES EN LETTRES AVEC CORRECTION ORTOGRAPHIQUE
Information sur la source
Description
Encore une version, mais celle-ci accepte des valeures jusqu'aux quadrillions et la correction ortographique a été poussé selon les normes en vigueur, mais j'attends vos commentaires
Source
- Private Sub Text1_Change()
- Text2 = ConvNumToAlpha(Text1)
- End Sub
-
- Function ConvNumToAlpha(Nombre, Optional Def_EUR__ID1_CHF__ID2_CAD As Integer) As String
- ' MAJ: http://www.vbfrance.com/codes/TRADUIRE-GROS-CHIFFRES-LETTRES-AVEC-CORRECTION-ORTOGRAPHIQUE_47934.aspx
- ' Supporte plusieures devises ainsi que des nombres jusqu'aux quadrillions
- ' Tout est dans cette fonction, il n'est pas nécessaire de faire des déclarations au niveau du module
- Dim sFormat As String, sTraducteur As String, Chiffre As Integer, ChiffreMem As Integer
- Dim I As Integer, X As Integer, sAtome As String, S As String, Group As Integer, GroupMem As Integer
- Static CENTAINNES, DIZAINNES, UNITES, DIVERS, PARTICULIER
- Static DEVISE, CouranteDevise As Integer, Updated As Boolean
- '
- If CouranteDevise <> Def_EUR__ID1_CHF__ID2_CAD Then
- Updated = False 'changement de divise, on doit alors re-initialiser les variables statiques
- CouranteDevise = Def_EUR__ID1_CHF__ID2_CAD
- End If
- If Not Updated Then 'afin d'économiser le CPU, les tableaux suivants sont mis à jour seulement quand nécessaire
- Updated = True
- DEVISE = Split(" Euro, Franc, Dollar", ",")
- UNITES = Split(", un, deux, trois, quatre, cinq, six, sept, huit, neuf, dix, onze, douze, treize, quatorze, quinze, seize, dix-sept, dix-huit, dix-neuf", ",")
- DIZAINNES = Split(", dix, vingt, trente, quarante, cinquante, soixante, soixante-dix, quatre-vingt, quatre-vingt-dix", ",")
- CENTAINNES = Split(", cent, deux cent, trois cent, quatre cent, cinq cent, six cent, sept cent, huit cent, neuf cent", ",")
- PARTICULIER = Split(Chr(71) & Chr(80) & Chr(81) & ", soixante et onze, quatre-vingts, quatre-vingt-un", ",")
- DIVERS = Split("MmiBbTQ., mille, million, milliard, billion, billiard, trillion, quadrillion, Euro ", ",")
- If CouranteDevise Then 'Francs suisses, Dollars canadians
- DIZAINNES(7) = " septante": DIZAINNES(8) = " huitante": DIZAINNES(9) = " nonante":
- ReDim PARTICULIER(0)
- End If
- End If
- On Error GoTo Fin
- '-------------------------------------CDUQCDUTCDUbCDUBCDUiCDUmCDUMCDU.DU-----------------------------
- sFormat = Trim(Format$(CDec(Nombre), "### ### ### ### ### ### ### ###.00")) ' Traduire notre nombre au format
- sTraducteur = Right$("CDUQCDUTCDUbCDUBCDUiCDUmCDUMCDU.DU", Len(sFormat)) ' compatible avec 'sTraducteur'
- Text3 = sFormat
- If Int(Nombre) = 0 Then S = "Zéro"
- Group = 2
- X = InStr(sFormat, " ")
- If X Then Group = Val(Mid(sFormat, 1, X))
- For I = 1 To Len(sFormat)
- Chiffre = Val(Mid$(sFormat, I, 1))
- sAtome = Mid$(sTraducteur, I, 1)
- Select Case sAtome
- Case "U" ' les unités
- If Group = 1 And Mid(sTraducteur, I + 1, 1) = "M" Then ' éviter les 'Un mille'
- ElseIf Chiffre = 1 And ChiffreMem > 0 Then ' vingt et un, trente et un
- S = S & " et" & UNITES(Chiffre)
- ElseIf Chiffre > 1 And ChiffreMem > 0 Then ' vingt-deux, trente-trois
- S = S & "-" & LTrim(UNITES(Chiffre))
- ElseIf Chiffre Then
- If Mid(sFormat, I + 1, 1) = "." And GroupMem = 0 And Nombre > 1000 Then S = S & " et"
- S = S & UNITES(Chiffre)
- End If
- Case "D" ' les dizainnes
- X = InStr(PARTICULIER(0), Chr(Val(Mid$(sFormat, I, 2))))
- If X Then 'soixante et onze, quatre-vingts, quatre-vingt-un
- S = S & PARTICULIER(X)
- I = I + 1 'éviter les prochainnes unités
- ElseIf CouranteDevise = 0 And InStr("79", CStr(Chiffre)) > 0 And Val(Mid$(sFormat, I + 1, 1)) > 0 Then
- S = S & DIZAINNES(Chiffre - 1)
- I = I + 1 'éviter les prochainnes unités
- ChiffreMem = Chiffre
- Chiffre = Val(Mid$(sFormat, I, 1))
- If ChiffreMem = 1 Then ' onze, douze
- S = S & UNITES(Chiffre + 10)
- Else ' soixante-onze, quatre-vingt-douze
- S = S & "-" & LTrim(UNITES(Chiffre + 10))
- End If
- ElseIf Chiffre = 1 Then
- S = S & UNITES(Val(Mid$(sFormat, I + 1, 1) + 10))
- I = I + 1
- ElseIf Chiffre Then
- S = S & DIZAINNES(Chiffre)
- End If
- Case "C" ' les centainnes
- GroupMem = Group
- Group = Val(Mid(sFormat, I, 3))
- If Chiffre Then
- S = S & CENTAINNES(Chiffre)
- If Mid$(sFormat, I + 1, 3) = "00." And Chiffre > 1 Then
- S = S & "s" 'pluriel sur les centainnes: 600 = six cents, 601= six cent un
- End If
- End If
- Case Else
- X = InStr(DIVERS(0), sAtome)
- If X > 0 And Group > 0 Then
- S = S & DIVERS(X)
- If Group > 1 And InStr("miBbTQ", sAtome) > 0 Then
- S = S & "s" ' traiter les pluriels de million, milliard et billion
- End If
- ElseIf sAtome = "." Then
- S = S & DIVERS(X)
- End If
- End Select
- ChiffreMem = Chiffre ' mémoriser ce dernier chiffre
- Next
- 'Autres rectifications:
- If InStr(sFormat, ".00") = 0 Then
- S = S & " Cts"
- S = Replace(S, "Euro ", "Euro et")
- End If
- If Int(Nombre) <> 1 Then S = Replace$(S, "Euro", "Euros") ' pluriel d'Euro
- If Group = 0 And InStr(S, "mille Euro") = 0 Then ' un million d'Euros
- S = Replace$(S, "Euros", "d'Euros")
- End If
- If CouranteDevise Then ' autres que l'Euro
- S = Replace(S, "d'Euros", "de" & DEVISE(CouranteDevise) & "s")
- S = Replace(S, " Euros", DEVISE(CouranteDevise) & "s")
- S = Replace(S, " Euro ", DEVISE(CouranteDevise) & " ")
- End If
- S = LTrim$(S)
- ConvNumToAlpha = UCase(Mid(S, 1, 1)) & Mid(S, 2) ' mettre première lettre en majuscules
- Exit Function
- Fin:
- If Len(Trim(Nombre)) Then MsgBox Err.Description, vbCritical + vbSystemModal
- End Function
Private Sub Text1_Change()
Text2 = ConvNumToAlpha(Text1)
End Sub
Function ConvNumToAlpha(Nombre, Optional Def_EUR__ID1_CHF__ID2_CAD As Integer) As String
' MAJ: http://www.vbfrance.com/codes/TRADUIRE-GROS-CHIFFRES-LETTRES-AVEC-CORRECTION-ORTOGRAPHIQUE_47934.aspx
' Supporte plusieures devises ainsi que des nombres jusqu'aux quadrillions
' Tout est dans cette fonction, il n'est pas nécessaire de faire des déclarations au niveau du module
Dim sFormat As String, sTraducteur As String, Chiffre As Integer, ChiffreMem As Integer
Dim I As Integer, X As Integer, sAtome As String, S As String, Group As Integer, GroupMem As Integer
Static CENTAINNES, DIZAINNES, UNITES, DIVERS, PARTICULIER
Static DEVISE, CouranteDevise As Integer, Updated As Boolean
'
If CouranteDevise <> Def_EUR__ID1_CHF__ID2_CAD Then
Updated = False 'changement de divise, on doit alors re-initialiser les variables statiques
CouranteDevise = Def_EUR__ID1_CHF__ID2_CAD
End If
If Not Updated Then 'afin d'économiser le CPU, les tableaux suivants sont mis à jour seulement quand nécessaire
Updated = True
DEVISE = Split(" Euro, Franc, Dollar", ",")
UNITES = Split(", un, deux, trois, quatre, cinq, six, sept, huit, neuf, dix, onze, douze, treize, quatorze, quinze, seize, dix-sept, dix-huit, dix-neuf", ",")
DIZAINNES = Split(", dix, vingt, trente, quarante, cinquante, soixante, soixante-dix, quatre-vingt, quatre-vingt-dix", ",")
CENTAINNES = Split(", cent, deux cent, trois cent, quatre cent, cinq cent, six cent, sept cent, huit cent, neuf cent", ",")
PARTICULIER = Split(Chr(71) & Chr(80) & Chr(81) & ", soixante et onze, quatre-vingts, quatre-vingt-un", ",")
DIVERS = Split("MmiBbTQ., mille, million, milliard, billion, billiard, trillion, quadrillion, Euro ", ",")
If CouranteDevise Then 'Francs suisses, Dollars canadians
DIZAINNES(7) = " septante": DIZAINNES(8) = " huitante": DIZAINNES(9) = " nonante":
ReDim PARTICULIER(0)
End If
End If
On Error GoTo Fin
'-------------------------------------CDUQCDUTCDUbCDUBCDUiCDUmCDUMCDU.DU-----------------------------
sFormat = Trim(Format$(CDec(Nombre), "### ### ### ### ### ### ### ###.00")) ' Traduire notre nombre au format
sTraducteur = Right$("CDUQCDUTCDUbCDUBCDUiCDUmCDUMCDU.DU", Len(sFormat)) ' compatible avec 'sTraducteur'
Text3 = sFormat
If Int(Nombre) = 0 Then S = "Zéro"
Group = 2
X = InStr(sFormat, " ")
If X Then Group = Val(Mid(sFormat, 1, X))
For I = 1 To Len(sFormat)
Chiffre = Val(Mid$(sFormat, I, 1))
sAtome = Mid$(sTraducteur, I, 1)
Select Case sAtome
Case "U" ' les unités
If Group = 1 And Mid(sTraducteur, I + 1, 1) = "M" Then ' éviter les 'Un mille'
ElseIf Chiffre = 1 And ChiffreMem > 0 Then ' vingt et un, trente et un
S = S & " et" & UNITES(Chiffre)
ElseIf Chiffre > 1 And ChiffreMem > 0 Then ' vingt-deux, trente-trois
S = S & "-" & LTrim(UNITES(Chiffre))
ElseIf Chiffre Then
If Mid(sFormat, I + 1, 1) = "." And GroupMem = 0 And Nombre > 1000 Then S = S & " et"
S = S & UNITES(Chiffre)
End If
Case "D" ' les dizainnes
X = InStr(PARTICULIER(0), Chr(Val(Mid$(sFormat, I, 2))))
If X Then 'soixante et onze, quatre-vingts, quatre-vingt-un
S = S & PARTICULIER(X)
I = I + 1 'éviter les prochainnes unités
ElseIf CouranteDevise = 0 And InStr("79", CStr(Chiffre)) > 0 And Val(Mid$(sFormat, I + 1, 1)) > 0 Then
S = S & DIZAINNES(Chiffre - 1)
I = I + 1 'éviter les prochainnes unités
ChiffreMem = Chiffre
Chiffre = Val(Mid$(sFormat, I, 1))
If ChiffreMem = 1 Then ' onze, douze
S = S & UNITES(Chiffre + 10)
Else ' soixante-onze, quatre-vingt-douze
S = S & "-" & LTrim(UNITES(Chiffre + 10))
End If
ElseIf Chiffre = 1 Then
S = S & UNITES(Val(Mid$(sFormat, I + 1, 1) + 10))
I = I + 1
ElseIf Chiffre Then
S = S & DIZAINNES(Chiffre)
End If
Case "C" ' les centainnes
GroupMem = Group
Group = Val(Mid(sFormat, I, 3))
If Chiffre Then
S = S & CENTAINNES(Chiffre)
If Mid$(sFormat, I + 1, 3) = "00." And Chiffre > 1 Then
S = S & "s" 'pluriel sur les centainnes: 600 = six cents, 601= six cent un
End If
End If
Case Else
X = InStr(DIVERS(0), sAtome)
If X > 0 And Group > 0 Then
S = S & DIVERS(X)
If Group > 1 And InStr("miBbTQ", sAtome) > 0 Then
S = S & "s" ' traiter les pluriels de million, milliard et billion
End If
ElseIf sAtome = "." Then
S = S & DIVERS(X)
End If
End Select
ChiffreMem = Chiffre ' mémoriser ce dernier chiffre
Next
'Autres rectifications:
If InStr(sFormat, ".00") = 0 Then
S = S & " Cts"
S = Replace(S, "Euro ", "Euro et")
End If
If Int(Nombre) <> 1 Then S = Replace$(S, "Euro", "Euros") ' pluriel d'Euro
If Group = 0 And InStr(S, "mille Euro") = 0 Then ' un million d'Euros
S = Replace$(S, "Euros", "d'Euros")
End If
If CouranteDevise Then ' autres que l'Euro
S = Replace(S, "d'Euros", "de" & DEVISE(CouranteDevise) & "s")
S = Replace(S, " Euros", DEVISE(CouranteDevise) & "s")
S = Replace(S, " Euro ", DEVISE(CouranteDevise) & " ")
End If
S = LTrim$(S)
ConvNumToAlpha = UCase(Mid(S, 1, 1)) & Mid(S, 2) ' mettre première lettre en majuscules
Exit Function
Fin:
If Len(Trim(Nombre)) Then MsgBox Err.Description, vbCritical + vbSystemModal
End Function
Conclusion
Pour tester, ajouter 3 textbox à une feuille Text1: pour insérer une valeur Text2: pour recevoir le resultat Text3: pour afficher le format du nombre
Propriétés pour Text2: Multiline=True ScrollBars=Vertical
Historique
- 14 septembre 2008 12:07:27 :
- petite rectification
- 14 septembre 2008 14:22:28 :
- correction proposé par Gillardg acceptée
- 15 septembre 2008 22:32:46 :
- Rajout d'une option pour traiter plusieures devises
- 07 mars 2010 21:27:01 :
- Mise a jour du ZIP
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
convertion chiffres/lettres [ par monfifi ]
Comment convertir des chiffres en lettres?21,75 doit apparaitre sous la forme vingt et un francs et soixante quinze centimes.D'avaance merci.@mitiés.
Des chiffres ou nombres en toutes lettres [ par ALBACOMPA ]
Salut!J'aimerai savoir s'il existe un code en Visual Basic qui permet d'ecrire en toute lettre un chiffre ou un nombre qui lui est passé en paramètre.
combobox: des chiffres ou des lettres [ par lilifly ]
Bonjour, j'ai un petit problème sur Visual Basic Excel:Je voudrai renvoyer dans une combobox une plage de données. Une fois la valeur choisie sélecti
Reconnaitre un objet de type x lettres et y chiffres [ par juju05 ]
bonjour,j'ai besoin de creer une macro sur Excel qui me permettrait de reconnaitre des numeros d'identification personnels (espagnols).Ces numeros son
CONVERSION DES CHIFFRES VERS LES LETTRES [ par malcom78 ]
Bonjour à tous, J'essaye de convertir des chiffres en lettres dans une table access.Alors dans une table, j'ai une colonne ou il y a des chiffres et d
Convertir des caractères en chiffres/lettres [ par tinux ]
Bonjour, y a t-il une méthode très simple (donc pas très fiable) mais qui puisse juste convertir un texte en chiffre par exemple,
conversion chiffres en lettres [ par habiboula ]
BonjourJ'ai besoin d'aide SVP..;J'ai fait du publipostage avec Word et j'ai besoin d'un module ou une macro qui me permettrait de convertir les chiffr
Textbox, chiffres lettres et URL VB.NET 2005 [ par cdie ]
Bonjour à tous, J'ai un (petit) problème. Effectivement, j'ai plusieurs types de textbox dans mon formulaire, dont certains, je veux qu'il ne conti
Chiffres et Lettres [ par valime ]
Le but :Génerer des codes à 6 chiffres uniques à l'aide d'un nom, prénoms et date d'anniverssaire d'une personne (dans un tableau excel).Personnelleme
Combinaisons... [ par r3d62 ]
Bonjour,Je voudrais savoir serai t'il possible de créer un programme pour me donnée les combinaisons de lettres et chiffres en VB.net ?Une petit exemp
|
Derniers Blogs
XNA IS DEAD!XNA IS DEAD! par richardc
Depuis la semaine dernière (et grâce aux TechDays 2012), je me penche activement sur la nouvelle version de Windows, aka Windows 8. Vous me direz, il était temps puisque la première preview date de Septembre dernier.
OK. Remarquez, on n'en est qu'aux...
Cliquez pour lire la suite de l'article par richardc TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 !TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 ! par ROMELARD Fabrice
Speakers: Fabrice Meillon et Stanislas Quastana Cette session est basée entièrement sur celle donnée lors de la BUILD cet hiver. Il n'y a pas d'ajout d'information en rapport avec cet évènement passé. Windows 8 Server sera intégralem...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [HTML5] AUTOUR DU W3C : NOUVEAUX STANDARDS ET WEB MOBILE (LILLE)[HTML5] AUTOUR DU W3C : NOUVEAUX STANDARDS ET WEB MOBILE (LILLE) par Gio
Je m'y prends un peu tard je sais, mais bon je suis développeur web et donc hyper fainéant ! Toujours dans le cadre des technologies émergentes, ici HTML5, parce qu'on aime HTML5 chez Wyg , nous seront présent, le vieux ( Aurélien V.) et moi, pour pr...
Cliquez pour lire la suite de l'article par Gio [WP7] DYNAMICALLY CHANGE STARTUP PAGE[WP7] DYNAMICALLY CHANGE STARTUP PAGE par KooKiz
Let's say that you want to allow the user to customize the startup page of your application. You can easily change the startup page by editing the 'NavigationPage' attribute in the manifest file. But the manifest cannot be modified once the applicatio...
Cliquez pour lire la suite de l'article par KooKiz
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|