Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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

  • Initiateur de la discussion Initiateur de la discussion Eric Dé
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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
 
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:
Bonsoir Eric Dé, CISCO,

Pour la position, autre formule matricielle :
Code:
=SIERREUR(EXP(LN(MAX(SI(ESTNUM(-STXT(A1;LIGNE(INDIRECT("1:"&NBCAR(A1)));1));LIGNE(INDIRECT("1:"&NBCAR(A1)))))));"")
A+
 
Bonjour CISCO et job75,

J'ai essayé vos formules mais le résultat reste invariablement "1". Ceci malgré la validation par Ctrl+maj+entrer !

Y aurait-il quelque chose que j'ai omis ?

Merci.
Eric
 
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
 
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
 
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
 
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.
 
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:
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 ? 😵
 
je confirme c'est pas ça
c'est les deux tirets qui font le job
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…