begin process at 2012 02 14 03:04:56
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Maths

 > DES NOMBRES EN TOUTES LETTRES (JUSQU'À 999 999 999 999,999 999 999 99)

DES NOMBRES EN TOUTES LETTRES (JUSQU'À 999 999 999 999,999 999 999 99)


 Information sur la source

Note :
8,5 / 10 - par 2 personnes
8,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Maths Niveau :Débutant Date de création :31/12/2002 Date de mise à jour :01/01/2003 12:31:17 Vu / téléchargé :4 567 / 273

Auteur : rene38

Ecrire un message privé
Commentaire sur cette source (11)
Ajouter un commentaire et/ou une note

 Description

Ecrire un nombre en français, je sais, c'est du déjà vu mais :
- on va jusqu'à 999 999 999 999,999 999 999 99
  mais rien n'empêche de supprimer des lignes de code pour limiter
- la sortie est en français, sans faute d'orthographe
- c'est un exemple de fonction récursive (elle s'appelle elle-même)

Appel de la fonction par :

Print Nombre_en_lettres(123.7845) qui donne :
cent vingt trois unités sept mille huit cent quarante cinq dix-millièmes
  

Source

  • Public Function Francise(ByVal nb As String) As String
  • Do While Left(nb, 1) = "0"
  • If Left(nb, 1) = "0" Then nb = Mid(nb, 2) 'suppression des zéros à gauche
  • Loop
  • Select Case Len(nb)
  • Case 0
  • Francise = ""
  • Case 1
  • Select Case nb
  • Case "0": Francise = "zéro"
  • Case "1": Francise = "un"
  • Case "2": Francise = "deux"
  • Case "3": Francise = "trois"
  • Case "4": Francise = "quatre"
  • Case "5": Francise = "cinq"
  • Case "6": Francise = "six"
  • Case "7": Francise = "sept"
  • Case "8": Francise = "huit"
  • Case "9": Francise = "neuf"
  • End Select
  • Case 2
  • Select Case nb
  • Case "10": Francise = "dix"
  • Case "11": Francise = "onze"
  • Case "12": Francise = "douze"
  • Case "13": Francise = "treize"
  • Case "14": Francise = "quatorze"
  • Case "15": Francise = "quinze"
  • Case "16": Francise = "seize"
  • Case "17" To "19": Francise = "dix " & Francise(Right(nb, 1))
  • Case "20" To "29": Francise = "vingt " & Francise(Right(nb, 1))
  • Case "30" To "39": Francise = "trente " & Francise(Right(nb, 1))
  • Case "40" To "49": Francise = "quarante " & Francise(Right(nb, 1))
  • Case "50" To "59": Francise = "cinquante " & Francise(Right(nb, 1))
  • Case "60" To "69": Francise = "soixante " & Francise(Right(nb, 1))
  • Case "70" To "79"
  • nb = Format(Val(nb) - 60, "##")
  • Francise = "soixante " & Francise(nb)
  • If Right(Francise, 4) = "onze" Then Francise = "soixante et onze"
  • Case "80": Francise = "quatre-vingts"
  • Case "81" To "99"
  • nb = Format(Val(nb) - 80, "##")
  • Francise = "quatre-vingt " & Francise(nb)
  • End Select
  • If Right(Francise, 2) = "un" And nb > "20" And nb < 70 Then Francise = Left(Francise, Len(Francise) - 2) & "et un"
  • If Right(Francise, 4) = "zéro" Then Francise = Left(Francise, Len(Francise) - 5)
  • Case 3
  • Select Case Left(nb, 1)
  • Case "1": Francise = "cent " & Francise(Mid(nb, 2))
  • Case Else
  • Francise = Francise(Left(nb, 1)) & " cent " & Francise(Mid(nb, 2))
  • If Right(Francise, 6) = " cent " Then Francise = Left(Francise, Len(Francise) - 1) & "s"
  • End Select
  • Case 4 To 6
  • Francise = Francise(Left(nb, Len(nb) - 3)) & " mille " & Francise(Right(nb, 3))
  • If Left(Francise, 2) = "un" Then Francise = Mid(Francise, 4)
  • Case 7 To 9
  • Francise = Francise(Left(nb, Len(nb) - 6)) & " millions " & Francise(Right(nb, 6))
  • If Left(Francise, 2) = "un" Then Francise = Left(Francise, 10) & Mid(Francise, 12)
  • Case 10 To 12
  • Francise = Francise(Left(nb, Len(nb) - 9)) & " milliards " & Francise(Right(nb, 9))
  • If Left(Francise, 2) = "un" Then Francise = Left(Francise, 11) & Mid(Francise, 13)
  • Case Else
  • End Select
  • End Function
  • '-------------------------------------------------------------------
  • Public Function Nombre_en_lettres(ByVal nb As String) As String
  • Dim Affichage As String, Entier As String, Décimal As String
  • nb = Replace(nb, ".", ",")
  • If Not IsNumeric(nb) Then
  • MsgBox Form1.Text1.Text & " n'est pas un nombre", vbCritical, Erreur
  • Exit Function
  • End If
  • If InStr(nb, ",") = 0 Then 'c'est un entier
  • Affichage = Francise(nb)
  • Else 'c'est un décimal
  • Do While Right(nb, 1) = "0" 'suppression des zéros à droite de la partie décimale
  • If Right(nb, 1) = "0" Then nb = Left(nb, Len(nb) - 1)
  • Loop
  • Entier = Francise(Left(nb, InStr(nb, ",") - 1))
  • If Right(Entier, 2) = "un" Then Entier = Entier & "e"
  • If Entier = "une" Then
  • Entier = Entier & " unité "
  • Else
  • If Entier <> "" Then
  • Entier = Entier & " unités "
  • End If
  • End If
  • Décimal = Francise(Mid(nb, InStr(nb, ",") + 1))
  • Affichage = Entier & Décimal & " "
  • Select Case Len(Mid(nb, InStr(nb, ",") + 1))
  • Case 1: Affichage = Affichage & "dixième"
  • Case 2: Affichage = Affichage & "centième"
  • Case 3: Affichage = Affichage & "millième"
  • Case 4: Affichage = Affichage & "dix-millième"
  • Case 5: Affichage = Affichage & "cent-millième"
  • Case 6: Affichage = Affichage & "millionième"
  • Case 7: Affichage = Affichage & "dix-millionième"
  • Case 8: Affichage = Affichage & "cent-millionième"
  • Case 9: Affichage = Affichage & "milliardième"
  • Case 10: Affichage = Affichage & "dix-milliardième"
  • Case 11: Affichage = Affichage & "cent-milliardième"
  • End Select
  • If Décimal <> "un" Then Affichage = Affichage & "s"
  • End If
  • Nombre_en_lettres = Affichage' retour fonction
  • End Function
Public Function Francise(ByVal nb As String) As String
Do While Left(nb, 1) = "0"
    If Left(nb, 1) = "0" Then nb = Mid(nb, 2) 'suppression des zéros à gauche
Loop
Select Case Len(nb)
    Case 0
        Francise = ""
    Case 1
    Select Case nb
        Case "0": Francise = "zéro"
        Case "1": Francise = "un"
        Case "2": Francise = "deux"
        Case "3": Francise = "trois"
        Case "4": Francise = "quatre"
        Case "5": Francise = "cinq"
        Case "6": Francise = "six"
        Case "7": Francise = "sept"
        Case "8": Francise = "huit"
        Case "9": Francise = "neuf"
    End Select
    Case 2
        Select Case nb
            Case "10": Francise = "dix"
            Case "11": Francise = "onze"
            Case "12": Francise = "douze"
            Case "13": Francise = "treize"
            Case "14": Francise = "quatorze"
            Case "15": Francise = "quinze"
            Case "16": Francise = "seize"
            Case "17" To "19": Francise = "dix " & Francise(Right(nb, 1))
            Case "20" To "29": Francise = "vingt " & Francise(Right(nb, 1))
            Case "30" To "39": Francise = "trente " & Francise(Right(nb, 1))
            Case "40" To "49": Francise = "quarante " & Francise(Right(nb, 1))
            Case "50" To "59": Francise = "cinquante " & Francise(Right(nb, 1))
            Case "60" To "69": Francise = "soixante " & Francise(Right(nb, 1))
            Case "70" To "79"
                nb = Format(Val(nb) - 60, "##")
                Francise = "soixante " & Francise(nb)
                If Right(Francise, 4) = "onze" Then Francise = "soixante et onze"
            Case "80": Francise = "quatre-vingts"
            Case "81" To "99"
                nb = Format(Val(nb) - 80, "##")
                Francise = "quatre-vingt " & Francise(nb)
        End Select
        If Right(Francise, 2) = "un" And nb > "20" And nb < 70 Then Francise = Left(Francise, Len(Francise) - 2) & "et un"
        
        If Right(Francise, 4) = "zéro" Then Francise = Left(Francise, Len(Francise) - 5)
    Case 3
        Select Case Left(nb, 1)
            Case "1": Francise = "cent " & Francise(Mid(nb, 2))
            Case Else
                Francise = Francise(Left(nb, 1)) & " cent " & Francise(Mid(nb, 2))
                If Right(Francise, 6) = " cent " Then Francise = Left(Francise, Len(Francise) - 1) & "s"
        End Select
    Case 4 To 6
        Francise = Francise(Left(nb, Len(nb) - 3)) & " mille " & Francise(Right(nb, 3))
        If Left(Francise, 2) = "un" Then Francise = Mid(Francise, 4)
    Case 7 To 9
        Francise = Francise(Left(nb, Len(nb) - 6)) & " millions " & Francise(Right(nb, 6))
        If Left(Francise, 2) = "un" Then Francise = Left(Francise, 10) & Mid(Francise, 12)
    Case 10 To 12
        Francise = Francise(Left(nb, Len(nb) - 9)) & " milliards " & Francise(Right(nb, 9))
        If Left(Francise, 2) = "un" Then Francise = Left(Francise, 11) & Mid(Francise, 13)
    Case Else
End Select
End Function
'-------------------------------------------------------------------
Public Function Nombre_en_lettres(ByVal nb As String) As String
Dim Affichage As String, Entier As String, Décimal As String
nb = Replace(nb, ".", ",")
If Not IsNumeric(nb) Then
    MsgBox Form1.Text1.Text & " n'est pas un nombre", vbCritical, Erreur
    Exit Function
End If
If InStr(nb, ",") = 0 Then 'c'est un entier
    Affichage = Francise(nb)
Else 'c'est un décimal
    Do While Right(nb, 1) = "0" 'suppression des zéros à droite de la partie décimale
        If Right(nb, 1) = "0" Then nb = Left(nb, Len(nb) - 1)
    Loop
    Entier = Francise(Left(nb, InStr(nb, ",") - 1))
    If Right(Entier, 2) = "un" Then Entier = Entier & "e"
    If Entier = "une" Then
        Entier = Entier & " unité "
    Else
         If Entier <> "" Then
          Entier = Entier & " unités "
        End If
    End If
    Décimal = Francise(Mid(nb, InStr(nb, ",") + 1))
    Affichage = Entier & Décimal & " "
    Select Case Len(Mid(nb, InStr(nb, ",") + 1))
        Case 1: Affichage = Affichage & "dixième"
        Case 2: Affichage = Affichage & "centième"
        Case 3: Affichage = Affichage & "millième"
        Case 4: Affichage = Affichage & "dix-millième"
        Case 5: Affichage = Affichage & "cent-millième"
        Case 6: Affichage = Affichage & "millionième"
        Case 7: Affichage = Affichage & "dix-millionième"
        Case 8: Affichage = Affichage & "cent-millionième"
        Case 9: Affichage = Affichage & "milliardième"
        Case 10: Affichage = Affichage & "dix-milliardième"
        Case 11: Affichage = Affichage & "cent-milliardième"
    End Select
    If Décimal <> "un" Then Affichage = Affichage & "s"
End If
Nombre_en_lettres = Affichage' retour fonction
End Function
  

 Conclusion

Dois-je vraiment le mettre dans la catégorie maths ?  

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip Source avec une capture AFFICHER ET IMPRIMER DANS TOUS LES SENS : APPLICATION
Source avec Zip Source avec une capture RACCOURCI SUR LE BUREAU EN VB6
Source avec Zip Source avec une capture COURBE EN COORDONNÉES PARAMÉTRIQUES
Source avec Zip EFFECTUER DES SYMÉTRIES SUR UNE IMAGE
Source avec Zip Source avec une capture FEUILLE DE FOND D'UNE BOITE DE CD/DVD

 Sources de la même categorie

Source avec Zip Source avec une capture CONVERTISSEUR HEXAVIGÉSIMAL par shaeks
Source avec Zip Source avec une capture Source .NET (Dotnet) CRYPTOGRAPHIE AFFINE par Tigrou66
Source avec Zip Source avec une capture SCANNER FLEX par lajouad
Source avec Zip EQUATIONSECONDDEGRÉ,MATH,DEGRÉ par shadkitenge
Source avec Zip Source .NET (Dotnet) SOMME DE CHIFFRES CONTENUE DANS UN NOMBRE par alpha5

Commentaires et avis

Commentaire de PROGRAMMIX le 31/12/2002 10:00:40

Allez histoire de te taquiner un peu...

Pourrais-tu créer un zip avec le contenu de ta source dans un module, mais en modifiant celle-ci de telle manière que le tout puisse être utilisé en France, en Belgique et en Suisse... ?

Des indices :
71 et 91 en Belgique se disant septante-et-un et nonante-et-un;
80 en Suisse se dit octante...
Pour le Québec, je ne sais pas s'il y a des différences...

Et oui, c'est ça la francophonie...
Allez

Commentaire de LordBob le 31/12/2002 11:02:09

lol

Commentaire de Danette le 31/12/2002 12:19:25

Qui a entendu qu'en Suisse on disais octante ??? Au Tessin peut'être...! Bonne année à tous !
Un Suisse !

Commentaire de VicoLaChips2 le 31/12/2002 15:43:58

Toutes les routes mènent à Rome. En revanche je pense que ton code fait le tour du monde avant d'arriver à la solution !!
ya trop de select case à mon gout... et pas asser de variables !!

Mais c'est un chouette problème !!, B Ä !

@+, VIC

Commentaire de rene38 le 31/12/2002 15:47:42

Après quelques recherches, il semble bien que les vocables "octante" et "huitante" ne soient pas ou plus utilisés nulle part.
Restent donc les cas de "septante" et "nonante" ou "noinante") qui ne feraient que simplifier le code, ces deux expressions étant alors ravalées au rang des "vingt", "trente", ..., "soixante". Tout un chacun est alors capable de modifier le code pour le traduire en wallon ou en romanche.
Dernier détail pour les éventuels taquins : contrairement à ce que j'affirmais dans ma présentation, il reste des fautes d'orthographe : absence de traits d'union entre les cardinaux au moins pour les nombres inférieurs à cent.
Sur ce, bonne année deux mille trois à tous.

Commentaire de Carnage le 31/12/2002 18:39:49

lol, lidee est bonne, c pas mal :-D

CaRnAgE

Commentaire de couriousous le 31/12/2002 20:27:31

ben ... disons que ne suisse, huitante est utilisé dans les canton de Fribourg et Vaud. ( pour genève je sais pas ) et pour Neuchatel c'est quatre-vingt.

Commentaire de Optitech le 08/02/2003 13:55:38

Très pratique  ! ! ! Sutout pour moi car je fait plein de fautes d'orthographe !!!!!!!!!!!!!!!

Commentaire de TheBabyCool le 09/03/2003 15:58:43

en Suisse pour 80 on dit huitante(région de Vaud) et quatre-vingt(Jura) et pour 97 par exemple ont dit nonante sept, pour 75 on dit septante cinq.
bonne prog

Commentaire de aghbalouu le 07/11/2003 18:36:48

c'est programme est bien utilisée mais il faut trouver un autre solution sans utilisé les classes ou les modules par exemple personnaliser les procédures qui sont trés simple et point finale

Commentaire de ana_adil le 08/03/2005 20:48:03

tres interresant Merci.

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,279 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales