Convertir un nombre en lettres

Ces articles pourraient également vous intéresser...

68 réponses

  1. Clément V dit :

    Merci pour votre fonction.
    Elle fonctionne très bien et je n’ai pas besoin d’écrire un autre
    C’est super

  2. itooky dit :

    Merci Mille Fois, vous êtes vraiment généreux Mr

  3. Hervé Inisan dit :

    Djamel > Il ne faut pas que le module qui contient le code porte le même nom qu’une fonction VBA. En d’autres termes, si une fonction s’appelle NbEnLettres, il faut appeler le module autrement. Sinon, il peut y avoir conflit. On dirait que c’est ton cas ?

  4. Hervé Inisan dit :

    Prézi > Supprimer ou les 3 lignes ou les passer en commentaires (c’est-à-dire ajouter une apostrophe devant) fait le même effet. C’est l’un ou l’autre (si les lignes sont supprimées, on ne peut de fait plus les commenter).

    Ça ne devrait par contre pas “casser” la fonction, et elle devrait toujours afficher quelque chose.

  5. Prézi dit :

    Bonsoir Hervé!
    J’ai utilisé ton code qui permet de convertir les nombres en lettres; il marche très bien mais seulement, certains montants sont erronés; j’ai essayé de supprimer les trois lignes “buggées” comme tu le recommandes mais, aucune valeur ne s’affiche plus; il reste certainement à commenter lesdites lignes: mais comment faut-il le faire concrètement?
    Merci d’avance.

  6. Djamel dit :

    Bonjour,

    En fait j’ai essayé le code VBA, mais à l’exécution j’ai ce message “erreur de compilation” “variable ou procédure attendue et non un module”.

    Pourvez-vous m’éclairer, en faire je ne suis pas très familier avec VBA.

  7. Hervé Inisan dit :

    JPP65 > Merci également ! :-)

  8. JPP65 dit :

    Extra !
    Merci beaucoup et encore bravo.
    Cordialement,
    JPP

  9. Hervé Inisan dit :

    José > Effectivement, la grammaire française est compliquée à gérer, avec ses variantes et ses exceptions… ;) Merci pour le retour.

  10. José dit :

    Bonjour Monsieur Inisan

    En parcourant le Net je suis tombé sur votre site et votre excellent programme de conversion de nombre en lettres.

    Permettez moi une remarque :
    Vingt et cent ne prennent ‘s’ final que s’ils sont multipliés par un nombre et non suivis par un autre. On écrira donc :
    300 -> Trois cents
    304 -> Trois cent quatre
    1 100 -> Mille cent — ici cent n’est pas multiplié par un nombre
    1 020 000 -> un million vingt mille
    80 -> quatre-vingts
    93 -> quatre-vingt-treize

    Salutations cordiales.

  11. Hervé Inisan dit :

    Joséf LAMA > Oui. En VBA, le séparateur est la virgule, mais dans les couches graphiques (requêtes, formulaires, états), le séparateur est le point-virgule (sur une machine française en tout cas).

    La règle est que dès qu’on passe en VBA ou en SQL, il faut penser anglais. Le reste du temps, il faut raisonner en fonction de son propre pays.

  12. Joséf LAMA dit :

    merci bien à vous, vs m’avez très bien aider,mais
    une remarque dans une requête accès le les paramètres de séparation sont ; au lieu de , j’ais eu sa paras-art

  13. Hervé Inisan dit :

    Dan > Le champ DEDMONT est bien numérique ? Sinon, quel est le séparateur décimal, sur l’ordinateur ?

  14. Dan dit :

    Bonsoir,
    Je suis très intéressé par ce module, mais je ne parviens pas à le mettre en œuvre.
    Voici la formule tapée dans ma requête : Expr1: NbEnLettres([DEDMONT];”euro”;”cent”;2)
    et voici le résultat obtenu : euros
    le montant ne s’affiche pas.
    Je ne comprend pas où j’ai pu commettre une erreur.
    Merci pour vos éclaircissements.
    Cordialement

  15. Hervé Inisan dit :

    christophe-vdw > Pour répondre aux 2 points :

    • Pour afficher des **** en fin de chaîne, une possibilité est de faire en sorte que la formule soit : =NbEnLettres([Montant]) & "*********"
    • Plutôt que de couper le champ en deux, il est mieux : soit d’agrandir verticalement la zone de texte qui contient la formule, soit de régler sa propriété Auto-extensible sur “Oui“. De cette manière, le champ s’agrandit verticalement (et automatiquement) sur l’état, en fonction de son contenu.
  16. christophe-vdw dit :

    bonsoir
    avant tous merci pour votre “clartée”( même un débutant arrive a vous comprendre!!!!)
    ma question:
    je veux imprimer des chèques (créer un état avec en plaçant bien les champs )mais……

    -le nombre ne tien pas toujours sur une ligne
    (il faut “couper”le champ en deux partie!!!)
    -il faut sécuriser l’écrit par des*******************************jusqu’a la fin du champ
    d’avance merci

  17. Hervé Inisan dit :

    philippe-nemo > Welcome back, Philippe ! :)

    Est-ce que le nom du module est bien différent des noms de fonctions ou de procédures donnés dans le code ?

  18. philippe-nemo dit :

    Bonjour Hérvé,
    de nombreuses années sont passées depuis mon premier post, et je suis toujours sur access !
    mon programme doit être régulièrement mis à jour.
    je viens de tester ton code, mais je reçois le message suivant : “erreur de compilation. Variable ou procédure attendue, et non un module.”

  19. Hervé Inisan dit :

    rimie > Est-ce que le nom de tes modules est différent des noms utilisés dans le code VBA ?

  20. rimie dit :

    j’ai le message d’erreur suivant:
    “erreur de compilation:
    variable ou procédure attendu, et non un module”

  21. Hervé Inisan dit :

    hachimoto2891 > Le message était bien enregistré (mais les commentaires sont modérés pour éviter le spam massif).

  22. hachimoto2891 dit :

    j’ai cru que mon premier message n’a pas été posté
    :)

    en tout cas merci énormément

  23. Hervé Inisan dit :

    hachimoto2891 > Merci ! :)

  24. hachimoto2891 dit :

    Vraiment Bravo!!!
    ça marche hyper-ment bien même sur Excel

    Chapeau et merci énormément pour tes efforts

  25. Hervé Inisan dit :

    Tigre > Normalement, un message apparaît (sous le ruban), demandant d’activer la base de données, à l’ouverture de celle-ci.

  26. Tigre dit :

    Microsoft access professionnel 2010 professionnel.
    Je dois aller à quel endroit pour utiliser cette option “expressions non sécurisées”?

  27. Hervé Inisan dit :

    Tigre > De quelle version d’Access s’agit-il ?

    Pour une version récente, est-ce que le code VBA (les “expressions non sécurisées”) sont autorisées à s’exécuter, à l’ouverture de la base ?

  28. Tigre dit :

    NbEnLettr: NbEnLettres([Transaction]!Nombre_b) est utilisé dans une requête.
    Fonctionne seulement si j’exécute le module InitialisationMots manuellement.
    Pourquoi?

  29. Hervé Inisan dit :

    Tigre > Oui, c’est tout à fait possible. Dans le paragraphe “Application pratique” de cet article, la fonction est par exemple utilisée dans une requête.

    La seule chose à faire est de définir le champ calculé dans la requête, l’appel de la fonction NbEnLettres() est automatique. On peut utilise la fonction à tout endroit d’Access qui peut faire appel à des calculs (requêtes, formulaires, états, VBA).

  30. Tigre dit :

    Le programme fonctionne bien seulement si j’ouvre le module et que je l’excécute. Est-ce que l’on peut charger le module automatiquement? (Sans d’abord l’excécuter manuellement dans VBA).

    Merci!

  31. Hervé Inisan dit :

    Isa > Tout le code VBA doit être recopié dans un module standard. En cliquant sur le lien, tu auras plus d’infos. Le VBA crée la fonction NbEnLettres().
    Ensuite effectivement, tu peux utiliser la fonction dans une requête, dans un formulaire, dans un état ou en VBA.
    Pour transformer les montants de dons en lettres, la requête ressemblera à l’exemple que je donne.
    Enfin, on peut imaginer construire un état à partir de cette requête (du coup, l’état récupèrera le montant en toutes lettres aussi).

  32. Isa dit :

    Bonjour,
    Merci pour ce code bien détaillé.
    Je suis en train de créer une base de données sous Access mais je ne vois pas du tout où insérer ce code. Dans une requête comme dans votre exemple avec les films ?
    Je ne sais pas où indiquer le nombre à convertir. (Convertir des montants de dons pour une association afin d’éditer les reçus)
    Merci de votre aide !

  33. Hervé Inisan dit :

    Edouard > Si j’ai suivi :

    • Le code proposé plus haut ne convertit pas les montants. Si tu as 1000 euros, tu n’obtiendras pas 1300 dollars, par exemple.
    • Par contre, si tu as prévu, dans la table Clients sans doute, un champ Devise, et que tu as une table des devises avec les taux de conversion par rapport à l’euro, tu peux effectuer la multiplication du montant en euros par le taux de la devise, puis l’afficher en toutes lettres.
  34. Edouard dit :

    Salut tout monde!
    NB: J’ai plusieurs clients qui demandent à être facturés dans la monnaie en cours dans leur pays (Dollars Us , Euros , Livre Sterling, F CFA …)
    Je voudrais savoir si je pourrais utilisé ce code pour convertir les montant de mes factures de sorte à avoir un bon résultat avec chaque monnaie.
    Exemple: 1500,50 € = Mille cinq cent euros cinquante centimes – 200,50 £ = Deux cent livres cinquante cents etc…
    Je ne saisi pas si je suis clair dans ma demande!
    Merci d’avance.

  35. Hervé Inisan dit :

    Karim > Super :)

  36. Karim dit :

    J’ai utilisé cette solution pour convertir un montant en toutes lettres avec MS ACCESS 2007 Fr. J’ai contourné la syntaxe anglo-saxonne exigée par le module par l’intermédiaire de la fonction Clong(): NbEnLettres(CLong([Total]);”euro”;”centime”)
    C’est impec !
    Merci beaucoup ;)

  37. ralph dit :

    Il est surprenant de voir combien des années après ta prouesse suscite toujours autant d’engouement. Un seul mot ” MERCI “
    En tant que débutant en VBA j’ai râlé un max avec cette conversion qui pourtant est implémentée comme par baguette magique dans un logiciel que je ne citerais pas(sorry pas de pub). Encore Hervé. God Bless.

  38. tickerdu22 dit :

    merci beaucoup pour le code de conversion de chiffre en lettre cela m’a aidé énormément

  39. Hervé Inisan dit :

    André Mansiaux > Les symptômes m’ont l’air normaux, en fait.

    1. Lorsqu’on exécute du code dans la fenêtre Exécution, il faut tout écrire en syntaxe anglo-saxonne. Ça veut dire que le délimiteur de paramètres est bien la virgule, mais que les nombres doivent être écrits sous la forme 123.456, avec un point comme délimiteur (même si on est en France et qu’on utilisera la virgule dans Access). En d’autres termes : Visual Basic Editor raisonne toujours en anglais.
    2. Ça explique pourquoi, en tapant un nombre à la française (avec une virgule), dans VBE, on obtient une erreur : la virgule est interprétée comme délimiteur. Si le nombre est 123,456, VBE interprète 123 comme le premier paramètre (le nombre à traduire), puis 456 comme le second paramètre (la devise). Tout est du coup décalé et la syntaxe est fausse.
    3. De retour à l’interface graphique d’Access (hors VBE et hors SQL), la syntaxe est française. Les nombres peuvent s’écrire avec une virgule, et le séparateur de paramètres devient le point-virgule.

    J’espère que ça peut dépanner…

  40. André Mansiaux dit :

    Bonsoir Hervé Inisan
    Je suis sous Access 2010, XP séparateur décimal dans le panneau de configuration : virgule, système français.
    J’ai fait le test dans la partie “Execution” du module avec le résultat suivant :
    - 1er cas avec un point comme séparateur décimal:
    ?NbEnLettres(123.45,”euro”,”cent”)
    cent vingt-trois euros et quarante-cinq cents
    - 2ème cas avec une virgule comme séparateur décimal:
    ?NbEnLettres(123,45,”euro”,”cent”)
    pas de résultat mais affichage d’un message “Microsoft basic pour applications” indiquant “Erreur d’exécution ’13′:Incompatibilité de type”.

    De plus lorsque j’utilise de module dans une requête, il faut toujours que j’utilise un point comme séparateur et de plus que j’utilise un point virgule à la place de la virgule entre le champ où la valeur est prise (Montant dans mon cas)et les unités “euro” et “cent” : NbEnLettres([Montant];”euro”;”cent”)
    Ceci n’est pas gênant mais curieux

    Merci d’avance pour votre appui (je peux, si cela est plus pratique pour vous, vous envoyer des pages écrans)
    André Mansiaux

  41. Hervé Inisan dit :

    André Mansiaux > Je viens de refaire un test : ça marche correctement sur ma machine (Access 2010, séparateur décimal dans le panneau de configuration : virgule, système français).

    Est-ce que je peux avoir plus de précisions sur le problème dû à la virgule ?

  42. André Mansiaux dit :

    Bonjour,J’ai juste un souci, c’est que la conversion ne marche pas si le nombre a une virgule comme séparateur décimal (pas de pb avec un point, ça marche vraiment très bien). J’ai vraiment besoin d’utiliser une virgule comme séparateur car il s’agit d’éditer des reçus fiscaux pour une association et je dois indiquer le montant en numérique avec séparateur virgule + le même montant en toutes lettres.
    Merci d’avance pour votre appui

  43. Hervé Inisan dit :

    microsophistic > Comme il s’agit d’un autre sujet, le mieux est d’ouvrir une conversation sur le forum Access du site. Ce sera plus simple d’échanger par là-bas… :-)

  44. microsophistic dit :

    Bonjour, j’ai installé ce code et ça marche très bien, merci. Par contre j’ai besoin d’aide pour un code comparable que j’ai trouvé sur le net mais qui renvoie le nombre en caractère arabe. J’avais un problème de reconnaissance des caractères arabes dans mon état qui étaient illisibles, j’ai tout essayé avec les fonctions langue de win7 sans succès! Après un bidouillage car je suis débutant j’ai copié/collé le code dans un module de classe et remis toutes les fonctions langues en français et là l’arabe est lisible dans l’état! Ma question est pourquoi? Est-ce un hasard? Je peux éventuellement vous envoyer une copie de la base essai qui exploite plusieurs codes différents français, italien et arabe donc!
    Merci d’avance de l’aide que vous voudrez bien m’apporter.
    Gérard

  45. otman dit :

    thank you very much

  46. Hervé Inisan dit :

    Andiz > Ça, c’est plus simple : c’est une question de Format, à définir dans les propriétés du champ de table (ou de formulaire, ou d’état). Le format change automatiquement en fonction des paramètres “régionaux”.

  47. Andiz dit :

    Et Comment faire pour que les chiffres apparaissent avec séparateur de milliers. Ex.2431000 s’afficherait ainsi : 2 431 000 ou 2.431.000 ou 2,431,000 ? (en fonction de l’environnement francophone ou anglophone). Merci.

  48. Andiz dit :

    Super, ça marche.Merci.

  49. Hervé Inisan dit :

    Andiz > Voir ma réponse n°8 (une fois les 3 lignes supprimées ou commentées, les valeurs que tu donnes devraient s’afficher correctement). Ouala !

  50. Andiz dit :

    Le Code marche bien à l’exception de quelques cas Ex. 2431000, la fonction donne “deux millions quatre cent trente virgule un mille” au lieu de “deux millions quatre cent trente un mille”, 4071000, quatre millions soixante virgule onze mille ?, 9271200 neuf millions deux cent soixante virgule onze mille deux cents ???

  51. jak dit :

    Merci pour vos excellentes explications claires et précises.

  52. badji demba dit :

    Merci Hervé, A bientôt

  53. Hervé Inisan dit :

    badji demba > XD, content que ça marche !

    Pour apprendre le VBA/Access, je conseille de faire en plusieurs étapes :

    1. Apprendre les fondamentaux du langage (variables, conditions, boucles…) qui sont communs à tous les VBA (pour Word, Excel, Access, etc.).
    2. Apprendre quelques notions de programmation objet (classe, méthode, propriété, événement…).
    3. Apprendre quelques objets d’Access importants (Form, Report avec les commandes, propriétés, méthodes, événements associés).
    4. Et tout le reste après. :-)

    J’ai commencé une initiation aux fondamentaux sur cette page de http://www.self-access.com, ça peut déjà aider. Quelques petites choses sur les formulaires/états ici aussi.

  54. badji demba dit :

    MONSIEUR Hervé Inisan

    Merci mille fois, dés-que j’ai appliqué vos consignes la virgule a disparu.
    Je souhaiterais gardé le contact avec vous.
    Ma particularité est que je suis capable de faire des programmes trés pointus avec ACCES sans écrire une seule ligne de code VBA. Mais je voudrais commencer à l’étudier, quel est le moyen le plus facile de le maitriser?
    A l’école j’avais appris à programmer avec COBOL et je constate qu’il y’a certaines ressemblances avec VB
    Merci Hervé, vous êtes un Grand Monsieur

  55. Hervé Inisan dit :

    badji demba > En supprimant les lignes buggées (voir réponse au message de kacemi), tu obtiendras la bonne valeur. Il ne faut pas non plus que ta valeur comporte d’espace : “141800″ est correct.

  56. badji demba dit :

    Merci pour le tuyau.
    Je l’ai essayé et ça marche excepté le nombre 141 800 qu’il a converti en Cent quarante virgule un mille huit cent.
    Merci pour les éclaircissements

  57. Hervé Inisan dit :

    kacemi > Le bug ne se produit pas lorsque des devises sont fournies, je ne l’avais pas vu passer :-).

    En supprimant (ou commentant) ces 3 lignes en début de listing, ça devrait marcher :

  58. kacemi dit :

    pourquoi 621 s’écrit six cent vingt virgule un
    la même situation pour 321, 351, 121,…..
    COMMENT PEUT ON CORRIGER CE BUG MERCI

  59. Hervé Inisan dit :

    Operateur > Ca marchera dans une zone de texte, mais pas dans une étiquette. Et dans une zone de texte, la formule sera du style :

    =NbEnLettres([Champ à convertir])

    Avec éventuellement les autres paramètres entre parenthèses (séparés par ;).

  60. Operateur dit :

    j’ai essayer dans une Etiquette ensuite dans une Zone de Texte, mais je n’est pas la convertion du Total TTc en lettre. Le net a payer dans mon Etat est en TTC donc Total TTC.

    je ne comprend pas, pourquoi NBreENLettre s’affiche dans l’Etique quant j’execute l’Etat

    Merci

  61. Hervé Inisan dit :

    finetos > Si j’ai compris la question, l’exemple 3 sur la capture d’écran plus haut (Fenêtre Exécution) donnerait la réponse.

  62. finetos dit :

    boujours,
    j’aurais juste une question a l’utilisation du code
    comment parametrer l’unité principal et l’unité associée au decimales pour que euro et centime soit pris en compte
    merci par avance votre code est genial car bien expliqué
    A+

  63. Hervé Inisan dit :

    Operateur > A supposer que le montant est stocké dans un champ appelé [Montant], la formule (sur un état par exemple, et dans une zone de texte) donnerait quelque chose comme :

    ="Arrêté la présente facture à la somme de " & [Montant] & " F CFA (" & NbEnLettres([Montant]; "Franc CFA")  & ")"

  64. Operateur dit :

    SALUT;
    J’ai une facture cliente sur laquelle je voudrais que le montant des achats du client apparait en lettre. le montant convertis en C CFA.

    J4AI ESSAYE AVEC LE CODE INDIQUE CI DESSOUS MAIS RIEN DE CONCRET. J’ai peut mal utulisé le code; mais voila ce je souhatérais obtenir. “Arrêté la présente facture a la somme de 2000 f cfa (deux Milles Francs CFA)”
    je vous remercie pour ce blog.

    • Benoit dit :

      Format de conversion belge
      Bonjour,

      Pouvez-vous m’aider à effectuer les adaptations nécessaires pour le format de chiffre belge
      « Septante » et « nonante ». J’y suis arrivé pour « septante » mais bloc pour « nonante »
      Grand merci pour votre aide

      • Hervé Inisan dit :

        Pas facile effectivement. Je suis un peu pris ces temps-ci, et je n’aurai pas le temps de regarder immédiatement, mais pour plus tard :
        1. Comment écrit-on 71 et 91 ? (septante un, nonante un ?).
        2. Est-ce qu’il y a des tirets comme en France ? (du style : septante-trois ou nonante-quatre)

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">