Exctraction d'une chaîne de caractère

Résolu
Saween -  
 Saween -
Bonjour à toutes et à tous,

J'essaie de faire une extraction de chaîne de caractère d'une feuille à l'autre.

Voici ma fonction: =SIERREUR(STXT(Feuil1!A2;TROUVE("Balise1";Feuil1!A2;1)+8;TROUVE("Finbalise1";Feuil1!A2;1)-(TROUVE("Finbalise1";Feuil1!A2;1)-7));"")

Dans mes cellules j'ai inséré des balises afin de récupérer ce qu'elles contiennent.

Le souci de ma fonction est que je suis obligé de lui donner une indication sur le nombre de caractère à extraire (+8 / -7), alors que je voudrais que ma fonction extrait ce qu'il y a entre les balises peut importe le nombre de caractère qu'il a été renseigné.

Merci d'avance.

2 réponses

Résumé de la discussion

Extraction dynamique du contenu entre balises dans des cellules Excel sans longueur fixe, afin de récupérer uniquement ce qui se situe entre les balises d’ouverture et de fermeture.
Plusieurs intervenants recommandent d’utiliser la fonction STXT avec TROUVE pour repérer le premier '>' puis le premier '<' qui suit, afin de déterminer dynamiquement la longueur à extraire.
La solution préconisée consiste à calculer STXT en partant après le premier '>' et en utilisant la différence entre les positions du premier '>' et du prochain '<', avec gestion d’erreurs.
En cas de balises multiples dans une même cellule, certains échanges soulignent qu’il faut adapter la formule pour cibler chaque paire et prévoir des messages d’erreur lorsque des balises manquent.

Généré automatiquement par IA
sur la base des meilleures réponses
  1. Fahora Messages postés 949 Statut Membre 68
     
    Bonjour ,

    A quoi ressemble tes balises ?

    Du type <...> </...> :

    =SIERREUR(STXT(Feuil1!A2;TROUVE(">";Feuil1!A2)+1;TROUVE("<";Feuil1!A2;TROUVE(">";Feuil1!A2))-(TROUVE(">";Feuil1!A2)+1)))

    Cordialement,

    Nos seules limites sont celles que nous nous imposons nous-même.
    La politesse et un merci ne tuent pas. Il existe un bouton pour "Résolu" pour confirmer que     votre problème n'en est plus un. Fahora
    0
  2. Saween
     
    J'ai exactement plusieurs balises dans une même cellule correspondant à

    <Cause></Cause>
    <Pblm></pblm>
    Etc..
    Environ 10.

    Moi je veux récupérer uniquement ce qu'il y a entre ces balises.

    Sauf qu'il n'y a pas toujours le même nombre de caractère.
    0
    1. Fahora Messages postés 949 Statut Membre 68
       
      Donc ma solution est la bonne :)
      0
    2. Fahora Messages postés 949 Statut Membre 68
       
      Je l'explique :

      =SIERREUR(STXT(Feuil1!A2;TROUVE(">";Feuil1!A2)+1;TROUVE("<";Feuil1!A2;TROUVE(">";Feuil1!A2))-(TROUVE(">";Feuil1!A2)+1))) 


      TROUVE(">";Feuil1!A2)+1
      : trouve le 1er ">" et prend la position d'après.

      TROUVE("<";Feuil1!A2;TROUVE(">";Feuil1!A2))
      :

      trouve le 1er "<" qui suit le 1er ">"

      Il suffit alors de STXT en partant du 1er ">" , et de prendre le nombre de caractère qu'il y a entre les 2 d'où le "
      -(TROUVE(">";Feuil1!A2)+1)
      "
      0
    3. Saween
       
      Cela me dis "Vous avez tapé un nombre insuffisant d'arguments pour cette fonction".
      0
    4. Fahora Messages postés 949 Statut Membre 68
       
      =SIERREUR(STXT(Feuil1!A2;TROUVE(">";Feuil1!A2)+1;TROUVE("<";Feuil1!A2;TROUVE(">";Feuil1!A2))-(TROUVE(">";Feuil1!A2)+1));"")

      C'est de ma faute , j'ai oublié de rajouter la fin... Désolé :) , voila qui devrait fonctionner.
      0
    5. Saween
       
      Sauf que toutes mes balises contiennent des "<"Cause">" Cela ne vas pas les différencier.
      0