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.
Truc pour déboguer une LET.
Pour marque-pages : Permaliens.
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))
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)))))