XL 2010 Trouver le dernier chiffre d'une chaîne de caractères

Eric Dé

XLDnaute Occasionnel
Bonjour,

Je souhaiterais connaître, pour une série de références, la position du dernier chiffre.

Par exemple :
112244 = position 6
112244abc = position 6
112244abc55 = position 10
etc..

Quelle serait la formule qui pourrait me donner ce résultat ?

Merci d'avance.
Eric
 

CISCO

XLDnaute Barbatruc
Bonsoir

Tu peux faire avec les formules matricielles (à valider avec Ctrl+maj+entrer)
Code:
SIERREUR(STXT(A1;MAX(SI(ESTNUM(--STXT(A1;LIGNE(INDIRECT("1:"&NBCAR(A1)));1));LIGNE(INDIRECT("1:"&NBCAR(A1)))));1);"")
pour avoir le dernier nombre et
Code:
SIERREUR(MAX(SI(ESTNUM(--STXT(A1;LIGNE(INDIRECT("1:"&NBCAR(A1)));1));LIGNE(INDIRECT("1:"&NBCAR(A1)))));"")
pour avoir la position de ce dernier nombre, si ton texte est dans A1

@ plus
 
Dernière édition:

CISCO

XLDnaute Barbatruc
Re

Pour le fun, une autre possibilité, toujours en matriciel

Code:
MAX(ESTNUM(--STXT(A1;LIGNE(INDIRECT("1:"&NBCAR(A1)));1))*ESTTEXTE(STXT(A1&" ";LIGNE(INDIRECT("2:"&NBCAR(A1)+1));1))*LIGNE(INDIRECT("1:"&NBCAR(A1))))
@ plus
 

CISCO

XLDnaute Barbatruc
Bonjour

Toujours pour le fun, une autre possibilité un peu plus courte, en "commençant" le défilement des lettres par la fin
Code:
SIERREUR(NBCAR(A1)-EQUIV(VRAI;ESTNUM(--STXT(A1;NBCAR(A1)-LIGNE(INDIRECT("1:"&NBCAR(A1)))+1;1));0)+1;"")

@ plus
 

excfl

XLDnaute Barbatruc
Bonsoir le forum,

En mixant les propositions des deux brillants intervenants dans cette discussion :

VB:
="Dernier chiffre : "&SIERREUR(STXT(A1;MAX(SI(ESTNUM(--STXT(A1;LIGNE(INDIRECT("1:"&NBCAR(A1)));1));LIGNE(INDIRECT("1:"&NBCAR(A1)))));1);"")&"  -   Position : "&SIERREUR(EXP(LN(MAX(SI(ESTNUM(-STXT(A1;LIGNE(INDIRECT("1:"&NBCAR(A1)));1));LIGNE(INDIRECT("1:"&NBCAR(A1)))))));"")
Formule matricielle.
Dernier chiffre & Position.png
 

patricktoulon

XLDnaute Barbatruc
bonjour a tous
Rebonsoir

Et une der pour la route

Code:
MAX(SIERREUR(EQUIV({0;1;2;3;4;5;6;7;8;9};--STXT(A1;LIGNE(INDIRECT("1:"&NBCAR(A1)));1);1);0))
mais je ne comprend pas vraiment comment elle fonctionne...

@ plus
j'arrive un peu après la bataille
mais j'ai trouvé intéressant
je suis pas sur mais on doit pas être loin
@Cisco
par expérience personnelle et l'ayant manipulé sans vergogne
je sais que en vba par exemple avec evaluate la formule =ligne(1:50) crée une matrice a 2 dim(50 lignes sur 1 colonne) les items recevant pour valeur leur propre index
exemple
msgbox typename(evaluate("ROW(1:50)"))' donne variant()

comme la matrice en dur (de recherche"{0;1;2;3;4;5;6;7;8;9}") est en 2 dim
je suppose que la recherche se fait :
sur la chaîne transformée en matrice (1 colonne,ligne=le nombre de caracteres)


pour indirect je suppose qu'elle transfert les caracteres dans la matrice puisque

MsgBox TypeName(Evaluate("INDIRECT(""1:32"" )"))'donne range

MsgBox TypeName(Evaluate("INDIRECT(""1:32"" )")(1)'donne la première valeur


donc selon moi la formule fait
max / du match de la matrice dur / dans la matrice ligne contenant le range par indirect dynamique
 
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
MAX(SIERREUR(EQUIV({0;1;2;3;4;5;6;7;8;9};--STXT(A1;LIGNE(INDIRECT("1:"&NBCAR(A1)));1);1);0))
Surtout pour saluer @patricktoulon :);) ,

Pour ce que j'ai compris et exprimé à ma façon :
  • La partie STXT (...) renvoie une matrice composée des lettres de A1
  • On transforme chaque lettre de cette matrice en son équivalent numérique si c'est un chiffre et en 0 sinon (partie Sierreur(...) )
  • Ensuite pour chacun des chiffres de {0;1;2;3;4;5;6;7;8;9}, on cherche sa plus grande position dans la matrice sierreur() avec le EQUIV(...) (dernier paramètre omis)
  • Le max des plus grandes positions de chaque chiffre de 0 à 9 (il n'y en a pas d'autres) est la position du dernier chiffre.

Que vient faire Hasco dans la discussion ? o_O
 

patricktoulon

XLDnaute Barbatruc
Surtout pour saluer @patricktoulon :);) ,

Pour ce que j'ai compris et exprimé à ma façon :
  • La partie STXT (...) renvoie une matrice composée des lettres de A1
  • On transforme chaque lettre de cette matrice en son équivalent numérique si c'est un chiffre et en 0 sinon (partie Sierreur(...) )
  • Ensuite pour chacun des chiffres de {0;1;2;3;4;5;6;7;8;9}, on cherche sa plus grande position dans la matrice sierreur() avec le EQUIV(...) (dernier paramètre omis)
  • Le max des plus grandes positions de chaque chiffre de 0 à 9 (il n'y en a pas d'autres) est la position du dernier chiffre.

Que vient faire Hasco dans la discussion ? o_O
je confirme c'est pas ça
c'est les deux tirets qui font le job
 

Discussions similaires

Statistiques des forums

Discussions
312 321
Messages
2 087 264
Membres
103 500
dernier inscrit
Suk Ram