Convertir un chiffre en lettres

Convertir un chiffre en lettres
Dernière mise à jour le 21/05/2024
Temps de lecture : 3 minutes

Convertir un chiffre en lettres c'est maintenant possible grâce à la fonction LET d'Excel.

Convertir un chiffre en lettres

Pour convertir un nombre en mots, la solution passait toujours par la création d'une macro VBA très complexe. Certains sites, comme celui-ci, vous propose un exemple de code à utiliser mais selon les règles grammaticales des pays, le code devait toujours être adapté ; ce qui n'est pas facile et source d'erreurs.

Maintenant, avec Excel 365 et la nouvelle fonction LET, vous pouvez convertir un nombre en mots. La formule est très complexe et a nécessité beaucoup de temps pour son développement. Mais malgré cela, il y a certains points de la formule qui doivent être analysés avant de pouvoir l'utiliser.

Convertir Nombre en Lettres

Caractéristique de la formule

Avant de recopier la formule complète et de l'appliquer à votre classeur, il est important d'analyser certains points qui pourraient être cause de disfonctionnement.

Principe des matrices dans Excel

Excel 365 est la seule version qui sache interpréter les plages matricielles dynamiques (c'est -à-dire retourner le résultat dans plusieurs cellules). Une matrice de plusieurs valeurs s'écrit toujours entre accolades, mais une matrice peut s'écrire en ligne ou en colonne selon le type de séparateur que vous utilisez. Par exemple, en configuration française,

  • le séparateur pour les colonnes c'est le point ( . )
  • le séparateur pour les lignes c'est le point-virgule ( ; ).
Matrice en configuration France

Mais si votre système est configuré dans un autre pays, il est fort possible que le séparateur en ligne ne soit pas le point mais l'anti-slash (\) ou simplement la virgule (,) comme c'est le cas en configuration US. Cette configuration est liée aux paramètres de votre ordinateur.

Séparateur de décimales

L'une des complexités de l'écriture de cette formule c'est qu'elle est capable d'interpréter les chiffres avec décimales et les chiffres sans. L'astuce réside dans cette partie de la formule.

N; SUBSTITUE(TEXTE(A1; REPT(0;9)&",00" );",";"0")

Sans trop rentrer dans le détail de cette formule, ce qu'il faut constater c'est que nous avons 2 fois le symbole décimale virgule d'écrit.

  • ,00.
  • et le symbole de remplacement de la fonction SUBSTITUE à la fin ",";"0".

Si vous travaillez avec le séparateur de décimales point (.) il vous faudra remplacer ces 2 virgules par un point dans la fonction.

N; SUBSTITUE(TEXTE(A1; REPT(0;9)&".00" );".";"0")

Ecrire Euros/Centimes ou rien

Telle que la formule est écrite, elle va toujours rajouter Euros à la fin d'un nombre et centimes si le nombre comporte des décimales.

Denom; {" million ";" mille ";" Euros ";" Centimes"}

Maintenant, si vous ne souhaitez pas afficher les mots Euros et Centimes, il faut simplement effacer ces mots MAIS EN CONSERVANT les guillemets vides pour respecter le nombre d'occurrences dans la matrice.

Denom; {" million ";" mille ";"";""}

Formule pour convertir un nombre en lettres (France)

Pour combiner les différentes parties dans une seule et même formule, nous devons utiliser la fonction LET.

La formule complète est la suivante :

=LET(
Denom; {" million ";" mille ";" Euro ";" Centimes"};
Nums; {""."Un"."Deux"."Trois"."Quatre"."Cinq"."Six"."Sept"."Huit"."Neuf"};
Teens; {"Dix"."Onze"."Douze"."Treize"."Quatorze"."Quinze"."Seize"."Dix-sept"."Dix-huit"."Dix-neuf"};
Tens; {""."Dix"."Vingt"." Trente"." Quarante"."Cinquante"."Soixante"." Soixante"."Quatre-vingt"."Quatre-vingt"};
grp; {0;1;2;3};
LET(
N; SUBSTITUE( TEXTE( A1; REPT(0;9)&",00" );",";"0");
H; CNUM( STXT( N; 3*grp+1; 1) ); T; CNUM( STXT( N; 3*grp+2; 1) );
U; CNUM( STXT( N; 3*grp+3; 1) );
Htxt; SI( H; SI(H>1; INDEX( Nums; H+1 ) & " cent "; "cent " ); "");
Ttxt; SI( T>1; INDEX( Tens; T+1 ) & SI( U>0; " "; "" ); " " );
Utxt; SI((T+U); SI((T=1)+(T=7)+(T=9); INDEX(Teens;U+1 );INDEX(Nums;U+1)));
SUPPRESPACE(SUBSTITUE(NOMPROPRE(CONCAT( SI( H+T+U; Htxt & Ttxt & Utxt & Denom; "" )));"Un Mille";"Mille"))
))

P.S : 3 Excel MVP et 6 jours de développement pour obtenir ce résultat

Formule pour convertir un nombre en lettres (Belgique et Suisse)

Ces 2 pays n'utilisent pas soixante-dix et quatre-vingt-dix donc la formule doit être adaptée. Par contre, les Suisses n'utilisent pas non plus le quatre-vingt mais huitante ou octante. Il suffit juste de corriger cette information dans la formule suivante dans la ligne Tens.

=LET(
Denom, {" million ";" mille ";" Euro ";" Centimes"},
Nums, {"","Un","Deux","Trois","Quatre","Cinq","Six","Sept","Huit","Neuf"},
Teens, {"Dix","Onze","Douze","Treize","Quatorze","Quinze","Seize","Dix-sept","Dix-huit","Dix-neuf"},
Tens, {"","Dix","Vingt"," Trente"," Quarante","Cinquante","Soixante"," Septante","Quatre-vingt","Nonante"},
grp, {0;1;2;3},
LET(
N, SUBSTITUTE( TEXT( A1, REPT(0,9)&",00" ),",","0"),
H, VALUE( MID( N, 3*grp+1, 1) ), T, VALUE( MID( N, 3*grp+2, 1) ),
U, VALUE( MID( N, 3*grp+3, 1) ),
Htxt, IF( H, IF(H>1, INDEX( Nums, H+1 ) & " cent ", "cent " ), ""),
Ttxt, IF( T>1, INDEX( Tens, T+1 ) & IF( U>0, " ", "" ), " " ),
Utxt, IF((T+U), IF(T=1, INDEX(Teens,U+1 ),INDEX(Nums,U+1))),
TRIM(SUBSTITUTE(PROPER(CONCAT( IF( H+T+U, Htxt & Ttxt & Utxt & Denom, "" ))),"Un Mille","Mille"))
))

Articles liés

56 Comments

  1. axa
    16/02/2024 @ 17:01

    Bonjour,

    Merci pour votre travail.

    Cependant, où faut il saisir la formule et où faut il mettre le nombre que l'on souhaite transformer ?

    Merci

    Reply

    • Frédéric LE GUEN
      17/02/2024 @ 06:20

      Votre chiffre doit être en A1. Après, vous recopiez la formule où vous voulez

      Reply

  2. stefan
    23/11/2023 @ 12:43

    Bravo pour le travail et merci beaucoup pour les commentaires qui m'ont aider à comprendre.

    Reply

  3. Alain MATHIEU
    27/09/2023 @ 09:45

    Bonjour,

    Il y a certains chiffres qui ne sont pas justes, sans que j'ai pu en identifier la raison.
    Par exemple 31300 donne un résultat doublement faux : Trente Mille Trois Cent Faux Euros
    (manque le millier, et ajout de FAUX à la fin ?)
    Mais quel travail bien utile néanmoins, qui nécessite juste une vérification et correction éventuelle pour un ou deux chiffres.

    Reply

  4. BEN MAAMER AHMED
    03/09/2023 @ 18:07

    j'ai copier collé ,,, ne fonctionne pas ???

    =LET(Denom; {" million ";" mille ";" dinars algérien ";" Centimes"};Nums; {""."Un"."Deux"."Trois"."Quatre"."Cinq"."Six"."Sept"."Huit"."Neuf"};Teens; {Dix"."Onze"."Douze"."Treize"."Quatorze"."Quinze"."Seize"."Dix-sept"."Dix-huit"."Dix-neuf"};Tens; {""."Dix"."Vingt"." Trente"." Quarante"."Cinquante"."Soixante"." Soixante"."Quatre-vingt"."Quatre-vingt"};
    grp; {0;1;2;3};LET(N; SUBSTITUE( TEXTE( B12; REPT(0;9)&",00" );",";"0");H; CNUM( STXT( N; 3*grp+1; 1) ); T; CNUM( STXT( N; 3*grp+2; 1) );U; CNUM( STXT( N; 3*grp+3; 1) );Htxt; SI( H; SI(H>1; INDEX( Nums; H+1 ) & " cent "; "cent " ); "");
    Ttxt; SI( T>1; INDEX( Tens; T+1 ) & SI( U>0; " "; "" ); " " );Utxt; SI((T+U); SI((T=1)+(T=7)+(T=9); INDEX(Teens;U+1 );INDEX(Nums;U+1)));SUPPRESPACE(SUBSTITUE(NOMPROPRE(CONCAT( SI( H+T+U; Htxt & Ttxt & Utxt & Denom; "" )));"Un Mille";"Mille"))))

    Reply

    • Frédéric LE GUEN
      04/09/2023 @ 08:21

      Vous avez quelle version d'Excel?

      Reply

      • FANIE
        04/09/2023 @ 16:41

        Bonjour,

        Je vous remercie pour cette formule très utile.

        Je souhaite supprimer les centimes mais lorsque je supprime le terme "Centimes" dans la formule en laissant les guillemets, les lettres correspondant aux centimes apparaissent toujours.
        Pouvez-vous m'aider SVP ?
        Merci par avance

  5. FIONA
    11/06/2023 @ 02:59

    Pour ajouter du texte après la conversion en lettres (Catherine), il faut placer le texte en fin de formule :
    SUPPRESPACE(SUBSTITUE(SUBSTITUE(CONCAT( SI( H+T+U; Htxt & Ttxt & Utxt & Denom; "" ));"un mille";"mille");"un millions";"un million"))
    )) & "actions de catégorie A."

    On peut aussi améliorer le texte avec :
    )) & "action" & Si($A$1>1; "s ";" ") & "de catégorie A."
    La formule est simpliste, j'aurais pu l'intégrer à la fin du premier LET, attention le (Alt+Entrée) n'est pas à saisir, ce sont les touches à taper :

    grp; {0;1;2;3}; (Alt+Entrée)
    Suptext; {" en actions de catégorie A."};

    Puis en modifiant la dernière ligne :

    CONCAT(SUPPRESPACE(SUBSTITUE(SUBSTITUE(CONCAT( SI( H+T+U; Htxt & Ttxt & Utxt & Denom; "" ));"un mille";"mille");"un millions";"un million")) & Suptext)

    Il faut voir chaque ligne du LET comme un choix attribué à une variable nommée, par exemple : "nom-A;{"choix 0; choix 1; choix 2; ...};"
    Puis un peu plus bas, une directive qui peut contenir une condition : "Utxt; Si( ($A$1>1; INDEX(nom-A; 2));"
    Dans cet exemple, à l'exécution de la formule, la variable nommée "Utxt" contiendra "choix 1" du fait de la valeur "2" passée à INDEX.
    C'est ce qui s'exécute dans chaque ligne du second LET.
    A vous de jouer.

    Reply

    • Frédéric LE GUEN
      11/06/2023 @ 03:48

      Merci beaucoup Fiona pour ce travail très appliqué 🙂

      Reply

  6. FIONA
    11/06/2023 @ 01:58

    Je suis arrivé par hasard sur ce post, et j'ai rencontré le même problème dans l'exécution de la formule. En fait, il faut ci-dessous supprimer chaque ligne vide et à la fin de la ligne précédente ajouter Alt+Entrée. Soit une formule de 15 lignes. Le nombre à convertir est placé en A1, la formule en B1 ou ailleurs. Pour modifier A1, allez à la 8 ème ligne (en-dessous du second "LET"), et modifier "$A$1". J'en ai profité pour corriger la dernière ligne en remplaçant "un millions" par "un million". Dernière info, le nombre est limité à 9 chiffres + 2 décimales formaté par le modèle >> REPT(0;9) & ",00". Bon courage :

    =LET(

    Denom; {" millions ";" mille ";" Euros ";" Centimes"};

    Nums; {"";"un";"deux";"trois";"quatre";"cinq";"six";"sept";"huit";"neuf"};

    Teens; {"dix";"onze";"douze";"treize";"quatorze";"quinze";"seize";"dix-sept";"dix-huit";"dix-neuf"};

    Tens; {"";"dix";"vingt";" trente";" quarante";"cinquante";"soixante";" soixante";"quatre-vingt";"quatre-vingt"};

    grp; {0;1;2;3};

    LET(

    N; SUBSTITUE( TEXTE( $A$1; REPT(0;9)&",00" );",";"0");

    H; CNUM( STXT( N; 3*grp+1; 1) ); T; CNUM( STXT( N; 3*grp+2; 1) );

    U; CNUM( STXT( N; 3*grp+3; 1) );

    Htxt; SI( H; SI(H>1; INDEX( Nums; H+1 ) & " cent "; "cent " ); "");

    Ttxt; SI( T>1; INDEX( Tens; T+1 ) & SI( U>0; "-"; "" ); " " );

    Utxt; SI((T+U); SI((T=1)+(T=7)+(T=9); INDEX(Teens;U+1 );INDEX(Nums;U+1));"");

    SUPPRESPACE(SUBSTITUE(SUBSTITUE(CONCAT( SI( H+T+U; Htxt & Ttxt & Utxt & Denom; "" ));"un mille";"mille");"un millions";"un million"))

    ))

    Reply

  7. Catherine
    26/01/2023 @ 20:01

    Bonjour,

    J'ai utilisé la formule suivante afin que mes chiffres s'écrivent en lettre.

    =SI(K9="Achats";LET(
    Denom; {" million ";" mille ";" actions de catégorie A ";" "};
    Nums; {""."un"."deux"."trois"."quatre"."cinq"."six"."sept"."huit"."neuf"};
    Teens; {"dix"."onze"."douze"."treize"."quatorze"."quinze"."seize"."dix-sept"."dix-huit"."dix-neuf"};
    Tens; {""."dix"."vingt"." trente"." quarante"."cinquante"."soixante"." soixante"."quatre-vingt"."quatre-vingt"};
    grp; {0;1;2;3};
    LET(
    N; SUBSTITUE( TEXTE( I9; REPT(0;9)&",00" );",";"0");
    H; CNUM( STXT( N; 3*grp+1; 1) ); T; CNUM( STXT( N; 3*grp+2; 1) );
    U; CNUM( STXT( N; 3*grp+3; 1) );
    Htxt; SI( H; SI(H>1; INDEX( Nums; H+1 ) & " cent "; "cent " ); "");
    Ttxt; SI( T>1; INDEX( Tens; T+1 ) & SI( U>0; " "; "" ); " " );
    Utxt; SI((T+U); SI((T=1)+(T=7)+(T=9); INDEX(Teens;U+1 );INDEX(Nums;U+1)));
    SUPPRESPACE(SUBSTITUE(CONCAT( SI( H+T+U; Htxt & Ttxt & Utxt & Denom; "" ));"un mille";"mille"))
    ));)

    Tout fonctionne, à l'exception d'une cellule. Elle devrait écrire cent actions de catégorie A, mais écrit plutôt cent FAUX actions de catégorie A.

    Pouvez-vous m'aider à résoudre la problématique svp ?

    Merci.

    Reply

    • Catherine
      26/01/2023 @ 20:06

      Si le nombre est négatif, la formule devrait-elle être modifiée?
      Merci encore

      Reply

      • Frédéric LE GUEN
        28/01/2023 @ 14:41

        En principe oui (je n'ai jamais fait le test)

    • Rodolphe Gaillot
      01/09/2023 @ 13:52

      Salut, il faut modifié la ligne Utxt, il manque la condition si U>1 , ce qui donne :
      Utxt; SI(U>1;SI((T+U); SI((T=1)+(T=7)+(T=9); INDEX(Teens;U+1 );INDEX(Nums;U+1)));"");

      Reply

    • ETHAN
      26/04/2024 @ 16:45

      Merci pour cette formule, elle marche.

      Reply

  8. VIRGINIE LOBET
    19/12/2022 @ 14:20

    Bonjour
    cette partie ne fonctionne pas pour moi. comment dois je proceder pour coller ces 2 fonctions au reste??

    "puis de même, enchaîner (conversion de 2000 pour laquelle le mot Euros manque)

    =SI(DROITE(E11;5)="mille";CONCAT(E11;" Euros");E11)

    et enfin (conversion de 2000,20 pour laquelle le mot Euros manque)

    =SI(ESTERREUR(CHERCHE("Euros";E12));CONCAT(GAUCHE(E12;CHERCHE("mille";E12)+4);" Euros et ";STXT(E12;CHERCHE("mille";E12)+6;999));E12)""
    Merci beaucoup

    Reply

    • VIRGINIE LOBET
      30/01/2023 @ 11:27

      Bonjour,
      désolé d'insister mais je suis vraiment bloqué!!
      Comment dois je procéder pour écrire "EUROS" à Mille, deux Mille,trois Mille...

      Merci d'avance de votre réponse

      Reply

  9. Jean Claude COURAU
    30/11/2022 @ 17:23

    Merci beaucoup, excellent et très utile.

    Il faut effectivement faire la petite correction ajout de ;""
    INDEX(Nums;U+1)) ;"");

    D'autres améliorations sont à envisager, par exemple million ou millions si >1000000 ..

    Reply

  10. Tristan Geoffroy
    22/11/2022 @ 12:09

    Bonjour,
    merci pour cette formule qui donne envi car à l'air très intelligente, .., peut-être un trop pour moi, car je n'arrive à la comprendre ni pourquoi elle ne fonctionne pas pour moi. Est-il possible d'avoir une explication plus littérale des étapes ?
    Merci

    Reply

    • Frédéric LE GUEN
      24/11/2022 @ 17:29

      Houla, vous êtes bien l'un des rares à me demander d'expliquer une formule (en général les gens ne s'embarrassent pas avec les détails et copie juste la formule. Mais bon, je n'ai malheureusement pas assez de temps pour écrire un article sur toutes les subtilités de la formule. Quelle est la partie que vous ne comprenez pas ?

      Reply

      • Tristan GEOFFROY
        07/01/2023 @ 17:29

        Bonjour,
        bien, comme elle ne fonctionnait pas chez moi, j'essayais de comprendre pour corriger mon erreur. Mais je comprends très bien que ca demande du temps qu'on n'a pas nécessairement.
        Depuis, j'en ai utilisé une autre, plus force brute et moins élégante.
        Je préciserai mes questions,
        Bonne année

      • Tristan GEOFFROY
        15/01/2023 @ 20:00

        21 donnes vingt un euros au lieu de "vingt et un euros", de même pour 31 41 51 61. ; quand j'aurais compris le code je serais
        le corriger. 😉

      • Frédéric LE GUEN
        16/01/2023 @ 20:19

        Oui, je sais bien que ce n'est pas parfait. Mais je n'ai vraiment pas le temps pour améliorer la fonction.

  11. JP
    14/11/2022 @ 20:59

    c'est un bon début mais c'est bourré de fautes, fautes que l'on peut corriger avec une série de remplacements

    après avoir enlevé les majuscules à la formule au dessus cela donne :

    =LET(
    Denom; {" million ";" mille ";" Euros ";" centimes"};
    Nums; {""."un"."deux"."trois"."quatre"."cinq"."six"."sept"."huit"."neuf"};
    Teens; {"dix"."onze"."douze"."treize"."quatorze"."quinze"."seize"."dix-sept"."dix-huit"."dix-neuf"};
    Tens; {""."dix"."vingt"." trente"." quarante"."cinquante"."soixante"." soixante"."quatre-vingt"."quatre-vingt"};
    grp; {0;1;2;3};
    LET(
    N; SUBSTITUE( TEXTE( F9; REPT(0;9)&",00" );",";"0");
    H; CNUM( STXT( N; 3*grp+1; 1) ); T; CNUM( STXT( N; 3*grp+2; 1) );
    U; CNUM( STXT( N; 3*grp+3; 1) );
    Htxt; SI( H; SI(H>1; INDEX( Nums; H+1 ) & " cent "; "cent " ); "");
    Ttxt; SI( T>1; INDEX( Tens; T+1 ) & SI( U>0; " "; "" ); " " );
    Utxt; SI((T+U); SI((T=1)+(T=7)+(T=9); INDEX(Teens;U+1 );INDEX(Nums;U+1)));
    SUPPRESPACE(SUBSTITUE(CONCAT( SI( H+T+U; Htxt & Ttxt & Utxt & Denom; "" ));"un mille";"mille"))
    ))

    (remplacer F9 par la cellule contenant le chiffre)

    effectuer les rempalcements :

    =SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(E9;" FAUX";"s");"quatre-vingt Euro";"quatre-vingts Euro");"quatre-vingt Centimes";"quatre-vingts Centimes");"vingt un";"vingt-et-un");" ";"-");"-Euros";" Euros");"Euros-";"Euros et ");"-centimes";" centimes")

    (remplacer E9 par la cellule contenant le 1er résultat)

    puis de même, enchaîner (conversion de 2000 pour laquelle le mot Euros manque)

    =SI(DROITE(E11;5)="mille";CONCAT(E11;" Euros");E11)

    et enfin (conversion de 2000,20 pour laquelle le mot Euros manque)

    =SI(ESTERREUR(CHERCHE("Euros";E12));CONCAT(GAUCHE(E12;CHERCHE("mille";E12)+4);" Euros et ";STXT(E12;CHERCHE("mille";E12)+6;999));E12)

    Reply

    • Frédéric LE GUEN
      18/11/2022 @ 14:57

      Merci beaucoup pour ce travail et l'effort consacré

      Reply

    • VIRGINIE LOBET
      19/12/2022 @ 14:59

      Bonjour
      pour ma part cette partie de la formule ne fonctionne pas :

      "puis de même, enchaîner (conversion de 2000 pour laquelle le mot Euros manque)

      =SI(DROITE(E11;5)="mille";CONCAT(E11;" Euros");E11)

      et enfin (conversion de 2000,20 pour laquelle le mot Euros manque)

      =SI(ESTERREUR(CHERCHE("Euros";E12));CONCAT(GAUCHE(E12;CHERCHE("mille";E12)+4);" Euros et ";STXT(E12;CHERCHE("mille";E12)+6;999));E12)

      Comment dois je procéder? merci de votre réponse

      Reply

    • VIRGINIE LOBET
      30/01/2023 @ 12:04

      Bonjour
      cette partie ne fonctionne pas pour moi. comment dois je proceder pour coller ces 2 fonctions au reste??

      "puis de même, enchaîner (conversion de 2000 pour laquelle le mot Euros manque)

      =SI(DROITE(E11;5)="mille";CONCAT(E11;" Euros");E11)

      et enfin (conversion de 2000,20 pour laquelle le mot Euros manque)

      =SI(ESTERREUR(CHERCHE("Euros";E12));CONCAT(GAUCHE(E12;CHERCHE("mille";E12)+4);" Euros et ";STXT(E12;CHERCHE("mille";E12)+6;999));E12)""

      Je suis vraiment bloquée!

      Merci beaucoup

      Reply

  12. Pierrick
    17/05/2022 @ 14:52

    Merci pour ce partage.
    Est-ce quelqu'un aurait fait les adaptations pour respecter les règles d'accord des nombres en français ?

    Reply

  13. FUCHY Pierre
    29/03/2022 @ 14:08

    Bonjour!
    Assez nul et vieux, j'ai Excel 365. J'ai tout bêtement copié la formule France et collé dans B1, après avoir mis un nombre dans A1. Le miracle ne s'est pas produit.
    La formule s'est collée en 15 cellules de B1 à B15, et pas de message d'erreur.
    J'ai tenté de passer par word pour tout coller dans la même cellule: toujours pas bon.
    Problème d'espaces, ou autre chose tellement évidente que vous n'en parlez pas?
    Ou bien quoi, je n'ai pas le niveau?
    Si vous pouvez me répondre, merci d'avance.
    Pierre

    Reply

  14. SB
    06/11/2021 @ 08:35

    Hello,
    génialissime !
    Mais... si je mets 10 000,05 € ou 10 000, j'ai pas le "Euro" et d'ailleurs ça devrait être "Euros" avec un s...
    Bravo,
    SB

    Reply

    • Frédéric LE GUEN
      07/11/2021 @ 15:06

      Oui, exact, c'est à cause des 3 valeurs des unités qui sont à 0 donc 0 * 'euro' ne renvoie rien.

      Reply

      • hamidi
        01/12/2021 @ 20:41

        Bonjour,

        Un grand merci pour ce qui vous faites
        juste pour 100 000 ça donne "Cent Faux Mille" au lieu de Cent Mille
        Merci.

      • Frédéric LE GUEN
        05/12/2021 @ 17:05

        Oui, c'est le seul bug (mais vous pouvez le corriger à la main)

  15. Véro
    05/11/2021 @ 19:59

    WOW ! Géniale !! Merci ! NbLettre fonctionne vraiment difficilement, là c'est top !

    Reply

  16. nathalie
    22/10/2021 @ 12:34

    J'ai eu aussi un soucis avec 3grp qu'il fallait écrire 3*grp, après cela ça marche nickel....que de temps gagné.
    Merci beaucoup.

    Reply

    • Frédéric LE GUEN
      23/10/2021 @ 16:16

      Mille merci pour avoir relevé la coquille dans l'article. C'est corrigé

      Reply

  17. Sandra
    02/07/2021 @ 08:36

    Bonjour,

    Merci pour cette formule vraiment super et pour les commentaires qui aident bien!
    J'ai une petite question tenant du format... J'aimerai que le nombre écrit en toute lettre ne comporte que des minuscules, j'ai essayé de simplement remplacer les majuscules par des minuscules dans la formule mais ça n'a rien changé...

    Il y a-t-il une manip supplémentaire à effectuer ?

    En vous remerciant par avance

    Reply

    • Frédéric LE GUEN
      02/07/2021 @ 09:08

      Il faut retirer l'instruction NOMPROPRE. C'est elle qui écrit chaque première lettre en majuscule

      Reply

  18. aleya
    02/04/2021 @ 12:17

    bonjour, je suis un novice en excel, j'ai pas réussi à utiliser la formule, j'ai coller dans une cellule mais j'ai pas compris comment introduire la cellule avec le chiffre

    Reply

    • Maxime Caruel
      06/04/2021 @ 07:51

      A la 10eme ligne dans la formule, tu as A1 que tu dois remplacer par ta cellule qui contient de valeur en chiffres. Novice aussi j'ai réussi. Merci pour le partage de cette formule

      Reply

      • NGUYEN
        07/04/2021 @ 16:09

        Bonjour,

        Moi c'est pareil que ALEYA. J'ai aussi remplacé la cellule qui contient de valeur en chiffres mais c'est toujours #NOM?

        Savez - vous pourquoi ?

        En vous remerciant par avance,

      • Frédéric LE GUEN
        07/04/2021 @ 16:12

        Votre version d'Excel ne connait pas la fonction LET. Il faut Excel 365

      • NGUYEN
        09/04/2021 @ 09:28

        Effectivement, j'ai Excel 365 mais peut - être la version n'est pas à jour.
        Et puis j'ai changé l'ordinateur et ça marche bien.

        Par ailleurs, quand c'est 1000; 4000; ... il n'affiche pas Euros, seulement Mille, Quatre mille. Comment on peut ajouter quand il s'agit le chiffre x Mille ?

        Je vous remercie beaucoup pour ce beau travail.

        Bien à vous,

  19. Nicolas Georges
    27/02/2021 @ 11:44

    Merci pour ce partage !

    J'ai du lire tout l'article pour trouver que . devait s'écrire \ dans ma configuration 😉
    J'ai eu un soucis avec 3grp qu'il fallait écrire 3*grp.
    Sinon, j'ai aussi un soucis avec Utxt : je dois ajouter un ;"") à la fin du premier IF sinon j'obtiens par exemple "Dix Mille Cent Faux Euros", moi je veux des vrais euros :-p

    Nicolas.

    PS: la formule FR finale avec ma version d'Excel 365 (version 2101 build 13628.20274) :
    =LET(
    Denom; {" million ";" mille ";" Euro ";" Centimes"};
    Nums; {""\"Un"\"Deux"\"Trois"\"Quatre"\"Cinq"\"Six"\"Sept"\"Huit"\"Neuf"};
    Teens; {"Dix"\"Onze"\"Douze"\"Treize"\"Quatorze"\"Quinze"\"Seize"\"Dix-sept"\"Dix-huit"\"Dix-neuf"};
    Tens; {""\"Dix"\"Vingt"\" Trente"\" Quarante"\"Cinquante"\"Soixante"\" Soixante"\"Quatre-vingt"\"Quatre-vingt"};
    grp; {0;1;2;3};
    LET(
    N; SUBSTITUE( TEXTE( $I$7; REPT(0;9)&",00" );",";"0");
    H; CNUM( STXT( N; 3*grp+1; 1) ); T; CNUM( STXT( N; 3*grp+2; 1) );
    U; CNUM( STXT( N; 3*grp+3; 1) );
    Htxt; SI( H; SI(H>1; INDEX( Nums; H+1 ) & " cent "; "cent " ); "");
    Ttxt; SI( T>1; INDEX( Tens; T+1 ) & SI( U>0; "-"; "" ); " " );
    Utxt; SI((T+U); SI((T=1)+(T=7)+(T=9); INDEX(Teens;U+1 );INDEX(Nums;U+1));"");
    SUPPRESPACE(SUBSTITUE(NOMPROPRE(CONCAT( SI( H+T+U; Htxt & Ttxt & Utxt & Denom; "" )));"Un Mille";"Mille"))
    ))

    Reply

    • Frédéric LE GUEN
      27/02/2021 @ 17:46

      Il faut tout lire 😉 Il y a toujours une raison derrière une formule.
      Ok pour le 3*grp et merci

      Reply

    • Rémy
      10/05/2021 @ 19:34

      Bonjour et merci pour la formule "compatible" avec ma version. Mais petit souci pour moi, les sommes s'affichent en centimes
      Par exemple
      70 = soixantedix centimes
      700 = 7 euro
      Je cherche mais je ne trouve pas où est l'erreur
      vous avez une idée ?

      Reply

    • FredB
      27/08/2021 @ 14:47

      Merci pour tous ces partages, lorsque je mets 101000 j'obtiens le résultat : Cent Mille. Je n'arrive pas à voir ce qui pêche dans la formule.
      Merci d'avance pour vos retours.

      Reply

      • Frédéric LE GUEN
        05/09/2021 @ 10:24

        Aucune idée. La formule n'a pas été développée au-delà de 99 999

      • Sébastien
        20/12/2021 @ 18:16

        Bonjour,
        le probleme ce pose à partir de l'affichage de 21 000, 31 000 etc...

      • Sébastien
        20/12/2021 @ 19:16

        Mon bidouillage pour que cela fonctionne avec les milliards de Franc CFA ... et réglant le probléme de 21 000, 31 000 etc ...

        =LET(
        Denom;{" milliard ";" million ";" mille ";" ";" "};
        Nums;{""."Un"."Deux"."Trois"."Quatre"."Cinq"."Six"."Sept"."Huit"."Neuf"};
        Teens;{"Dix"."Onze"."Douze"."Treize"."Quatorze"."Quinze"."Seize"."Dix-sept"."Dix-huit"."Dix-neuf"};
        Tens;{""."Dix"."Vingt"." Trente"." Quarante"."Cinquante"."Soixante"." Soixante"."Quatre-vingt "."Quatre-vingt "};
        grp;{0;1;2;3;4};
        LET(
        N;SUBSTITUE(TEXTE(ARRONDI(F38;0);REPT(0;12)&",00");",";"0");
        H;CNUM(STXT(N;3*grp+1;1));
        T;CNUM(STXT(N;3*grp+2;1));
        U;CNUM(STXT(N;3*grp+3;1));
        Htxt;SI(H;SI(H>1;INDEX(Nums;H+1)&" cent ";"cent ");"");
        Ttxt;SI(T>1;INDEX(Tens;T+1)&SI(U>0;" ";"");" ");
        Utxt;SI((T+U);SI((T=1)+(T=7)+(T=9);INDEX(Teens;U+1);INDEX(Nums;U+1));" ");
        SUPPRESPACE(SI(C13=1000;SUBSTITUE(NOMPROPRE(CONCAT(SI(H+T+U;Htxt&Ttxt&Utxt&Denom;"")));"Un Mille";" Mille");NOMPROPRE(CONCAT(SI(H+T+U;Htxt&Ttxt&Utxt&Denom;""))))))&" Franc CFA")

  20. Ephram
    25/01/2021 @ 15:41

    Par contre pour modifier selon le pays, par exemple, la Suisse il faut juste remplacer "quatrevingt" par huitante et quatre vingt dix par nonante ou il faut modifier d'autres point de la formule ?

    Reply

    • Frédéric LE GUEN
      25/01/2021 @ 15:51

      Oui, oui, oui, .... un peu de patience.
      Je sais que je dois le faire mais j'ai mille tâches à réaliser avant.
      Ce n'est pas simple d'être le dernier MVP en langue Française. J'ai bcp de sujet à couvrir.
      Mais ça sera fait.

      Reply

      • Ephram
        26/01/2021 @ 15:49

        Ok merci de l'article et des conseils super pratiques.

    • Frédéric LE GUEN
      25/01/2021 @ 22:35

      Mais pour soixante-dix, c'est bien septante, comme en Belgique

      Reply

  21. Charles
    21/01/2021 @ 10:08

    Chapeau ! Pourtant, à la lecture de la formule définitive, j'ai tout de suite vu... que c'est un véritable casse-tête !
    Par contre, j'adore l'idée de le faire avec des formules SANS MACRO !
    Bravo !

    Reply

    • Frédéric LE GUEN
      21/01/2021 @ 15:14

      C'est sur, il y a eu du travail. C'est pour cela que j'ai partager la fonction car c'est impossible de créer ce genre de formule de toute pièce. Et les macros, si on peut les éviter, c'est bien mieux

      Reply

