Page 1 sur 2 12 DernièreDernière
Résultats de 1 à 10 sur 12

Sujet : Conversion chiffres en lettres

  1. #1

    Conversion chiffres en lettres

    Bonjour à tous,

    Je ne sais pas si je suis au bon endroit....un peu perdue je crois.
    En fait voila, je dois concevoir une macro sur excel permettant de convertir un montant en euros en chiffres en lettres. Cependant, je ne sais pas comment faire, ce n\'est pas je pense du ressort d\'une simple assistante. J\'ai bien récupérer du code en Vba mais impossible de le faire fonctionner.

    Je vous remercie à tous

    Flo

  2. #2
    Membre MP
    Inscrit
    août 2013
    Messages
    1 823
    Poste ton code pour que l\'on puisse le voir et la on pourra peut être t\'aider.

    Sinon, si les assitantes savait coder un minimum en VB, ce serait un plus dans l\'entreprise.

    J\'ai formé ma dernières secrétaire a l\'utilisation de VBA et je ne l\'ai jamais regrété d\'autant qu\'avec Excel, elle s\'est mise a faire des merveilles.

    Domage qu\'elle n\'ai jamais reussi elle, a faire evoluer mon écriture en français !

    :wink:

  3. #3
    Voici le code dont je dispose...merci si tu as une réponse.
    Ton assistante a bien de la chance. Si les dirigeants de la societe ou je travaille pouvait consacrer un budget à l\'utilisation de la vba ce serait vachement bien...mais bon avant d\'en arriver la , il faut que chaque assistante se debrouille. .

    J\'espère que tu auras une help for me.


    Function Lettre(MonChiffre As Double) As Variant
    Application.Volatile
    If MonChiffre > 999999999999# Then
    Lettre = \"Limité à 999 Milliards\"
    Exit Function
    End If
    LettreSub MonChiffre, Lettre
    End Function
    Sub LettreSub(MonChiffre, MonTexte)
    \'Ce module traite le chiffre par groupe de trois chiffre
    \' Milliars, millions....

    Dim Milliards, Millionds, Centmilles, Centaines, Dizaines, MesLettres As String
    If MonChiffre < 0 Then
    MonChiffre = Abs(MonChiffre)
    MonTexte = MonTexte & \"Moins \"
    End If
    Machaine = CStr(Format(MonChiffre, \"000000000000.00\&quot)
    \'MsgBox Machaine
    Milliards = Mid(Machaine, 1, 3)
    Millionds = Mid(Machaine, 4, 3)
    Centaines = Mid(Machaine, 10, 3)
    \'Milles = Mid(Machaine, 10, 3)
    Centmilles = Mid(Machaine, 7, 3)
    Dizaines = Mid(Machaine, 11, 2)
    Centimes = Mid(Machaine, 14, 2)
    If Milliards = \"001\" Then
    MonTexte = MonTexte & \"un milliard \"
    End If
    If Milliards > \"001\" Then
    Lettre3 Milliards, MesLettres
    MonTexte = MonTexte & MesLettres & \" milliards \"
    End If

    If Millionds = \"001\" Then
    MonTexte = MonTexte & \"un million \"
    End If
    If Millionds > \"001\" Then
    Lettre3 Millionds, MesLettres
    MonTexte = MonTexte & MesLettres & \" millions \"
    End If

    If Centmilles = \"001\" Then
    MonTexte = MonTexte & \"mille \"
    End If
    If Centmilles > \"001\" Then
    Lettre3 Centmilles, MesLettres
    MonTexte = MonTexte & MesLettres & \" mille \"
    End If

    If Centaines > \"000\" Then
    Lettre3 Centaines, MesLettres
    MonTexte = MonTexte & MesLettres & \" Euro\"
    \' If Centaines>199 and
    If Centaines > \"001\" Then
    MonTexte = MonTexte & \"s\"
    End If

    End If

    If Centaines = \"000\" And Centmilles > \"000\" Then
    MonTexte = MonTexte & \" Euros \"
    End If

    If Centimes > \"00\" Then
    Lettre3 Centimes, MesLettres
    If MonChiffre < 1 Then
    MonTexte = MonTexte & MesLettres & \" cent\"
    Else
    MonTexte = MonTexte & \" et\" & MesLettres & \" cent\"
    End If
    End If
    If Centimes > \"01\" Then
    MonTexte = MonTexte & \"s\"
    End If


    End Sub

    Sub Lettre3(MonChiffre, Lettre)
    Lettre = \"\"
    Dim Un(19) As String
    Dim Dz(10) As String
    Dim Chiffre, Chiffre1, Chiffre2, Chiffre3 As Single
    \'Dim Lettre As String


    Un(1) = \"un\"
    Un(2) = \"deux\"
    Un(3) = \"trois\"
    Un(4) = \"quatre\"
    Un(5) = \"cinq\"
    Un(6) = \"six\"
    Un(7) = \"sept\"
    Un(8) = \"huit\"
    Un(9) = \"neuf\"
    Un(10) = \"dix\"
    Un(11) = \"onze\"
    Un(12) = \"douze\"
    Un(13) = \"treize\"
    Un(14) = \"quatorze\"
    Un(15) = \"quinze\"
    Un(16) = \"seize\"
    Un(17) = \"dix sept\"
    Un(18) = \"dix huit\"
    Un(19) = \"dix neuf\"

    Dz(1) = \"dix\"
    Dz(2) = \"vingt\"
    Dz(3) = \"trente\"
    Dz(4) = \"quarante\"
    Dz(5) = \"cinquante\"
    Dz(6) = \"soixante\"
    Dz(7) = \"soixante-dix\"
    Dz(8) = \"quatre vingt\"
    Dz(9) = \"quatre vingt-dix\"
    If MonChiffre = 80 Then
    Lettre = \"quatre vingts\"
    Exit Sub
    End If

    \'MsgBox CStr(Format(ActiveCell, \"000000000.00\&quot)
    \'Set d = ActiveCell.Offset(1, 0)
    Machaine = CStr(Format(MonChiffre, \"000\&quot)
    \'MsgBox Mid(Machaine, i, 1)
    Chiffre1 = Mid(Machaine, 1, 1)
    Chiffre2 = Mid(Machaine, 2, 1)
    Chiffre3 = Mid(Machaine, 3, 1)

    \' Centaines
    If Chiffre1 > 1 Then Lettre = Un(Chiffre1)
    If Chiffre1 > 0 Then Lettre = Lettre & \" cent\"
    If Chiffre1 > 1 And Chiffre2 = 0 And Chiffre3 = 0 Then Lettre = Lettre & \"s\"
    \'Dizaines

    Select Case Chiffre2
    Case 2 To 6, 8
    Lettre = Lettre & \" \" & Dz(Chiffre2)

    Case 1, 7, 9
    If Chiffre3 = 0 Then
    Lettre = Lettre & \" \" & Dz(Chiffre2)
    Else
    Lettre = Lettre & \" \" & Dz(Chiffre2 - 1)
    End If
    End Select

    \'Unités
    Select Case Chiffre2
    Case 2 To 6, 8
    If Chiffre3 = 1 Then
    Lettre = Lettre & \" et \" & Un(Chiffre3)
    Else
    Lettre = Lettre & \" \" & Un(Chiffre3)
    End If
    Case 1 To 7, 9
    If Chiffre3 > 0 Then Lettre = Lettre & \" \" & Un(10 + Chiffre3)
    \'ElseIf Chiffre3 = 1 Then Lettre = Lettre & \" et \" & Un(Chiffre3)
    Case 0
    Lettre = Lettre & \" \" & Un(Chiffre3)
    End Select


    \'MsgBox Lettre
    End Sub
    :cry: :cry: :cry:

  4. #4
    Membre MP
    Inscrit
    août 2013
    Messages
    1 823
    Salut florianelle

    Ton code m\'a beaucoup impressioné, je ne sais pas le \'niveau\' de programmation que tu as mais en tous cas les structures que tu met en oeuvre montre une etude avancée du langage.
    Je connais des developpeur d\'école qui ont moins de pratique que tois (il finiront pas en entreprise mais ...)

    Je vais me permetre de te faire des remarques quant au style de ton code. Ne te vexe pas c\'est fais pour apprendre et pas pour descendre.

    1/ les \'tabulations\' comme pour la dactilo les tabulation dans un code source sont importantes cela permet de se \'situer\' rapidement dans les code.
    Tu dois tabuler tes lignes derrière les contitions et les select par exemple ainsi que, de base, toutes les lignes d\'une Sub ou Function.

    2/ les commentaires :
    indispensable, pour \'signer\' ton code et pour indiquer ce que ton code réalise. (pense a ceux qui essaie de te lire)
    Il est donc génial d\'indiquer ce que fait une sub, ce qui est accepté en entré et ce qui en sort.
    De plus les \'bidouilles\' alambiquées auront avantage a être expliquées par un petit mot explicite.
    Il est donc de bon ton de prendre le lecteur du code source pour un ignare, c\'est lui rendre service (sans pour autant mettre un commentaire par ligne)

    3/ les variables se déclarent de preference au debut d\'une sub. (déclaration = dire que tel variable est de tel type (ex : Dim Lettre As String ))
    Ainsi le lecteur voie tout de suite les variables qui seront manipulées dans la sub

    4/ les \'affectations\' (dire que tel variable egale tel valeur) se mettent de preference juste derière les déclarations des variables.
    ensuite viens le code.

    5/ pour que les \'function\' renvoie une valeur en VB il faux dire dans le code que function = xxx un exemple:

    Code:
    Function Lettre(MonChiffre As Double) As Variant 
        Lettre = \"cent\"
    end Function
    fait que la fonction Lettre() renvoie \"cent\"

    Sinon voici le resultat de ma matiné de révasserie :

    Code:
    Private Sub CommandButton1_Click()
    
        \' test fonctionnel
        Cells(1, 2) = Convert(Cells(1, 1))
        
    End Sub
    
    ------------------------------------------------------------------------------------------------------------
    
        \' (C) 2004 florianelle
        \'
        \' contact : florianelle@caramail.com
        \' but : Ce module traite le chiffre par groupe de trois chiffre
        \' usage : MonChiffreTextuel = Convert(MonChiffreNumérique)
        \' Entrée : un chiffre
        \' Sortie : une chaine de caractère representant l\'entrée dans un langage naturel assortie du terme EURO
        \' limites : Limité à 999 Milliards
    
    
    Function Convert(MonChiffre) As String
    
        \' declaration des variables
        Dim Milliards, Millionds, Centmilles, Centaines, Dizaines, MesLettres As String
    
        \' Vérifier les limites
        If (Not Verif(MonChiffre)) Then
            MsgBox (\"votre Nombre est en dehors des limites\")
            Exit Function
        End If
        
        \' formatage de la chaine d\'entrée
        Machaine = CStr(Format(MonChiffre, \"000000000000.00\"))
        
        \' extraction des partiels
        Milliards = Mid(Machaine, 1, 3)
        Millionds = Mid(Machaine, 4, 3)
        Centaines = Mid(Machaine, 10, 3)
        Centmilles = Mid(Machaine, 7, 3)
        Dizaines = Mid(Machaine, 11, 2)
        Centimes = Mid(Machaine, 14, 2)
        
        
        \' cas des resultats négatifs (la le boss il pleure, -> sortir les mouchoirs)
        If MonChiffre < 0 Then
            MonChiffre = Abs(MonChiffre)
            Convert = Convert & \"Moins \"
        End If
        
        \' ---------------------------------------------------
        If Milliards = \"001\" Then
            Convert = Convert & \"un milliard \"
        End If
        
        \' ---------------------------------------------------
        If Milliards > \"001\" Then
            LettreConvert Milliards, MesLettres
            Convert = Convert & MesLettres & \" milliards \"
        End If
        
        \' ---------------------------------------------------
        If Millionds = \"001\" Then
            Convert = Convert & \"un million \"
        End If
        
        \' ---------------------------------------------------
        If Millionds > \"001\" Then
            LettreConvert Millionds, MesLettres
            Convert = Convert & MesLettres & \" millions \"
        End If
        
        \' ---------------------------------------------------
        If Centmilles = \"001\" Then
            Convert = Convert & \"mille \"
        End If
        
        \' ---------------------------------------------------
        If Centmilles > \"001\" Then
            LettreConvert Centmilles, MesLettres
            Convert = Convert & MesLettres & \" mille \"
        End If
        
        \' ---------------------------------------------------
        If Centaines > \"000\" Then
            LettreConvert Centaines, MesLettres
            Convert = Convert & MesLettres & \" Euro\"
            If Centaines > \"001\" Then
                Convert = Convert & \"s\"
            End If
        End If
        
        \' ---------------------------------------------------
        If Centaines = \"000\" And Centmilles > \"000\" Then
            Convert = Convert & \" Euros \"
        End If
        
        \' ---------------------------------------------------
        If Centimes > \"00\" Then
            LettreConvert Centimes, MesLettres
            If MonChiffre < 1 Then
                Convert = Convert & MesLettres & \" cent\"
            Else
                Convert = Convert & \" et\" & MesLettres & \" cent\"
            End If
        End If
        
        \' ---------------------------------------------------
        If Centimes > \"01\" Then
            Convert = Convert & \"s\"
        End If
    
    
    End Function
    
    ------------------------------------------------------------------------------------------------------------
    
    Function Verif(MonChiffre As Variant) As Boolean
        
        \' vérification des limites
        \' entrée : un chiffre a convertir
        \' retourne :
        \' - vrai si le nombre est valide (inférieur au maximum possible)
        \' - faux si le nombre exède le maximum
        
        Application.Volatile
        Verif = True
        If MonChiffre > 999999999999# Then
            Lettre = \"###################\"
            Verif = False
        End If
        
    End Function
    
    ------------------------------------------------------------------------------------------------------------
    
    Sub LettreConvert(MonChiffre, Lettre)
    
        \' convertion par bloc de mille
        
        Dim Un(19) As String
        Dim Dz(10) As String
        Dim Chiffre, Chiffre1, Chiffre2, Chiffre3 As Single
          
        Lettre = \"\"
          
        Un(1) = \"un\"
        Un(2) = \"deux\"
        Un(3) = \"trois\"
        Un(4) = \"quatre\"
        Un(5) = \"cinq\"
        Un(6) = \"six\"
        Un(7) = \"sept\"
        Un(8) = \"huit\"
        Un(9) = \"neuf\"
        Un(10) = \"dix\"
        Un(11) = \"onze\"
        Un(12) = \"douze\"
        Un(13) = \"treize\"
        Un(14) = \"quatorze\"
        Un(15) = \"quinze\"
        Un(16) = \"seize\"
        Un(17) = \"dix sept\"
        Un(18) = \"dix huit\"
        Un(19) = \"dix neuf\"
        
        Dz(1) = \"dix\"
        Dz(2) = \"vingt\"
        Dz(3) = \"trente\"
        Dz(4) = \"quarante\"
        Dz(5) = \"cinquante\"
        Dz(6) = \"soixante\"
        Dz(7) = \"soixante-dix\"
        Dz(8) = \"quatre vingt\"
        Dz(9) = \"quatre vingt-dix\"
        
        If MonChiffre = 80 Then
            Lettre = \"quatre vingts\"
            Exit Sub
        End If
        
        Machaine = CStr(Format(MonChiffre, \"000\"))
        Chiffre1 = Mid(Machaine, 1, 1)
        Chiffre2 = Mid(Machaine, 2, 1)
        Chiffre3 = Mid(Machaine, 3, 1)
        
        \' Centaines
        If Chiffre1 > 1 Then Lettre = Un(Chiffre1)
        If Chiffre1 > 0 Then Lettre = Lettre & \" cent\"
        If Chiffre1 > 1 And Chiffre2 = 0 And Chiffre3 = 0 Then Lettre = Lettre & \"s\"
        
        
        \'Dizaines
        Select Case Chiffre2
            Case 2 To 6, 8
                Lettre = Lettre & \" \" & Dz(Chiffre2)
            Case 1, 7, 9
                If Chiffre3 = 0 Then
                    Lettre = Lettre & \" \" & Dz(Chiffre2)
                Else
                    Lettre = Lettre & \" \" & Dz(Chiffre2 - 1)
                End If
        End Select
        
        \'Unités
        Select Case Chiffre2
            Case 2 To 6, 8
                If Chiffre3 = 1 Then
                    Lettre = Lettre & \" et \" & Un(Chiffre3)
                Else
                    Lettre = Lettre & \" \" & Un(Chiffre3)
                End If
            Case 1 To 7, 9
                If Chiffre3 > 0 Then Lettre = Lettre & \" \" & Un(10 + Chiffre3)
            Case 0
                Lettre = Lettre & \" \" & Un(Chiffre3)
        End Select
    End Sub

    Pour finir, je n\'ai que remanié ton code qui fonctionnait déjà tu trouvera une sub qui correspond a un bouton dans la gille XL, sub qui invoque ton convertisseur en affichant le resultat dans la cellule adjacente au nombre que tu tente de convertir.
    J\'ai aussi changé deux trois nom de function ou variables afin de m\'y retrouver et de rendre le code un peu plus \'lisible\' (mais la C subjectif comme choix).
    N\'esite pas a revenir et a donner ton sentiment sur ce code et surtout accroche toi a la prog VBA .

    A bientôt sur MoteurProg :wink:

  5. #5
    Bonjour Zeb,
    Je tiens à remercier pour ton code. Celui dont je disposais avait été récupéré, d\'ou le fait que ce n\'est pas mon niveau de programmation.
    Maintenant j\'ai un autre souci...et oui je suis trop cruche je crois, je n\'arrive pas à faire fonctionner la macro. Peut etre ai je mal procédé , je sais pas. Peux tu m\'expliquer comment tu ferais pour l\'executer.


    d\'avance merci

    flo

  6. #6
    Membre MP
    Inscrit
    août 2013
    Messages
    1 823
    J\'ai beaucoup aimé \' je suis trop cruche\', tu n\'est pas cruche , tu n\'a jamais apris a faire cela c\'est tout. Les cruches c\'est ceux qui n\'essaie pas et qui ne se posent pas de questions. En plus tu es la première assistante qui me pose des questions de Programmation, sur ce forum . (je pense que les autres ne savent même pas que ça existe !) :


    1/ Crée un nouveau document Excel.

    2/ une fois Excel lancé clique avec le bouton de droite sur un coin vide en haut et coche \'Visual Basic\' pour afficher la barre d\'outil VB. Une autre methode par les menus consiste a faire : Affichage / Barres d\'outils / Visual Basic.

    3/ sur la bare d\'outils nouvellement affichée, clique sur l\'icone qui represente un marteau et une clée (Boite a outils contrôles) Cette action va t\'afficher un nouvelle barre d\'outils ou tu vas trouver les objet standard VB.

    4/ Sur cette boite a outils, clique sur le bouton (infobule : Bouton de commande) Une troisième barre d\'outils va se creer mais laisse la de côté pour l\'instant, par contre ta sourie c\'est transformée en une petite croix pour t\'indiquer que tu est en mode d\'incertion d\'objets.

    5/ Sur la grille clique et deplace un peut ta sourie, cela va créer un bouton. Une fois le click relaché, le bouton apparait en mode selection donc avec des petites poignées pour le redimentionner.

    6/ clique deux fois rapidement sur ce nouveau bouton et XL va ouvrir une nouvelle fenetre qui s\'appelle \'Microsoft Visual Basic -classeur1 creation ...\'

    7/ La nouvelle fenetre comprend une page blanche avec un petit bou de code recemblant a cela :

    Private Sub CommandButton1_Click()

    End Sub

    Si tu fais bien gafe tu vera que ce bou de code correspond au debut du listing que je t\'ai renvoyé.

    8/ sur cette page tu dois copier l\'enssemble du listing que je t\'ai renvoyè et le coller par dessus le deux lignes que XL t\'a proposé (le listing remplace ces deux lignes)

    9/ dans le listing, j\'ai mis des signes moins en cascade pour separer les trois function, c\'était par souci de presentation, mais il risques de ne pas fonctionner si tu les laisses donc enlève les lignes comprenants tous ces signes moins. De toute façon l\'éditeur VB doit te metre des lignes pour separer les functions ou sub de façon automatique afin d\'améliorer le lisibilité.

    10/ il ne doit pas y avoir de lignes en rouge une fois enregistré (le rouge indique des erreurs ).

    11/ sauvegarde quelque part

    12/ retourne dans XL, clique sur la barre d\'outil que je t\'ai dis de laisser tranquile en haut (une equerre (désactiver le mode création)) et saisie un nombre en chiffre dans la cellule en haut a gauche (La A1 ou L1C1 celon ta convention)

    13/ clique sur le bouton.

    14 c\'est magic !


    Si ça bloque n\'ésite pas et donne moi les messages d\'erreur pour que je puisse comprendre ou cela bloque :wink:

    PS : j\'espère que tu prendra goût a la programmation avec le forum.

  7. #7
    Je tiens à te remercier énormément. En effet, ca marche.
    Maintenant il me reste plus qu\'à surfer sur ce site pour que j\'arrive enfin à creer une cellule reactive. Mais bon il faut que j\'apprenne un peu par mes propres moyens sans avoir toujours recours à de l\'aide.


    encore merci pour ta gentillesse, je ne sais pas comment te remercier pour ton aide

    :wink: flo

  8. #8
    Membre MP
    Inscrit
    août 2013
    Messages
    1 823
    je ne sais pas comment te remercier pour ton aide
    Repasse nous voir et continu d\'apprendre, cela sera enorme déjà !

    A bientôt florianelle :wink:

  9. #9
    Membre MP
    Inscrit
    août 2013
    Messages
    2
    Bonjour,
    Je cherche comment convertir un nombre quelconque en lettres.
    Ex: 100000 -----> cent mils

  10. #10
    Membre MP
    Inscrit
    août 2013
    Messages
    1 823
    Le code est juste au dessus

Page 1 sur 2 12 DernièreDernière

Informations du sujet

Utilisateur(s) parcourant ce sujet

il y a actuellement 1 utilisateur(s) parcourant ce sujet. (0 membre(s) et 1 visiteur(s))

Règles des messages

  • Vous ne pouvez pas créer de sujets
  • Vous ne pouvez pas répondre aux sujets
  • Vous ne pouvez pas importer de fichiers joints
  • Vous ne pouvez pas éditer vos messages
  •  
  • Les BB codes sont Activés
  • Les Smileys sont Activés
  • Le BB code [IMG] est Activé
  • Le code [VIDEO] est Activé
  • Le code HTML est Désactivé