Répondre à: Réécrire un montant en lettres

  • Charles

    Membre
    26 janvier 2024 à 21h55

    Bonjour Marielle,

    Une des solutions consiste à passer par un script Sharepoint pour mouliner ton nombre.

    Il faut que tu ailles dans Excel Online puis que tu crées un nouveau script depuis l’onglet “Automate”.

    Dans le script tu colles le code suivant:

    <pre class=”language-javascript”>function main(workbook: ExcelScript.Workbook, nombre: number) {
    return nombreEnTexte(nombre)
    }

    function nombreEnTexte(nombre: number) {
    if (nombre < 100) {
    return replaceResult(dizaineEnTexte(nombre));
    } else if (nombre < 1000) {
    return replaceResult(centainesEnTexte(nombre));
    } else if (nombre < 1000000) {
    let milliers = Math.floor(nombre / 1000);
    let reste = nombre % 1000;
    let texte: string
    texte = nombreEnTexte(milliers) + ' mille';
    texte += (reste > 0) ? ' ' + nombreEnTexte(reste) : '';
    return replaceResult(texte);
    } else {
    return "Nombre trop grand";
    }
    }

    function centainesEnTexte(nombre: number) {
    let centaines = Math.floor(nombre / 100);
    let reste = nombre % 100;
    let texte: string
    texte = (centaines > 1) ? nombreEnTexte(centaines) + ' cent' : 'cent';
    texte += (reste > 0) ? ' ' + dizaineEnTexte(reste) : '';
    return texte;
    }

    function dizaineEnTexte(nombre: number) {
    const unites = ['zero', 'un', 'deux', 'trois', 'quatre', 'cinq', 'six', 'sept', 'huit', 'neuf'];
    const dizaines = ['', '', 'vingt', 'trente', 'quarante', 'cinquante', 'soixante', 'soixante-dix', 'quatre-vingt', 'quatre-vingt-dix'];

    if (nombre < 10) {
    return unites[nombre];
    } else if (nombre < 20) {
    return ['dix', 'onze', 'douze', 'treize', 'quatorze', 'quinze', 'seize', 'dix-sept', 'dix-huit', 'dix-neuf'][nombre - 10];
    } else if (nombre === 80) {
    return 'quatre-vingts';
    } else {
    let texte = dizaines[Math.floor(nombre / 10)];
    let reste = nombre % 10;
    if ((nombre >= 70 && nombre < 80) || (nombre >= 90)) {
    texte = nombreEnTexte(nombre - 10) + '-dix';
    reste -= 10;
    }
    texte += (reste > 0) ? ((reste === 1 && nombre !== 71) ? ' et un' : '-' + unites[reste]) : '';
    return texte;
    }
    }

    function replaceResult(texte: string){
    let texte_clean: string;
    texte_clean = texte.replace("un-dix", "onze");
    texte_clean = texte_clean.replace("quatre-vingt et onze", "quatre-vingt-onze");
    texte_clean = texte_clean.replace("deux-dix", "douze");
    texte_clean = texte_clean.replace("deux-dix", "douze");
    texte_clean = texte_clean.replace("trois-dix", "treize");
    texte_clean = texte_clean.replace("quatre-dix", "quatorze");
    texte_clean = texte_clean.replace("cinq-dix", "quinze");
    texte_clean = texte_clean.replace("six-dix", "seize");
    texte_clean = texte_clean.replace("sept-dix", "dix-sept");
    texte_clean = texte_clean.replace("huit-dix", "dix-huit");
    texte_clean = texte_clean.replace("neuf-dix", "dix-neuf");
    texte_clean = texte_clean.replace("un mille", "mille");
    return texte_clean
    }

    Tu sauvegardes ton script et ensuite tu peux l’appeler dans PowerAutomate avec la fonction

    “Run script from SharePoint library”. Tu es obligée de sélectionner un fichier Excel mais quel que soit le fichier ça fonctionne et ensuites tu renseignes ton script à executer.

    Le nombre en toutes lettres sera dans l’output de cette action