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 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 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 cduigou, sur 9:57 PM
pourquoi la suite des commentaires a t'elle été effacée ?
Dommage, j'aimais bien ce blog... avant
By 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 Hervé Thiriez, sur 3:41 PM
Je suis d'accord, mais je ne parlais pas de ça
J'arrête là la discussion
By Aigle34, sur 7:55 PM
Enregistrer un commentaire
<< Accueil