VBA convertir un nombre en toutes lettres

Résolu/Fermé
Signaler
Messages postés
102
Date d'inscription
mercredi 27 août 2008
Statut
Membre
Dernière intervention
18 avril 2011
-
Messages postés
8539
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
20 juillet 2021
-
Bonjour,

Existe-t-il une fonction qui peut convertir une variable integer en une variables string contenant le même nombre écrit en toutes lettres ?

Du genre :
Dim Nombre As Integer  
Dim LeNombreEnToutesLettres As String  
Nombre = 12  
LeNombreEnToutesLettres = LaFonctionQueJeCherche(Nombre)  
'Grâce à cette fonction la variable LeNombreEnToutesLettres est égale à "douze"  

C'est parceque j'ai vraiment beaucoup de variables auxquels je dois faire cet opérations =S

Merci d'avance

3 réponses

Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 188
Bonjour,

Tout est dit ici sur le forum.

;o)
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 41989 internautes nous ont dit merci ce mois-ci

Messages postés
102
Date d'inscription
mercredi 27 août 2008
Statut
Membre
Dernière intervention
18 avril 2011
5
En fait sa change pas grand chose : il faut toujours dire que pour tel nombre il faut tel écriture.

Merci quand même
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 188
Il y a forcément, quelque part l'obligation, de dire que tel nombre correspond à tel chiffre ... tout comme on l'apprend à l'école et que l'on garde en mémoire : un = 1, deux = 2 etc ...

Il existe, peut être dans une API ou librairie une fonction qui retourne un nombre en chiffre ou l'inverse, quoi qu'il en soit, dans cette API ou libraire, il y a du code qui dit que pour tel nombre, il faut retourner tel chiffre.

;o)
Messages postés
8539
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
20 juillet 2021
1 720
Voici, en VBasic une macro pour convertir les montants en toute lettre.

Cela peut être amélioré.

Ce code est initialement réaliser pour convertir des montants, placés dans un champs de formulaire word, en toute lettre et son placement dans un autre champs.

Le Champs de type nombre appelé "TheAmount" est lu et converti en toute lettre dans la monnaie placé dans le champs "Money", le résultat est placé dans le champs "Libelle".

Evidemment, vous pouvez modifier le code pour retourner le resultat dans une autre variable.

Le Code :

Sub GatherAmount(TheAmount As Double, Millions, Thaousands, Dinars, Centimes As Integer)
Dim IntAmount As Long

IntAmount = Fix(TheAmount): Centimes = (TheAmount - Fix(TheAmount)) * 100
Dinars = IntAmount Mod 1000: IntAmount = Fix(IntAmount / 1000)
Thaousands = IntAmount Mod 1000: IntAmount = Fix(IntAmount / 1000)
Millions = IntAmount Mod 1000
End Sub
Sub GatherNumber(ANumber As Integer, AUnit, ATens, AHundreds As Integer)
AUnit = ANumber Mod 10
ATens = Fix(ANumber / 10) Mod 10
AHundreds = Fix(ANumber / 100) Mod 10
End Sub
Function TellUnities(ANumber As Integer) As String
Dim TxtNumbers As Variant

TxtNumbers = Array("", "Un", "Deux", "Trois", "Quatre", "Cinq", "Six", "Sept", "Huit", "Neuf")
TellUnities = TxtNumbers(ANumber)
End Function
Function TellTeens(AUnit As Integer) As String
Dim TxtTeens As Variant

TxtTeens = Array("Dix", "Onze", "Douze", "Treize", "Quatorze", "Quinze", "Seize", "Dix Sept", "Dix Huit", "Dix Neuf")
TellTeens = TxtTeens(AUnit)
End Function
Function TellTens(ATens As Integer) As String
Dim TxtTens As Variant

