0
(0)

On trouve facilement sur internet des codes en VBA pour cela donc voici une version avec une formule moins courante.

Présentation de la fonction

Permet de convertir de valeurs entières de 0 à 1066-1 (999 décilliards) en lettres.

  • Les valeurs décimales sont arrondies.
  • Les valeurs négatives ne sont pas supportées.
  • Les valeurs supérieurs ou égales à 1 000 000 000 000 000 (1 billiard soit 1015) doivent être saisies en format texte (précision limite d'Excel pour les calculs, la limite en saisie avant conversion automatique en texte est 1020 si en format Nombre).
  • Espaces et espaces insécables tolérés (souvent utilisés comme séparateur de classe).

Syntaxe

=NbreLettres(Cellule)

Argument

Cellule : cellule contenant le nombre à convertir.

Exemple d'utilisation

Fonction NbreLettres

Le 3 dernières lignes (en rouge) sont en texte (remarquer l'alerte Excel par le triangle vert en haut à gauche de la cellule A45).

=LAMBDA(Cellule_;LET(
   chaine;SUBSTITUE(SUBSTITUE(Cellule_;" ";"");CAR(160);"");
   chiffre;{"";" un";" deux";" trois";" quatre";" cinq";" six";" sept";" huit";" neuf"};
   nbre;{" dix";" onze";" douze";" treize";" quatorze";" quinze";" seize";" dix-sept";" dix-huit";" dix-neuf"};
   diz;{"DIX";" vingt";" trente";" quarante";" cinquante";" soixante";" soixante";" quatre-vingt";" quatre-vingt"};
   classe;{" décillion";" décilliard";" nonillion";" nonilliard";" octillion";" octilliard";" septillion";" septilliard";" sextillion";" sextilliard";" quintillion";" quintilliard";" quadrilliond";" quadrilliard";" trillion";" trilliard";" billion";" billiard";" milliard";" million";" mille";""};
   nbCl;ENT(NBCAR(chaine)/3)+1;
   grp;SEQUENCE(nbCl;;0);
   N;TEXTE(chaine;REPT(0;nbCl*3));
   C;STXT(N;3*grp+1;1)*1;
   D;STXT(N;3*grp+2;1)*1;
   U;STXT(N;3*grp+3;1)*1;
   Cl;23-nbCl+grp;
   Cltxt;INDEX(classe;Cl);
   Ctxt;SI(C>1;
           INDEX(chiffre;C+1);"")&
             SI(C;
                " cent"&SI((C>1)*(D=0)*(U=0)*(Cl<>21);"s";"");
                "");
   Dtxt;SI(D>1;
           INDEX(diz;D-((D=7)+(D=9))*(U<>0))&
             SI((D=8)*(U=0);"s";"")&
             SI((D<8)*(U=1);"-et";"")&
             SI((U>0)+(D=7)+(D=9);"-";"");
           "");
   Utxt;SI(((D=1)+(D=7)+(D=9));
           INDEX(nbre;U+1);
           SI(U=0;"";INDEX(chiffre;U+1)));
   res;CONCAT(SI(C+D+U;
                 Ctxt&Dtxt&SI((U=1)*(D=0)*(Cl=21);"";Utxt)&
                   Cltxt&
                   SI((Cl<21)*((C*10+D*10+U)>1);"s";"");
                 ""));
   SI(res="";
      "zero";
      SUBSTITUE(SUPPRESPACE(res);"- ";"-"))
))

Interprétation de cette formule

  1. On génère 3 matrices centaines/dizaines/unités (C/D/U) ayant autant de lignes que de classes présentes.
  2. Puis on recherche la représentation textuelle de chaque valeurs (matrices Ctxt/Dtxt/Utxt).
  3. On concatène les 3 matrices pour obtenir la chaîne finale.
  • Cellule_ : Cellule à traduire.
  • chaine : Chaîne sans espaces.
  • chiffre, nbre, classe : matrice des représentations textuelles des valeurs.
  • nbCl : Calcul du nombre de classes présentes (nombre de groupe de 3 chiffres).
  • grp : Matrice des numéros de classe à traiter (de 0 à nb de classe-1).
  • N : On complète le nombre par des 0 à gauche pour avoir des classes complètes (8 000 devient 008 000 par exemple).
  • C, D, U : Matrice des Centaines/Dizaines/Unités.
  • Cl : Matrice des numéros de classe à extraire de la matrice classe.
  • Cltxt : Matrice noms de classe utilisés.
  • Ctxt : Matrice des textes centaines avec gestion du "s" pour les multiples sauf pour les milliers.
  • Dtxt : Matrice des textes dizaines avec gestion du "s" pour 80, du "et" pour 21 à 71 et du tiret.
  • Utxt : Matrice des textes unités avec gestion de la 1ere/2nde dizaine (10 à 19).
  • res : Texte résultant de la concaténation des matrices (des espaces superflu sont présents).

On termine en gérant le cas "zéro" et en nettoyant la chaîne res.

Si vous trouver une erreur/simplification dans ma formule n'hésiter pas à m'en faire part.

(Cette fonction pourrait facilement être adaptée à des versions plus anciennes d'Excel)

Merci pour votre attention bienveillante.

Article intéressant ?

Cliquez sur une étoile pour noter cet article !

Note moyenne 0 / 5. Nombre de votes : 0

Aucun vote pour l'instant ! Soyez le premier à noter ce post.

Nous sommes désolés que cet article ne vous ait pas été utile !

Améliorons cet article !

Dites nous comment nous pouvons améliorer cet article ?

Publications similaires

Laisser un commentaire

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