Position d'un chiffre dans un texte excel

aqwzsx -  
ccm81 Messages postés 11033 Statut Membre -
Bonjour

J'ai une formule qui retourne la première position d'un chiffre dans une chaine de texte.

Chaine de texte 1 en cellule M2 : « Cass. com 15 février 2008»
Chaine de texte 2 en cellule M2 : « Cass. com 5 février 2008»

Mes chiffres sont dans la feuille « TABLES-REF » avec 1 en C5, 2 en C6, 3 en C7, 4 en C8, 5 en C9, 6 en C10, 7 en C11, 8 en C12, 9 en C13

Ma formule : « =CHERCHE(SUBSTITUE('TABLES-REF'!$C$5:$C$13;"""";"");M2 )»

Resultat pour la chaine de texte 1 => 11
Resultat pour la chaine de texte 2 => erreur

=> Cette formule fonctionne avec les chiffres 1 et 2 mais pas avec les autres et notamment 5
=> Si je mets 5 en C5 et 1 en C9 dans TABLES-REF => cela fonctionne pour ma chaine 2 mais dans le premier exemple, il me renverra la position du chiffre 5 et pas 1 ce qui n'est pas correct
=> Il faudrait qu'il trouve la première position d'un chiffre et que cela fonctionne avec tous les chiffres

Je suis un peu perdu
Merci de votre aide.

2 réponses

  1. pilas31 Messages postés 1878 Statut Contributeur 648
     
    Bonjour ccm81 et aqwzsx

    Il existe une solution (suggérée par Microsoft) en utilisant une expression matricielle :

    {=EQUIV(VRAI;ESTNUM(1*STXT(M2;LIGNE($1:$20);1));0)}

    bien sur à valider par <Ctrl><Maj><Entrée>

    le $1:$20 donne la longueur maxi de la chaine ici limitée à 20 caractères mais on peut remplacer le 20 par la longueur maxi de la chaine à analyser.

    A+

    Cordialement,
    2
    1. ccm81 Messages postés 11033 Statut Membre 2 434
       
      > pilas31

      bien vu
      et bonne fin d' après midi
      0
  2. ccm81 Messages postés 11033 Statut Membre 2 434
     
    bonjour

    sans macro, je ne vois pas (ce qui ne veut pas dire que ...)

    avec (une petite) macro
    Alt-F11 pour accéder à l'éditeur puis Insertion/module et copier/coller
    à utiliser dans la feuille comme une fonction excel

    Public Function rangnum(s) 
    Dim r As Long 
    r = 1 
    Do 
      If IsNumeric(Mid(s, r, 1)) Then 
        rangnum = r 
        Exit Function 
      End If 
      r = r + 1 
    Loop While r <= Len(s) 
    rangnum = 0 
    End Function

    bonne suite
    0