TxtTens = Array("", "", "Vingt", "Trente", "Quarante", "Cinquante", "Soixante", "Soixante Dix", "Quatre Vingt", "Quatre Vingt Dix")
TellTens = TxtTens(ATens)
End Function
Function Epelle(AnAmount As Integer, TellOne As Boolean, TellSuffix As Boolean, Suffix As String) As String
Dim SUnities As Integer
Dim STens As Integer
Dim SHandreds As Integer
Dim SpellAmount As String
Dim ASuffix As String

ASuffix = ""
If AnAmount <> 0 Or TellSuffix Then ASuffix = " " + Suffix + " "

Call GatherNumber(AnAmount, SUnities, STens, SHandreds)
SpellAmount = ""

'Les centaines
If SHandreds <> 0 Then
Select Case SHandreds
Case 1
SpellAmount = SpellAmount + "Cent "
Case 2 To 9
SpellAmount = SpellAmount + TellUnities(SHandreds) + " Cent "
End Select
End If

'Les dizaines
If STens <> 0 Then
Select Case STens
Case 1
SpellAmount = SpellAmount + TellTeens(SUnities)
Case 2, 3, 4, 5, 6, 8
SpellAmount = SpellAmount + TellTens(STens) + " " + TellUnities(SUnities)
Case 7, 9
SpellAmount = SpellAmount + TellTens(STens - 1) + " " + TellTeens(SUnities)
End Select
End If
' Les Unités
If SUnities <> 0 Then
If STens = 0 Then
If SUnities = 1 Then
If TellOne Or SHandreds <> 0 Then
SpellAmount = SpellAmount + " " + TellUnities(SUnities)
End If
Else
SpellAmount = SpellAmount + " " + TellUnities(SUnities)
End If
End If
End If
SpellAmount = SpellAmount + ASuffix
Epelle = SpellAmount
End Function
Function SpellIt(AnAmount As Double, AMoney As String) As String
Dim Mill As Integer
Dim Thao As Integer
Dim Dina As Integer
Dim Cent As Integer
Dim SaySuffix As Boolean


Call GatherAmount(AnAmount, Mill, Thao, Dina, Cent)

SaySiffix = Mill <> 0 Or Thao <> 0 Or Dina <> 0

SpellIt = Epelle(Mill, True, Mill <> 0, "Million") + _
Epelle(Thao, False, Thao <> 0, "Mille") + _
Epelle(Dina, True, True, AMoney) + _
Epelle(Cent, True, Cent <> 0, "Centimes")
End Function
Sub Libeller()
'
' Libeller Macro
'
'
Dim Amount As Double
Dim Money As String
Dim Spling As String

'Récupérer les valeurs des paramètres
Money = ActiveDocument.FormFields("Money").Result 'la monnaie
Amount = ActiveDocument.FormFields("Amount").Result 'le montant

Spling = SpellIt(Amount, Money) 'Libeller le montant Amount dans la monnaie Money

'Affecter la valeur
ActiveDocument.FormFields("Libelle").Result = Spling

End Sub
Sub CalDates()

Dim LetterOfCreditDate As Date
Dim ExpireDate As Date
Dim UlDateOfExp As Date

LetterOfCreditDate = ActiveDocument.FormFields("DateOfLC").Result
ExpireDate = LetterOfCreditDate + 90
' ExpireDate = ActiveDocument.FormFields("DateOfExpiry").Result
ActiveDocument.FormFields("DateOfExpiry").Result = ExpireDate
UlDateOfExp = ExpireDate - 21

ActiveDocument.FormFields("UltimateDate").Result = UlDateOfExp

End Sub
Messages postés
8539
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
20 juillet 2021
1 720
Bekkar,
Ce code ne respecte aucune des règles de l'orthographe française des nombres !

Je trouve très cavalier de venir polluer une discussion déjà résolue sans apporter une quelconque amélioration !

Tu devrait regarder le code de Lermitte222 pour te rendre compte du chemin qu'il te reste à parcourir.

Patrice