Re,
'' ...si tu avais 2 minutes pour l'expliquer...''
Remarque générale : Chaque résultat intermédiaire d'une formule peut être visualiser en sélectionnant la partie concernée de la formule dans la barre de formule puis F9
Pré requis : Une quelconque opération arithmétique neutre (*1 ou /1 ou +0 ou -- ou,,,,etc) permet de transformer une matrice de valeurs booléennes (VRAI/FAUX) en matrice de valeurs numériques 1/0
Question initiale : extraire un entier numérique d'une chaîne de caractères.
Exemple avec la chaîne ''lui1234moi'' en A1
La formule :
=1*STXT(A1;EQUIV(1;1*ESTNUM(1*STXT(A1;LIGNE(INDIRECT('1:'&NBCAR(A1)));1));0);SOMME(1*ESTNUM(1*STXT(A1;LIGNE(INDIRECT('1:'&NBCAR(A1)));1))))
En partant du (presque) niveau 1 d'imbrication,,,
La partie :
LIGNE(INDIRECT('1:'&NBCAR(A1)))
est une astuce pour renvoyer une matrice de constantes numériques de 1 à x (x étant le nombre de caractères de la chaîne)
Résultat : {1;2;3;4;5;6;7;8;9;10}
Cette série de nombres va être utilisée par la fonction STXT pour extraire, caractères par caractères, chaque élément de la chaîne dans la partie :
STXT(A1;LIGNE(INDIRECT('1:'&NBCAR(A1)));1)
Résultat : {''l'';''u'';''i'';''1'';''2'';''3'';''4'';''m'';''o'';''i''}
En multipliant cette matrice par 1 dans la partie
1*STXT(A1;LIGNE(INDIRECT('1:'&NBCAR(A1))
on obtient une matrice avec des valeurs d'erreur chaque fois que la multiplication se fait sur une valeur non numérique ou bien la valeur numérique originelle
Résultat : {#VALEUR!;#VALEUR!;#VALEUR!;1;2;3;4;#VALEUR!;#VALEUR!;#VALEUR!}
La partie : 1*ESTNUM(1*STXT(A1;LIGNE(INDIRECT('1:'&NBCAR(A1)));1))
renvoie une matrice dans laquelle les VRAI/FAUX (valeurs booléennes renvoyées par la fonction ESTNUM) sont transformés en 1 ou 0
{0;0;0;1;1;1;1;0;0;0}
La partie : EQUIV(1;1*ESTNUM(1*STXT(A1;LIGNE(INDIRECT('1:'&NBCAR(A1)));1));0)
Permet de trouver, dans la matrice obtenue, la position du 1° chiffre 1 est donc la position du 1° chiffre de la chaîne de A1
Résultat attendu renvoyé par cette partie : 4
Ce résultat va être utilisé comme 2° argument (position du début d'extraction) de la 1° fonction STXT
La partie : SOMME(1*ESTNUM(1*STXT(A1;LIGNE(INDIRECT('1:'&NBCAR(A1)));1)))
va permettre en faisant la somme de la matrice {0;0;0;1;1;1;1;0;0;0} d'obtenir le nombre total de chiffres dans la chaîne
Résultat : 4
Ce résultat va être utilisé comme 3° argument (nombre de caractères à extraire) de la 1° fonction STXT
La partie =1*STXT(,,,,,,) sert simplement, facultativement, à tranformer le résultat final en valeur numérique
AV [aaa]