Monsieur Excel
Pour tout savoir faire sur Excel !

21 septembre 2013

Améliorer l’isolement numérique

Dans le dernier post, nous avons découvert une formule matricielle qui nous a permis d’isoler la partie textuelle de la partie numérique, dans une cellule contenant un texte suivi d’une valeur. Nous vous rappelons la situation : il faut isoler en B1 la partie numérique de A1...


En fait, un lecteur de la solution proposée dans l'article précédent, John Chisholm, a trouvé une formule encore meilleure, car elle ne requiert pas de validation matricielle.

Sa formule pour B1 est la suivante : 
=recherche(99^99;--(0&stxt(A1;min(trouve({0.1.2.3.4.5.6.7.8.9};A1&1234567890));
ligne(indirect("1:"&nbcar(A1)+1)))))

trouve({0.1.2.3.4.5.6.7.8.9};A1&1234567890) s’évalue en {22.13.6.7.8.9.11.12.20.21}, ce qui nous donne les positions dans la chaîne (astucieusement enrichie des 10 chiffres) du premier 0, du premier 1, …

Le minimum de ce vecteur est la position du premier chiffre, donc 6.

0&stxt(A1;6;ligne(indirect("1:"&nbcar(A1)+1))) est évalué en {"02";"023";"0234";"02345";"02345,";"02345,6";"02345,67";"02345,67";"02345,67";
"02345,67";"02345,67";"02345,67";"02345,67"}

--({"02";"023";"0234";"02345";"02345,";"02345,6";"02345,67";"02345,67";"02345,67";
"02345,67";"02345,67";"02345,67";"02345,67"}) est évalué en {2;23;234;2345;2345;2345,6;2345,67;2345,67;2345,67;2345,67;2345,67;2345,67;
2345,67}

Et enfin, le recherche() renvoie la dernière valeur de ce vecteur…

Comme dans l’article précédent, on peut donc raccourcir encore cette formule en utilisant la fonction droite(), avec la formule :
=1*droite(A1;nbcar(A1)-min(trouve({0.1.2.3.4.5.6.7.8.9};A1&1234567890))+1)

Remarque – Il faudrait que Claude Duigou, qui nous a proposé dans un commentaire à l’article précédent une solution non matricielle à base de substitue() à répétition, nous dise comment sa solution se compare à celle-ci en temps de calcul…

6 Commentaire(s):

  • Merci de votre confiance...
    Le test que vous me proposez avec la nouvelle formule nous donne sur les fameuses 500000 lignes un délai de mise à jour de 23s à comparer avec les 43s de la formule matricielle et l'instantanéité pour les "SUBSTTUE" imbriqués.

    By Anonymous cduigou, sur 11:29 PM  

  • bonjour,
    j'ai remplacer Excel par LibreOffice en décembre 2012 (gratuité) et pour votre exemple je constate que LO permet l'utilisation d'une formule simplifiée:
    pour la cellule B1:
    =CNUM(STXT(A1;CHERCHE("[:digit:]";A1);NBCAR(A1)))
    pour la cellule C1:
    =GAUCHE(A1;CHERCHE("[:digit:]";A1)-1)

    n'ayant plus Excel, je pense qu'une formule plus concise que celles présentées et explicitées existe,
    très cordialement

    By Anonymous Henri, sur 1:43 PM  

  • @Henri
    " je pense qu'une formule plus concise que celles présentées et explicitées existe..."

    Merci dans ce cas de présenter au plus vite à nos esprits limités le résultat de vos pensées...

    By Anonymous cduigou, sur 9:57 PM  

  • pourquoi la suite des commentaires a t'elle été effacée ?
    Dommage, j'aimais bien ce blog... avant

    By Anonymous Anonyme, sur 2:50 PM  

  • Ce blog est un blog Excel. Si l'on commence à y parler des produits similaires, on ne s'en sortira plus...

    By Blogger Hervé Thiriez, sur 3:41 PM  

  • Je suis d'accord, mais je ne parlais pas de ça
    J'arrête là la discussion

    By Anonymous Aigle34, sur 7:55 PM  

Enregistrer un commentaire

<< Accueil