Recherche une chaine de 10 caractères numériques

Résolu

Bonjour,

Je cherche une formule qui m'extrait uniquement la chaine de 10 caractères numériques.

Exemple :

  1. ttt test MM RAMI ERR GJHH 2809581599 111111111111111

Valeur recherchée : 2809581599

  1. RGH IRTY JUYT FGGHG IIDU 11111222224444 - 1303051449-230305

Valeur recherchée : 1303051449

  1. RRR DDD RTRTRTR NYHJYY DFEERR 2903041186,...

Valeur recherchée : 2903041186

Qu'importe le texte dans la cellule, je cherche uniquement les chaines de 10 caractères......

Merci d'avance,


Windows / Firefox 91.0

16 réponses

Résumé de la discussion

La problématique centrale consiste à extraire, dans un texte, toutes les chaînes numériques de dix chiffres présentes dans une cellule, quel que soit leur emplacement ou le contexte. Plusieurs solutions s'appuient sur des expressions régulières et du code, notamment une fonction VBA utilisant RegExp pour renvoyer les suites de dix chiffres séparées par des espaces. D'autres approches proposent Power Query dans Excel 365 pour traiter une source structurée et extraire les séquences, avec des variantes de motifs et de gestion des cas début ou fin. Enfin, le fil évoque des ajustements pour éviter les boucles, gérer des listes volumineuses et adapter les résultats selon le contexte d'utilisation.