Laisser un commentaire

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

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

MVP_logo_2017

Convertir un chiffre en lettres

Reading time: 3 minutes
Dernière mise à jour le 21/05/2024

Convertir un chiffre en lettres c'est maintenant possible grâce à la fonction LET d'Excel.

Convertir un chiffre en lettres

Pour convertir un nombre en mots, la solution passait toujours par la création d'une macro VBA très complexe. Certains sites, comme celui-ci, vous propose un exemple de code à utiliser mais selon les règles grammaticales des pays, le code devait toujours être adapté ; ce qui n'est pas facile et source d'erreurs.

Maintenant, avec Excel 365 et la nouvelle fonction LET, vous pouvez convertir un nombre en mots. La formule est très complexe et a nécessité beaucoup de temps pour son développement. Mais malgré cela, il y a certains points de la formule qui doivent être analysés avant de pouvoir l'utiliser.

Convertir Nombre en Lettres

Caractéristique de la formule

Avant de recopier la formule complète et de l'appliquer à votre classeur, il est important d'analyser certains points qui pourraient être cause de disfonctionnement.

Principe des matrices dans Excel

Excel 365 est la seule version qui sache interpréter les plages matricielles dynamiques (c'est -à-dire retourner le résultat dans plusieurs cellules). Une matrice de plusieurs valeurs s'écrit toujours entre accolades, mais une matrice peut s'écrire en ligne ou en colonne selon le type de séparateur que vous utilisez. Par exemple, en configuration française,

  • le séparateur pour les colonnes c'est le point ( . )
  • le séparateur pour les lignes c'est le point-virgule ( ; ).
Matrice en configuration France

Mais si votre système est configuré dans un autre pays, il est fort possible que le séparateur en ligne ne soit pas le point mais l'anti-slash (\) ou simplement la virgule (,) comme c'est le cas en configuration US. Cette configuration est liée aux paramètres de votre ordinateur.

Séparateur de décimales

L'une des complexités de l'écriture de cette formule c'est qu'elle est capable d'interpréter les chiffres avec décimales et les chiffres sans. L'astuce réside dans cette partie de la formule.

N; SUBSTITUE(TEXTE(A1; REPT(0;9)&",00" );",";"0")

Sans trop rentrer dans le détail de cette formule, ce qu'il faut constater c'est que nous avons 2 fois le symbole décimale virgule d'écrit.

  • ,00.
  • et le symbole de remplacement de la fonction SUBSTITUE à la fin ",";"0".

Si vous travaillez avec le séparateur de décimales point (.) il vous faudra remplacer ces 2 virgules par un point dans la fonction.

N; SUBSTITUE(TEXTE(A1; REPT(0;9)&".00" );".";"0")

Ecrire Euros/Centimes ou rien

Telle que la formule est écrite, elle va toujours rajouter Euros à la fin d'un nombre et centimes si le nombre comporte des décimales.

Denom; {" million ";" mille ";" Euros ";" Centimes"}

Maintenant, si vous ne souhaitez pas afficher les mots Euros et Centimes, il faut simplement effacer ces mots MAIS EN CONSERVANT les guillemets vides pour respecter le nombre d'occurrences dans la matrice.

Denom; {" million ";" mille ";"";""}

Formule pour convertir un nombre en lettres (France)

Pour combiner les différentes parties dans une seule et même formule, nous devons utiliser la fonction LET.

La formule complète est la suivante :

=LET(
Denom; {" million ";" mille ";" Euro ";" Centimes"};
Nums; {""."Un"."Deux"."Trois"."Quatre"."Cinq"."Six"."Sept"."Huit"."Neuf"};
Teens; {"Dix"."Onze"."Douze"."Treize"."Quatorze"."Quinze"."Seize"."Dix-sept"."Dix-huit"."Dix-neuf"};
Tens; {""."Dix"."Vingt"." Trente"." Quarante"."Cinquante"."Soixante"." Soixante"."Quatre-vingt"."Quatre-vingt"};
grp; {0;1;2;3};
LET(
N; SUBSTITUE( TEXTE( A1; REPT(0;9)&",00" );",";"0");
H; CNUM( STXT( N; 3*grp+1; 1) ); T; CNUM( STXT( N; 3*grp+2; 1) );
U; CNUM( STXT( N; 3*grp+3; 1) );
Htxt; SI( H; SI(H>1; INDEX( Nums; H+1 ) & " cent "; "cent " ); "");
Ttxt; SI( T>1; INDEX( Tens; T+1 ) & SI( U>0; " "; "" ); " " );
Utxt; SI((T+U); SI((T=1)+(T=7)+(T=9); INDEX(Teens;U+1 );INDEX(Nums;U+1)));
SUPPRESPACE(SUBSTITUE(NOMPROPRE(CONCAT( SI( H+T+U; Htxt & Ttxt & Utxt & Denom; "" )));"Un Mille";"Mille"))
))

P.S : 3 Excel MVP et 6 jours de développement pour obtenir ce résultat

Formule pour convertir un nombre en lettres (Belgique et Suisse)

Ces 2 pays n'utilisent pas soixante-dix et quatre-vingt-dix donc la formule doit être adaptée. Par contre, les Suisses n'utilisent pas non plus le quatre-vingt mais huitante ou octante. Il suffit juste de corriger cette information dans la formule suivante dans la ligne Tens.

=LET(
Denom, {" million ";" mille ";" Euro ";" Centimes"},
Nums, {"","Un","Deux","Trois","Quatre","Cinq","Six","Sept","Huit","Neuf"},
Teens, {"Dix","Onze","Douze","Treize","Quatorze","Quinze","Seize","Dix-sept","Dix-huit","Dix-neuf"},
Tens, {"","Dix","Vingt"," Trente"," Quarante","Cinquante","Soixante"," Septante","Quatre-vingt","Nonante"},
grp, {0;1;2;3},
LET(
N, SUBSTITUTE( TEXT( A1, REPT(0,9)&",00" ),",","0"),
H, VALUE( MID( N, 3*grp+1, 1) ), T, VALUE( MID( N, 3*grp+2, 1) ),
U, VALUE( MID( N, 3*grp+3, 1) ),
Htxt, IF( H, IF(H>1, INDEX( Nums, H+1 ) & " cent ", "cent " ), ""),
Ttxt, IF( T>1, INDEX( Tens, T+1 ) & IF( U>0, " ", "" ), " " ),
Utxt, IF((T+U), IF(T=1, INDEX(Teens,U+1 ),INDEX(Nums,U+1))),
TRIM(SUBSTITUTE(PROPER(CONCAT( IF( H+T+U, Htxt & Ttxt & Utxt & Denom, "" ))),"Un Mille","Mille"))
))

Articles liés

56 Comments

  1. axa
    16/02/2024 @ 17:01

    Bonjour,

    Merci pour votre travail.

    Cependant, où faut il saisir la formule et où faut il mettre le nombre que l'on souhaite transformer ?

    Merci

    Reply

    • Frédéric LE GUEN
      17/02/2024 @ 06:20

      Votre chiffre doit être en A1. Après, vous recopiez la formule où vous voulez

      Reply

  2. stefan
    23/11/2023 @ 12:43

    Bravo pour le travail et merci beaucoup pour les commentaires qui m'ont aider à comprendre.

    Reply

  3. Alain MATHIEU
    27/09/2023 @ 09:45

    Bonjour,

    Il y a certains chiffres qui ne sont pas justes, sans que j'ai pu en identifier la raison.
    Par exemple 31300 donne un résultat doublement faux : Trente Mille Trois Cent Faux Euros
    (manque le millier, et ajout de FAUX à la fin ?)
    Mais quel travail bien utile néanmoins, qui nécessite juste une vérification et correction éventuelle pour un ou deux chiffres.

    Reply

  4. BEN MAAMER AHMED
    03/09/2023 @ 18:07

    j'ai copier collé ,,, ne fonctionne pas ???

    =LET(Denom; {" million ";" mille ";" dinars algérien ";" Centimes"};Nums; {""."Un"."Deux"."Trois"."Quatre"."Cinq"."Six"."Sept"."Huit"."Neuf"};Teens; {Dix"."Onze"."Douze"."Treize"."Quatorze"."Quinze"."Seize"."Dix-sept"."Dix-huit"."Dix-neuf"};Tens; {""."Dix"."Vingt"." Trente"." Quarante"."Cinquante"."Soixante"." Soixante"."Quatre-vingt"."Quatre-vingt"};
    grp; {0;1;2;3};LET(N; SUBSTITUE( TEXTE( B12; REPT(0;9)&",00" );",";"0");H; CNUM( STXT( N; 3*grp+1; 1) ); T; CNUM( STXT( N; 3*grp+2; 1) );U; CNUM( STXT( N; 3*grp+3; 1) );Htxt; SI( H; SI(H>1; INDEX( Nums; H+1 ) & " cent "; "cent " ); "");
    Ttxt; SI( T>1; INDEX( Tens; T+1 ) & SI( U>0; " "; "" ); " " );Utxt; SI((T+U); SI((T=1)+(T=7)+(T=9); INDEX(Teens;U+1 );INDEX(Nums;U+1)));SUPPRESPACE(SUBSTITUE(NOMPROPRE(CONCAT( SI( H+T+U; Htxt & Ttxt & Utxt & Denom; "" )));"Un Mille";"Mille"))))

    Reply

    • Frédéric LE GUEN
      04/09/2023 @ 08:21

      Vous avez quelle version d'Excel?

      Reply

      • FANIE
        04/09/2023 @ 16:41

        Bonjour,

        Je vous remercie pour cette formule très utile.

        Je souhaite supprimer les centimes mais lorsque je supprime le terme "Centimes" dans la formule en laissant les guillemets, les lettres correspondant aux centimes apparaissent toujours.
        Pouvez-vous m'aider SVP ?
        Merci par avance

  5. FIONA
    11/06/2023 @ 02:59

    Pour ajouter du texte après la conversion en lettres (Catherine), il faut placer le texte en fin de formule :
    SUPPRESPACE(SUBSTITUE(SUBSTITUE(CONCAT( SI( H+T+U; Htxt & Ttxt & Utxt & Denom; "" ));"un mille";"mille");"un millions";"un million"))
    )) & "actions de catégorie A."

    On peut aussi améliorer le texte avec :
    )) & "action" & Si($A$1>1; "s ";" ") & "de catégorie A."
    La formule est simpliste, j'aurais pu l'intégrer à la fin du premier LET, attention le (Alt+Entrée) n'est pas à saisir, ce sont les touches à taper :

    grp; {0;1;2;3}; (Alt+Entrée)
    Suptext; {" en actions de catégorie A."};

    Puis en modifiant la dernière ligne :

    CONCAT(SUPPRESPACE(SUBSTITUE(SUBSTITUE(CONCAT( SI( H+T+U; Htxt & Ttxt & Utxt & Denom; "" ));"un mille";"mille");"un millions";"un million")) & Suptext)

    Il faut voir chaque ligne du LET comme un choix attribué à une variable nommée, par exemple : "nom-A;{"choix 0; choix 1; choix 2; ...};"
    Puis un peu plus bas, une directive qui peut contenir une condition : "Utxt; Si( ($A$1>1; INDEX(nom-A; 2));"
    Dans cet exemple, à l'exécution de la formule, la variable nommée "Utxt" contiendra "choix 1" du fait de la valeur "2" passée à INDEX.
    C'est ce qui s'exécute dans chaque ligne du second LET.
    A vous de jouer.

    Reply

    • Frédéric LE GUEN
      11/06/2023 @ 03:48

      Merci beaucoup Fiona pour ce travail très appliqué 🙂

      Reply

  6. FIONA
    11/06/2023 @ 01:58

    Je suis arrivé par hasard sur ce post, et j'ai rencontré le même problème dans l'exécution de la formule. En fait, il faut ci-dessous supprimer chaque ligne vide et à la fin de la ligne précédente ajouter Alt+Entrée. Soit une formule de 15 lignes. Le nombre à convertir est placé en A1, la formule en B1 ou ailleurs. Pour modifier A1, allez à la 8 ème ligne (en-dessous du second "LET"), et modifier "$A$1". J'en ai profité pour corriger la dernière ligne en remplaçant "un millions" par "un million". Dernière info, le nombre est limité à 9 chiffres + 2 décimales formaté par le modèle >> REPT(0;9) & ",00". Bon courage :

    =LET(

    Denom; {" millions ";" mille ";" Euros ";" Centimes"};

    Nums; {"";"un";"deux";"trois";"quatre";"cinq";"six";"sept";"huit";"neuf"};

    Teens; {"dix";"onze";"douze";"treize";"quatorze";"quinze";"seize";"dix-sept";"dix-huit";"dix-neuf"};

    Tens; {"";"dix";"vingt";" trente";" quarante";"cinquante";"soixante";" soixante";"quatre-vingt";"quatre-vingt"};

    grp; {0;1;2;3};

    LET(

    N; SUBSTITUE( TEXTE( $A$1; REPT(0;9)&",00" );",";"0");

    H; CNUM( STXT( N; 3*grp+1; 1) ); T; CNUM( STXT( N; 3*grp+2; 1) );

    U; CNUM( STXT( N; 3*grp+3; 1) );

    Htxt; SI( H; SI(H>1; INDEX( Nums; H+1 ) & " cent "; "cent " ); "");

    Ttxt; SI( T>1; INDEX( Tens; T+1 ) & SI( U>0; "-"; "" ); " " );

    Utxt; SI((T+U); SI((T=1)+(T=7)+(T=9); INDEX(Teens;U+1 );INDEX(Nums;U+1));"");

    SUPPRESPACE(SUBSTITUE(SUBSTITUE(CONCAT( SI( H+T+U; Htxt & Ttxt & Utxt & Denom; "" ));"un mille";"mille");"un millions";"un million"))

    ))

    Reply

  7. Catherine
    26/01/2023 @ 20:01

    Bonjour,

    J'ai utilisé la formule suivante afin que mes chiffres s'écrivent en lettre.

    =SI(K9="Achats";LET(
    Denom; {" million ";" mille ";" actions de catégorie A ";" "};
    Nums; {""."un"."deux"."trois"."quatre"."cinq"."six"."sept"."huit"."neuf"};
    Teens; {"dix"."onze"."douze"."treize"."quatorze"."quinze"."seize"."dix-sept"."dix-huit"."dix-neuf"};
    Tens; {""."dix"."vingt"." trente"." quarante"."cinquante"."soixante"." soixante"."quatre-vingt"."quatre-vingt"};
    grp; {0;1;2;3};
    LET(
    N; SUBSTITUE( TEXTE( I9; REPT(0;9)&",00" );",";"0");
    H; CNUM( STXT( N; 3*grp+1; 1) ); T; CNUM( STXT( N; 3*grp+2; 1) );
    U; CNUM( STXT( N; 3*grp+3; 1) );
    Htxt; SI( H; SI(H>1; INDEX( Nums; H+1 ) & " cent "; "cent " ); "");
    Ttxt; SI( T>1; INDEX( Tens; T+1 ) & SI( U>0; " "; "" ); " " );
    Utxt; SI((T+U); SI((T=1)+(T=7)+(T=9); INDEX(Teens;U+1 );INDEX(Nums;U+1)));
    SUPPRESPACE(SUBSTITUE(CONCAT( SI( H+T+U; Htxt & Ttxt & Utxt & Denom; "" ));"un mille";"mille"))
    ));)

    Tout fonctionne, à l'exception d'une cellule. Elle devrait écrire cent actions de catégorie A, mais écrit plutôt cent FAUX actions de catégorie A.

    Pouvez-vous m'aider à résoudre la problématique svp ?

    Merci.

    Reply

    • Catherine
      26/01/2023 @ 20:06

      Si le nombre est négatif, la formule devrait-elle être modifiée?
      Merci encore

      Reply

      • Frédéric LE GUEN
        28/01/2023 @ 14:41

        En principe oui (je n'ai jamais fait le test)

    • Rodolphe Gaillot
      01/09/2023 @ 13:52

      Salut, il faut modifié la ligne Utxt, il manque la condition si U>1 , ce qui donne :
      Utxt; SI(U>1;SI((T+U); SI((T=1)+(T=7)+(T=9); INDEX(Teens;U+1 );INDEX(Nums;U+1)));"");

      Reply

    • ETHAN
      26/04/2024 @ 16:45

      Merci pour cette formule, elle marche.

      Reply

  8. VIRGINIE LOBET
    19/12/2022 @ 14:20

    Bonjour
    cette partie ne fonctionne pas pour moi. comment dois je proceder pour coller ces 2 fonctions au reste??

    "puis de même, enchaîner (conversion de 2000 pour laquelle le mot Euros manque)

    =SI(DROITE(E11;5)="mille";CONCAT(E11;" Euros");E11)

    et enfin (conversion de 2000,20 pour laquelle le mot Euros manque)

    =SI(ESTERREUR(CHERCHE("Euros";E12));CONCAT(GAUCHE(E12;CHERCHE("mille";E12)+4);" Euros et ";STXT(E12;CHERCHE("mille";E12)+6;999));E12)""
    Merci beaucoup

    Reply

    • VIRGINIE LOBET
      30/01/2023 @ 11:27

      Bonjour,
      désolé d'insister mais je suis vraiment bloqué!!
      Comment dois je procéder pour écrire "EUROS" à Mille, deux Mille,trois Mille...

      Merci d'avance de votre réponse

      Reply

  9. Jean Claude COURAU
    30/11/2022 @ 17:23

    Merci beaucoup, excellent et très utile.

    Il faut effectivement faire la petite correction ajout de ;""
    INDEX(Nums;U+1)) ;"");

    D'autres améliorations sont à envisager, par exemple million ou millions si >1000000 ..

    Reply

  10. Tristan Geoffroy
    22/11/2022 @ 12:09

    Bonjour,
    merci pour cette formule qui donne envi car à l'air très intelligente, .., peut-être un trop pour moi, car je n'arrive à la comprendre ni pourquoi elle ne fonctionne pas pour moi. Est-il possible d'avoir une explication plus littérale des étapes ?
    Merci

    Reply

    • Frédéric LE GUEN
      24/11/2022 @ 17:29

      Houla, vous êtes bien l'un des rares à me demander d'expliquer une formule (en général les gens ne s'embarrassent pas avec les détails et copie juste la formule. Mais bon, je n'ai malheureusement pas assez de temps pour écrire un article sur toutes les subtilités de la formule. Quelle est la partie que vous ne comprenez pas ?

      Reply

      • Tristan GEOFFROY
        07/01/2023 @ 17:29

        Bonjour,
        bien, comme elle ne fonctionnait pas chez moi, j'essayais de comprendre pour corriger mon erreur. Mais je comprends très bien que ca demande du temps qu'on n'a pas nécessairement.
        Depuis, j'en ai utilisé une autre, plus force brute et moins élégante.
        Je préciserai mes questions,
        Bonne année

      • Tristan GEOFFROY
        15/01/2023 @ 20:00

        21 donnes vingt un euros au lieu de "vingt et un euros", de même pour 31 41 51 61. ; quand j'aurais compris le code je serais
        le corriger. 😉

      • Frédéric LE GUEN
        16/01/2023 @ 20:19

        Oui, je sais bien que ce n'est pas parfait. Mais je n'ai vraiment pas le temps pour améliorer la fonction.

  11. JP
    14/11/2022 @ 20:59

    c'est un bon début mais c'est bourré de fautes, fautes que l'on peut corriger avec une série de remplacements

    après avoir enlevé les majuscules à la formule au dessus cela donne :

    =LET(
    Denom; {" million ";" mille ";" Euros ";" centimes"};
    Nums; {""."un"."deux"."trois"."quatre"."cinq"."six"."sept"."huit"."neuf"};
    Teens; {"dix"."onze"."douze"."treize"."quatorze"."quinze"."seize"."dix-sept"."dix-huit"."dix-neuf"};
    Tens; {""."dix"."vingt"." trente"." quarante"."cinquante"."soixante"." soixante"."quatre-vingt"."quatre-vingt"};
    grp; {0;1;2;3};
    LET(
    N; SUBSTITUE( TEXTE( F9; REPT(0;9)&",00" );",";"0");
    H; CNUM( STXT( N; 3*grp+1; 1) ); T; CNUM( STXT( N; 3*grp+2; 1) );
    U; CNUM( STXT( N; 3*grp+3; 1) );
    Htxt; SI( H; SI(H>1; INDEX( Nums; H+1 ) & " cent "; "cent " ); "");
    Ttxt; SI( T>1; INDEX( Tens; T+1 ) & SI( U>0; " "; "" ); " " );
    Utxt; SI((T+U); SI((T=1)+(T=7)+(T=9); INDEX(Teens;U+1 );INDEX(Nums;U+1)));
    SUPPRESPACE(SUBSTITUE(CONCAT( SI( H+T+U; Htxt & Ttxt & Utxt & Denom; "" ));"un mille";"mille"))
    ))

    (remplacer F9 par la cellule contenant le chiffre)

    effectuer les rempalcements :

    =SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(E9;" FAUX";"s");"quatre-vingt Euro";"quatre-vingts Euro");"quatre-vingt Centimes";"quatre-vingts Centimes");"vingt un";"vingt-et-un");" ";"-");"-Euros";" Euros");"Euros-";"Euros et ");"-centimes";" centimes")

    (remplacer E9 par la cellule contenant le 1er résultat)

    puis de même, enchaîner (conversion de 2000 pour laquelle le mot Euros manque)

    =SI(DROITE(E11;5)="mille";CONCAT(E11;" Euros");E11)

    et enfin (conversion de 2000,20 pour laquelle le mot Euros manque)

    =SI(ESTERREUR(CHERCHE("Euros";E12));CONCAT(GAUCHE(E12;CHERCHE("mille";E12)+4);" Euros et ";STXT(E12;CHERCHE("mille";E12)+6;999));E12)

    Reply

    • Frédéric LE GUEN
      18/11/2022 @ 14:57

      Merci beaucoup pour ce travail et l'effort consacré

      Reply

    • VIRGINIE LOBET
      19/12/2022 @ 14:59

      Bonjour
      pour ma part cette partie de la formule ne fonctionne pas :

      "puis de même, enchaîner (conversion de 2000 pour laquelle le mot Euros manque)

      =SI(DROITE(E11;5)="mille";CONCAT(E11;" Euros");E11)

      et enfin (conversion de 2000,20 pour laquelle le mot Euros manque)

      =SI(ESTERREUR(CHERCHE("Euros";E12));CONCAT(GAUCHE(E12;CHERCHE("mille";E12)+4);" Euros et ";STXT(E12;CHERCHE("mille";E12)+6;999));E12)

      Comment dois je procéder? merci de votre réponse

      Reply

    • VIRGINIE LOBET
      30/01/2023 @ 12:04

      Bonjour
      cette partie ne fonctionne pas pour moi. comment dois je proceder pour coller ces 2 fonctions au reste??

      "puis de même, enchaîner (conversion de 2000 pour laquelle le mot Euros manque)

      =SI(DROITE(E11;5)="mille";CONCAT(E11;" Euros");E11)

      et enfin (conversion de 2000,20 pour laquelle le mot Euros manque)

      =SI(ESTERREUR(CHERCHE("Euros";E12));CONCAT(GAUCHE(E12;CHERCHE("mille";E12)+4);" Euros et ";STXT(E12;CHERCHE("mille";E12)+6;999));E12)""

      Je suis vraiment bloquée!

      Merci beaucoup

      Reply

  12. Pierrick
    17/05/2022 @ 14:52

    Merci pour ce partage.
    Est-ce quelqu'un aurait fait les adaptations pour respecter les règles d'accord des nombres en français ?

    Reply

  13. FUCHY Pierre
    29/03/2022 @ 14:08

    Bonjour!
    Assez nul et vieux, j'ai Excel 365. J'ai tout bêtement copié la formule France et collé dans B1, après avoir mis un nombre dans A1. Le miracle ne s'est pas produit.
    La formule s'est collée en 15 cellules de B1 à B15, et pas de message d'erreur.
    J'ai tenté de passer par word pour tout coller dans la même cellule: toujours pas bon.
    Problème d'espaces, ou autre chose tellement évidente que vous n'en parlez pas?
    Ou bien quoi, je n'ai pas le niveau?
    Si vous pouvez me répondre, merci d'avance.
    Pierre

    Reply

  14. SB
    06/11/2021 @ 08:35

    Hello,
    génialissime !
    Mais... si je mets 10 000,05 € ou 10 000, j'ai pas le "Euro" et d'ailleurs ça devrait être "Euros" avec un s...
    Bravo,
    SB

    Reply

    • Frédéric LE GUEN
      07/11/2021 @ 15:06

      Oui, exact, c'est à cause des 3 valeurs des unités qui sont à 0 donc 0 * 'euro' ne renvoie rien.

      Reply

      • hamidi
        01/12/2021 @ 20:41

        Bonjour,

        Un grand merci pour ce qui vous faites
        juste pour 100 000 ça donne "Cent Faux Mille" au lieu de Cent Mille
        Merci.

      • Frédéric LE GUEN
        05/12/2021 @ 17:05

        Oui, c'est le seul bug (mais vous pouvez le corriger à la main)

  15. Véro
    05/11/2021 @ 19:59

    WOW ! Géniale !! Merci ! NbLettre fonctionne vraiment difficilement, là c'est top !

    Reply

  16. nathalie
    22/10/2021 @ 12:34

    J'ai eu aussi un soucis avec 3grp qu'il fallait écrire 3*grp, après cela ça marche nickel....que de temps gagné.
    Merci beaucoup.

    Reply

    • Frédéric LE GUEN
      23/10/2021 @ 16:16

      Mille merci pour avoir relevé la coquille dans l'article. C'est corrigé

      Reply

  17. Sandra
    02/07/2021 @ 08:36

    Bonjour,

    Merci pour cette formule vraiment super et pour les commentaires qui aident bien!
    J'ai une petite question tenant du format... J'aimerai que le nombre écrit en toute lettre ne comporte que des minuscules, j'ai essayé de simplement remplacer les majuscules par des minuscules dans la formule mais ça n'a rien changé...

    Il y a-t-il une manip supplémentaire à effectuer ?

    En vous remerciant par avance

    Reply

    • Frédéric LE GUEN
      02/07/2021 @ 09:08

      Il faut retirer l'instruction NOMPROPRE. C'est elle qui écrit chaque première lettre en majuscule

      Reply

  18. aleya
    02/04/2021 @ 12:17

    bonjour, je suis un novice en excel, j'ai pas réussi à utiliser la formule, j'ai coller dans une cellule mais j'ai pas compris comment introduire la cellule avec le chiffre

    Reply

    • Maxime Caruel
      06/04/2021 @ 07:51

      A la 10eme ligne dans la formule, tu as A1 que tu dois remplacer par ta cellule qui contient de valeur en chiffres. Novice aussi j'ai réussi. Merci pour le partage de cette formule

      Reply

      • NGUYEN
        07/04/2021 @ 16:09

        Bonjour,

        Moi c'est pareil que ALEYA. J'ai aussi remplacé la cellule qui contient de valeur en chiffres mais c'est toujours #NOM?

        Savez - vous pourquoi ?

        En vous remerciant par avance,

      • Frédéric LE GUEN
        07/04/2021 @ 16:12

        Votre version d'Excel ne connait pas la fonction LET. Il faut Excel 365

      • NGUYEN
        09/04/2021 @ 09:28

        Effectivement, j'ai Excel 365 mais peut - être la version n'est pas à jour.
        Et puis j'ai changé l'ordinateur et ça marche bien.

        Par ailleurs, quand c'est 1000; 4000; ... il n'affiche pas Euros, seulement Mille, Quatre mille. Comment on peut ajouter quand il s'agit le chiffre x Mille ?

        Je vous remercie beaucoup pour ce beau travail.

        Bien à vous,

  19. Nicolas Georges
    27/02/2021 @ 11:44

    Merci pour ce partage !

    J'ai du lire tout l'article pour trouver que . devait s'écrire \ dans ma configuration 😉
    J'ai eu un soucis avec 3grp qu'il fallait écrire 3*grp.
    Sinon, j'ai aussi un soucis avec Utxt : je dois ajouter un ;"") à la fin du premier IF sinon j'obtiens par exemple "Dix Mille Cent Faux Euros", moi je veux des vrais euros :-p

    Nicolas.

    PS: la formule FR finale avec ma version d'Excel 365 (version 2101 build 13628.20274) :
    =LET(
    Denom; {" million ";" mille ";" Euro ";" Centimes"};
    Nums; {""\"Un"\"Deux"\"Trois"\"Quatre"\"Cinq"\"Six"\"Sept"\"Huit"\"Neuf"};
    Teens; {"Dix"\"Onze"\"Douze"\"Treize"\"Quatorze"\"Quinze"\"Seize"\"Dix-sept"\"Dix-huit"\"Dix-neuf"};
    Tens; {""\"Dix"\"Vingt"\" Trente"\" Quarante"\"Cinquante"\"Soixante"\" Soixante"\"Quatre-vingt"\"Quatre-vingt"};
    grp; {0;1;2;3};
    LET(
    N; SUBSTITUE( TEXTE( $I$7; REPT(0;9)&",00" );",";"0");
    H; CNUM( STXT( N; 3*grp+1; 1) ); T; CNUM( STXT( N; 3*grp+2; 1) );
    U; CNUM( STXT( N; 3*grp+3; 1) );
    Htxt; SI( H; SI(H>1; INDEX( Nums; H+1 ) & " cent "; "cent " ); "");
    Ttxt; SI( T>1; INDEX( Tens; T+1 ) & SI( U>0; "-"; "" ); " " );
    Utxt; SI((T+U); SI((T=1)+(T=7)+(T=9); INDEX(Teens;U+1 );INDEX(Nums;U+1));"");
    SUPPRESPACE(SUBSTITUE(NOMPROPRE(CONCAT( SI( H+T+U; Htxt & Ttxt & Utxt & Denom; "" )));"Un Mille";"Mille"))
    ))

    Reply

    • Frédéric LE GUEN
      27/02/2021 @ 17:46

      Il faut tout lire 😉 Il y a toujours une raison derrière une formule.
      Ok pour le 3*grp et merci

      Reply

    • Rémy
      10/05/2021 @ 19:34

      Bonjour et merci pour la formule "compatible" avec ma version. Mais petit souci pour moi, les sommes s'affichent en centimes
      Par exemple
      70 = soixantedix centimes
      700 = 7 euro
      Je cherche mais je ne trouve pas où est l'erreur
      vous avez une idée ?

      Reply

    • FredB
      27/08/2021 @ 14:47

      Merci pour tous ces partages, lorsque je mets 101000 j'obtiens le résultat : Cent Mille. Je n'arrive pas à voir ce qui pêche dans la formule.
      Merci d'avance pour vos retours.

      Reply

      • Frédéric LE GUEN
        05/09/2021 @ 10:24

        Aucune idée. La formule n'a pas été développée au-delà de 99 999

      • Sébastien
        20/12/2021 @ 18:16

        Bonjour,
        le probleme ce pose à partir de l'affichage de 21 000, 31 000 etc...

      • Sébastien
        20/12/2021 @ 19:16

        Mon bidouillage pour que cela fonctionne avec les milliards de Franc CFA ... et réglant le probléme de 21 000, 31 000 etc ...

        =LET(
        Denom;{" milliard ";" million ";" mille ";" ";" "};
        Nums;{""."Un"."Deux"."Trois"."Quatre"."Cinq"."Six"."Sept"."Huit"."Neuf"};
        Teens;{"Dix"."Onze"."Douze"."Treize"."Quatorze"."Quinze"."Seize"."Dix-sept"."Dix-huit"."Dix-neuf"};
        Tens;{""."Dix"."Vingt"." Trente"." Quarante"."Cinquante"."Soixante"." Soixante"."Quatre-vingt "."Quatre-vingt "};
        grp;{0;1;2;3;4};
        LET(
        N;SUBSTITUE(TEXTE(ARRONDI(F38;0);REPT(0;12)&",00");",";"0");
        H;CNUM(STXT(N;3*grp+1;1));
        T;CNUM(STXT(N;3*grp+2;1));
        U;CNUM(STXT(N;3*grp+3;1));
        Htxt;SI(H;SI(H>1;INDEX(Nums;H+1)&" cent ";"cent ");"");
        Ttxt;SI(T>1;INDEX(Tens;T+1)&SI(U>0;" ";"");" ");
        Utxt;SI((T+U);SI((T=1)+(T=7)+(T=9);INDEX(Teens;U+1);INDEX(Nums;U+1));" ");
        SUPPRESPACE(SI(C13=1000;SUBSTITUE(NOMPROPRE(CONCAT(SI(H+T+U;Htxt&Ttxt&Utxt&Denom;"")));"Un Mille";" Mille");NOMPROPRE(CONCAT(SI(H+T+U;Htxt&Ttxt&Utxt&Denom;""))))))&" Franc CFA")

  20. Ephram
    25/01/2021 @ 15:41

    Par contre pour modifier selon le pays, par exemple, la Suisse il faut juste remplacer "quatrevingt" par huitante et quatre vingt dix par nonante ou il faut modifier d'autres point de la formule ?

    Reply

    • Frédéric LE GUEN
      25/01/2021 @ 15:51

      Oui, oui, oui, .... un peu de patience.
      Je sais que je dois le faire mais j'ai mille tâches à réaliser avant.
      Ce n'est pas simple d'être le dernier MVP en langue Française. J'ai bcp de sujet à couvrir.
      Mais ça sera fait.

      Reply

      • Ephram
        26/01/2021 @ 15:49

        Ok merci de l'article et des conseils super pratiques.

    • Frédéric LE GUEN
      25/01/2021 @ 22:35

      Mais pour soixante-dix, c'est bien septante, comme en Belgique

      Reply

  21. Charles
    21/01/2021 @ 10:08

    Chapeau ! Pourtant, à la lecture de la formule définitive, j'ai tout de suite vu... que c'est un véritable casse-tête !
    Par contre, j'adore l'idée de le faire avec des formules SANS MACRO !
    Bravo !

    Reply

    • Frédéric LE GUEN
      21/01/2021 @ 15:14

      C'est sur, il y a eu du travail. C'est pour cela que j'ai partager la fonction car c'est impossible de créer ce genre de formule de toute pièce. Et les macros, si on peut les éviter, c'est bien mieux

      Reply

Laisser un commentaire

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

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.