Truc pour déboguer une LET.

Lorsque vous déboguez une fonction LET un peu complexe, il faut évaluer différentes parties de la fonction, et là, F9 ne fonctionne plus, et la dernière nouveauté d'Excel pour faire apparaître le résultat du calcul au dessus du texte sélectionné ne fonctionne pas non plus. On a un #NOM à la place.
Une astuce toute simple consiste à copier la partie à évaluer et la coller en dernier paramètre de la fonction LET.
Ne surtout pas oublier de remettre le bon paramètre ensuite.
Merci à Nicolas Brabant qui a démontré ce type d'utilisation avec un paramètre dans sa vidéo (https://lnkd.in/ghvGvwkt) avec Martin AUBARD, et qu'il suffit ensuite d'étendre à n'importe quelle partie de la fonction d'une LET.

Pour marque-pages : Permaliens.

2 réponses à Truc pour déboguer une LET.

  1. oguruma2 dit :

    Il ne faut pas hésiter à décomposer les calculs intermédiaires afin de voir où ça ne fonctionne pas.
    Exemple
    LET (
    var1;calcul1;
    var2;calcul2;
    var3;calcul3;
    var4;calcul4;
    var5;calcul5;
    result;var5;
    result
    )

    debug possible ; on suppose que ça déconne à partir du calcul N°2

    LET (
    var1;calcul1;
    var2;calcul2;
    var3;calcul3;
    var4;calcul4;
    var5;calcul5;
    result;var5;
    var2
    )

    puis....
    LET (
    var1;calcul1;
    var2;calcul2;
    var3;calcul3;
    var4;calcul4;
    var5;calcul5;
    result;var5;
    var3
    )

    puis....
    LET (
    var1;calcul1;
    var2;calcul2;
    var3;calcul3;
    var4;calcul4;
    var5;calcul5;
    result;var5;
    var4
    )

    ==> par exemple en déroulant pas à pas on pourrait imaginer que ça ne fonctionne plus à partir du calcul N°4

    ==> cette méthode de debug permet aussi de solutionner des erreurs quand on implémente une fonction via un LAMBDA.

    Exemple plus réel
    LET(
        adrs1; CELLULE("adresse"; range1);
        adrs2; CELLULE("adresse"; range2);
        decal1; DECALER(INDIRECT(adrs1); ; ; NBVAL(range1); 1);
        decal2; DECALER(INDIRECT(adrs1); ; ; NBVAL(range2); 1);
        join1; JOINDRE.TEXTE(sep; VRAI(); decal1);
        join2; JOINDRE.TEXTE(sep; VRAI(); decal1);
        join; join1 & sep & join2;
        fract; FRACTIONNER.TEXTE(join; sep);
        result; TRANSPOSE(fract);
        result
    )

    Voir il est même recommandé (enfin je recommande) de combiner systématique LET avec LAMBDA

    Exemple en prime : mettre dans une cellule la feuille active à des fin de tableau de bord

    =µSHEET.NAME()

    =LET(
        filename; CELLULE("nomfichier");
        nbc; NBCAR(filename);
        position; TROUVE("]"; filename);
        result; DROITE(filename; nbc - position);
        result
    )
    la formule complète
    =LAMBDA(LET(filename; CELLULE("nomfichier"); nbc; NBCAR(filename); position; TROUVE("]"; filename); result; DROITE(filename; nbc - position); result))

  2. oguruma2 dit :

    Autres exemples avec en prime deux fonctions Lambda qui peuvent rendre service

    En cellule C2 =µEXTRACT.NUMBERS.RIGHT(A2)

    =LET(
        result; DROITE(
            range;
            NBCAR(range) -
                MAX(
                    SI(
                        ESTNUM(STXT(range; LIGNE(INDIRECT("1:" & NBCAR(range))); 1) * 1) = FAUX;
                        LIGNE(INDIRECT("1:" & NBCAR(range)));
                        0
                    )
                )
        );
        TEXTE(result; REPT("0"; NBCAR(result)))
    )
    "1:" & NBCAR(range))); 1) * 1) = FAUX; LIGNE(INDIRECT("1:" & NBCAR(range))); 0))); TEXTE(result; REPT("0"; NBCAR(result)))))

    En cellule D2 =µEXTRACT.NUMBERS.LEFT(A2)

    =LET(
        result; GAUCHE(
            range;
            EQUIV(FAUX; ESTNUM(STXT(range; LIGNE(INDIRECT("1:" & NBCAR(range) + 1)); 1) * 1); 0) - 1
        );
        TEXTE(result; REPT("0"; NBCAR(result)))
    )

    =LAMBDA(range;LET(result; GAUCHE(range; EQUIV(FAUX; ESTNUM(STXT(range; LIGNE(INDIRECT("1:" & NBCAR(range) + 1)); 1) * 1); 0) - 1); TEXTE(result; REPT("0"; NBCAR(result)))))

Laisser un commentaire

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


La période de vérification reCAPTCHA a expiré. Veuillez recharger la page.

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