Bobot (l’IA à votre service)
  1. Modérateur

    Bonjour,

    Je pense que c'est difficile en excel pur. Cela ressemble à un type d'exercice où on utilise les regex (expressions régulières).

    Il semble y avoir des add-on excel incluant une telle fonction : https://www.excel-pratique.com/fr/fonctions-complementaires

    Et alors : https://www.excel-pratique.com/fr/fonctions-complementaires/regex-extract


    1
    1. Bonjour et Merci,

      Je vais essayer avec les macros complémentaires......C'est en effet compliqué sur EXCEL !

      Cdlt

      0
  2. Bonjour,

    Selon la version Excel utilisée, une solution par le biais de Power Query est possible...

    Quelle version? (si >= à 2010, on peut envisager)

    @ te relire avec ta version


    1
    1. Bonjour et Merci,

      Je suis en version Excel2010 et bientôt en Excel2016. Je pourrais voir si power query est accessible en entreprise. Ce qui n'est pas le cas actuellement avec EXCEL 2010. Je pourrais aussi utiliser Power BI Desktop ......A voir.

      Cdlt

      0
  3. Bonjour,

    Il n'y a pas de formules, tout se fait en requête interne à Power Query.

    La source de données est le Tableau Structuré (TS) de gauche, et qui se nomme "Tableau1"

    Si tu utilises bien ta version 365, et que le TS de gauche se nomme bien ainsi, regarde également dans les options de requête...

    Pour ce faire :
    - Clic droit sur le tableau de droite/Table/Modifier la requête (l'éditeur Power Query s'ouvre)
    - A gauche, en haut, tu cliques sur "Fichier/Options et paramètres/Options de requête"
    - A droite, tu sélectionnes "Confidentialité" et tu choisis "Toujours ignorer les paramètres de confidentialité" (option inutile, qui n'apporte que des désagréments dans 99% des cas)

    Puis tu cliques sur "Fermer et Charger"

    Et, normalement, c'est bon...


    1
    1. Bonjour,

      Malheureusement je travaille avec EXCEL2010, en entreprise et ne peux obtenir PoWer Query.

      Merci pour cette solution, qui fonctionne chez moi mais pas sur le projet que j'ai en entreprise...

      Cdlt

      0
    2. @PYGOS69

      Re-,

      Déjà un bon point, si ça fonctionne chez toi...

      Reste juste à ta boîte de migrer (minimum 2016)

      Bon courage, et  bon W-E

      1
    3. @cousinhub29

      Merci ! Et Bon Weekend !

      0
  4. Bonjour, 

    S'il n'y avait pas le cas de la deuxième proposition où le nombre de 10 chiffres se trouve après une autre série de chiffres il y a bien cette formule matricielle que j'ai récupérée sur le site de Bombache

    {=STXT(A1;EQUIV(0;ESTERREUR(STXT(A1;LIGNE(INDIRECT("1:"&NBCAR(A1)));1)*1)*1;0);10)*1}

    Si ça peut éventuellement aider

    Cordialement

    1
    1. Bonjour,

      Merci!

      Oui en effet sur la 2ème proposition, le résultat n'est pas bon, mais c'est un début de solution.....

      Cordialement,

      0
  5. Salut PYGOS69

    Un essai en 4 étapes pour éviter des formules très très très alambiquées

    https://www.cjoint.com/c/MDDgmgZmO8H

    Cordialement

    1
    1. .../

      Encore Merci ! Je regarde.....

      Cdlt

      0
  6. Bonjour

    Je tente une solution macro (à tester) qui évite le chargement du fichier des macros complémentaires

    https://www.cjoint.com/c/MDEijBKLUsB

    Cdlmnt

    1
    1. Bonsoir ccm81,

      Un grand Merci ! pour cette fonction qui devrait répondre a beaucoup de possibilités !

      Cdlt

      0
    2. Salutations à tous

      .

      Bien vu ccm81 ; tu as inclus la possibilité que les 10 chiffres consécutifs soient placés au début ou à la fin. 

      .

      Dans mon essai je me suis contenté de répondre à la précision du message N°5 de PYGOS69

      .

      Cordialement

      1
    3. Bonjour,

      Après un essai, Recopie incrémentée de la formule (fonction), Excel plante avec message .......ne répond pas....

      Avec un autre exemple :

      ARI BVDF KDDHFHHGHGG SA 0124568956985426 TRUE 20 FDGT REVF AERT6546879 2270131481

      Résultat : err

      Alors qu'il y a bien une chaine de caractères de 10 ? (2270131481)

      Merci d'avance !

      Cdlt

      1
  7. Bonjour

    1. ARI BVDF KDDHFHHGHGG SA 0124568956985426 TRUE 20 FDGT REVF AERT6546879 2270131481

    Pour une donnée de ce type, il y a une suite de chiffres qui commence par 0, c'est (en principe) corrigé. Au passage ça traite du coup les suites de 10 chiffres commençant par des zéros

    https://www.cjoint.com/c/MEcqvzzSzdB

    2. Excel plante avec message ne répond pas.

    Envoies la donnée qui provoque le plantage

    Cdlmnt

    1
    1. Encore Merci ccm81 !

      Je suis confronté à une autre demande :

      Exemple :

      TTT MUUJ DSDDFDFDG GHGHG JKJKLKL DE FGFG BNHJHJHJ DGVFGF CAFE- 2302110444, 2302110445, 2302110446, 2302110447, 2302110448

      Avec la fonction, le résultat est : 2302110444

      C'est exact ! mais je ne sais pas comment récupérer la 2ème chaine + la 3ème .....dans ce cas précis....

      C'est une minorité de cas, mais si tu pouvais ....

      Cdlt

      0
    2. @PYGOS69

      Bonjour,

      En attendant ccm81, voici une autre approche :

      https://www.cjoint.com/c/MEcsXIPWnsw

      Function ExtraireSuitesDeChiffres(str As String) As String
      
          Dim regEx As New RegExp
          regEx.Pattern = "\b\d{10}\b" ' Le motif de l'expression régulière pour trouver les suites de 10 chiffres
          regEx.Global = True ' Recherche globale dans toute la chaîne
          regEx.IgnoreCase = True ' Ignorer la casse des caractères
         
          Dim matches As MatchCollection
          Set matches = regEx.Execute(str) ' Trouver toutes les suites de chiffres dans la chaîne
         
          Dim match As match
          For Each match In matches
              ExtraireSuitesDeChiffres = ExtraireSuitesDeChiffres & match.Value & " " ' Ajouter chaque suite de chiffres trouvée à la chaîne résultante
          Next match
         
          ExtraireSuitesDeChiffres = Trim(ExtraireSuitesDeChiffres) ' Supprimer l'espace en trop à la fin de la chaîne résultante"
      
      End Function
      

      Note: la référence Microsoft VBScript Regular Expressions est requise.
      VBA > Outils > Références et cocher Microsoft VBScript Regular Expressions

      1
    3. @ozone_

      Petit update de la macro :

      https://www.cjoint.com/c/MEctht1bjjw

      Function ExtraireSuitesDeChiffres(str As String) As String
      
          Dim regEx As New RegExp
          regEx.Pattern = "(^|\D)(\d{10})([^$\s;])?(\b|$)" ' Le motif de l'expression régulière pour trouver les suites de 10 chiffres entourées de non-chiffres et suivies d'un caractère non-mot, tout en excluant les symboles "$", ";" et " "
          regEx.Global = True ' Recherche globale dans toute la chaîne
          regEx.IgnoreCase = True ' Ignorer la casse des caractères
          
          Dim matches As MatchCollection
          Set matches = regEx.Execute(str) ' Trouver toutes les suites de chiffres dans la chaîne
          
          Dim match As Match
          For Each match In matches
              ExtraireSuitesDeChiffres = ExtraireSuitesDeChiffres & match.SubMatches(1) & " " ' Ajouter chaque suite de chiffres trouvée à la chaîne résultante
          Next match
          
          ExtraireSuitesDeChiffres = Trim(ExtraireSuitesDeChiffres) ' Supprimer l'espace en trop à la fin de la chaîne résultante
      
      End Function
      1
    4. @ozone_

      Salut ozone_

      Évidemment, c'est mieux comme ça ! Il ne me reste plus qu'à me pencher sérieusement sur les expressions régulières !

      Bonne soirée

      1
    5. @ozone_

      Bonsoir ozone et ccm81,

      Merci pour vos travaux différents qui me permettent de traduire ce projet ! 

      Tous mes problèmes ont été résolu !

      Bonne fin de journée !

      0
  8. Je suis confronté à une autre demande : non, c'est moi ;-)

    Pour une liste de séries de 10 chiffres. A tester

    RQ. J'ai mis un  nombre maxi de tours de boucle (nbessaismax) à 20 en début de code, histoire de ne pas planter dans une boucle infinie, si tu peut avoir plus de 20 séries (de 10) dans la même donnée, tu changes la valeur.

    https://www.cjoint.com/c/MEcsNCLDDLB

    Cdlmnt

    1
    1. Bonjour ccm81,

      Je tente ! Est il possible, lorsqu'il y en a plusieurs d'insérer autant de lignes en dessous et de les indiquer ?

      Exemple :

      CCC AAAA DDDDDDDE DDDDD DGFGFGF DE FGF GFGFGF FGGFGF HHJH- 2302230111, 2302230112, 23022309222

      Résultat en 3 lignes si c'est possible .....

      Et je me suis aperçu que la fonction extrait les chaines même si ce la ne commence pas par une année comme l'exemple ci-dessous. (post 18)

      ddd AAAAAAA 011CC74000100111 5372111222 REF 2038104222

      Résultat : 5372566222;2038104222

      Merci pour votre patience.

      Cdlt

      0
  9. Bonjour

    1. Je tente ! Est il possible, lorsqu'il y en a plusieurs d'insérer autant de lignes en dessous et de les indiquer ?

    Comme ça ? Mais on ne passe plus par une fonction

    https://www.cjoint.com/c/MEdnUeSbUmB

    Cdlmnt

    1
    1. Bonjour,

      Génial ! Merci !

      En dessous s'il existe une autre ligne, c'est peut-être pas l'idéal.

      Désolé je n'avais pas pensé, à cela ! Au lieu d'en dessous peut-être sur la droite : (De la colonne B à F) ou plus si besoin

      TTT MUUJ DSDDFDFDG GHGHG JKJKLKL DE FGFG BNHJHJHJ DGVFGF CAFE- 2302110444, 2302110445, 2302110446, 2302110447, 2302110448  > colonnes de B à  F

      2302110444 2302110445 2302110446 2302110447 2302110448

      Cordialement,

      Ps : Sur des fichiers de 160 lignes et +, est il possible de ne pas double cliquer à chaque ligne ?(Produit final) :)

      0
  10. Ps : Sur des fichiers de 160 lignes et +, est il possible de ne pas double cliquer à chaque ligne ?

    https://www.cjoint.com/c/MEdpQ5i21JB

    Cdlmnt

    1
    1. .../

      Test sur 112 lignes....

      Quand je modifie les données, et que je lance la macro par ctrl + k une boite de dialogue m'affiche un message "Argument ou Appel de procédure incorrect".

      Et le résultat ne se fait que sur 15 lignes...... 

      Cdlt

      0
    2. Bonjour,

      J'ai remarqué que le problème arrive quand sur une cellule il y a une chaine de caractères ou ne figure aucun caractère numérique. Est il possible de contourner ce problème ?

      C'est à dire de donner un résultat jusqu'à la dernière cellule non vide.

      Merci !

      Cdlt

      0
  11. .../

    Dans un premier temps, je souhaite utiliser une formule quand la chaine de caractères est borné entre 2 espaces ou autres caractères....

    0
    1. Re-,

      Par formules, je ne sais pas faire...

      Pour Power Query, pour les versions 2010 et 2013, on peut télécharger le complément gratuitement sur le site de µSoft sous ce lien : https://www.microsoft.com/fr-FR/download/details.aspx?id=39379

      Pour 2016, ce sera en natif (PS, et hors sujet, quel intérêt de ne passer qu'en 2016?????)

      Tu me dis...


      0
      1. Je ne peux et surtout je n'ai pas l'autorisation de télécharger le complément gratuit...

        Tu me dis...

        ../ Décision en interne car la maintenance pour Excel 2010 disparait.....Chez moi j'ai 365 !

        0
      2. @PYGOS69

        RE-,

        J'arriverai jamais à comprendre...

        Tu pourrais télécharger un complément xla (macro complémentaire), et pas un complément gratuit, et délivré par le fournisseur (donc, sans risque...)

        Chez toi, ça fonctionnera

        Pour mettre à jour, tu mets tes données dans le tableau de gauche, et clic droit dans le tableau de droite, "Actualiser"

        https://cjoint.com/c/MDBqRmgGnUT

        J'ai pris une seule option, la chaîne de 10 chiffres ne peut être bordée que par un espace ou un tiret (et bien sûr, il n'y a qu'une chaîne de 10 chiffres)

        On pourrait adapter les bordures (tiret, /, \ ....)

        0
    2. RE;

      J'ai Échec lors de l'initialisation de la source de données.

      Ou est la source de données ?

      Je ne vois pas de formule dans le tableau de droite.

      Merci d'avance !

      0
      1. Bonjour à tous

        Juste une question en passant

        Est ce que les premiers chiffres (à gauche) de la série de 10 cherchée peuvent être des zéros ?

        Cdlmnt

        0
        1. Bonjour, non c'est général l'année 22 pour 2022.

          Cdlt

          0