Extraire d'une cellule une donnée texte variable entre deux repères fixes

Bonjour

j'ai une petite question dans laquelle je pédale un peu.

Je dois contrôler un ensemble de données textes dans une colonne où elles sont rassemblées les unes derrière les autres séparées par un repère clair de leur nature;

Voici le contenu de la colonne de mon fichier, pour un article donné, regroupant les caractéristiques différentes d'un produit, toujours avec les mêmes séparateurs:

Conditionnement: T[Verrine]; Région: S[Aquitaine]; DLUO: T[36 m]; Code douane: T[21039090]; Composition: T[Mangue* (60 %), sucre de canne*, jus concentré de citron*, gélifiant : pectine de fruits. * Produits issus de l’Agriculture Biologique - Allergènes: -]; Marque: E[SAVEURS ATTITUDES]; Valeurs nutritionnelles: T[Energie (kCal/100g): 224 - Matière grasse/Acides gras (g/100g): 0,2/0,1 - Glucides/Sucres (g/100g): 55,2/54,5 - Protéïnes (g/100g): 0,5 - Sel (g/100g): 0,0036 - Fibres (g/100g): 1,1]; Poids: O[220]

J'ai besoin d'extraire de chacune de ces lignes de chaque cellule de mon fichier, pr exemple tous les conditionnements de mes produits; ici "Verrine"

Ce mot démarre, derrière Conditionnement, toujours à "dernier caractère + 5 ou à +1 après Conditionnement: [

"Conditionnement: [ " + 1 est la position du premier caractère recherché.

MAIS je ne connais pas sa longueur; donc je dois repérer la fin de la zone ou il se trouve qui est forcément définie à 4 caractères DEVANT le R de Région (Région - 4 est la position du dernier caractère de mon mot que je cherche.

Enfin, je dois donc reconstituer le "texte" qui est défini entre ces deux positions.

Donc je dois chercher les mots Conditionnement et Région, Composition et Allergènes, Allergènes et Marque, Valeurs nutritionnelles et Poids, pour extraire mes 4 données:

> le conditionnement

> la composition

> les allergènes (ici il n'y en a pas)

> les valeurs nutritionnelles, la donnée de fin étant Poids

Je n'arrive pas à l'écrire, qqn a une idée simple et rusée ?

Toutes les séquences des données en gras sont les mêmes, ds le même ordre bien sûr.

Bonsoir,

une proposition via fonction personnalisée "extrait"

Function extrait(texte, cle, Optional del1 = "[", Optional del2 = "]") As String
    t = Replace(texte, Chr(160), Chr(32)) 'remplace espace insécable
    t = extr(t, cle, del2) ' on extrait la chaine entre la clé et del2
    extrait = extr(t & del2, del1, del2)'on extrait de l'extrait, la chaine entre del1 et del2
End Function

Function extr(r, del1, del2) As String
    'extraire chaine entre 2 chaines
    On Error Resume Next
    fl = InStr(r, del1)
    efl = InStr(fl, r, del2)
    extr = Mid(r, fl + 1, efl - fl - 1)
    On Error GoTo 0
End Function

Bonsoir acide sulfurique !

(vaut mieux ça que le sulfure d'hydrogène)

je te remercie.

Dans un premier temps car l'utilisation devait être unique, je cherchais une formule et pas encore en VB.

Par contre, c'est franchement top, mais pourquoi ds ton exemple; Allergènes qui est une "balise" au sens de repère, sort sur la ligne 5 de composition ?

Je pige pas pourquoi ?

Bonjour,

Par contre, c'est franchement top, mais pourquoi ds ton exemple; Allergènes qui est une "balise" au sens de repère, sort sur la ligne 5 de composition ?

Sans doute parce que dans la structure de ce texte, allergènes est considéré comme faisant partie de la composition. regarde les parenthèses carrées ouvrantes et fermantes. Je ne savais pas comment traiter ce cas.

Il suffit d'adapter la formule.

Tu as raison ! elles manquent ! ..les parenthèses.

J'ajoute l'article suivant en référence pour ceux qui veulent pas utiliser le VB:

https://www.cours-gratuit.com/tutoriel-excel/tutoriel-excel-comment-extraire-du-texte-dune-cellule#:...,extraire%20le%20texte%20de%20droite.

Rechercher des sujets similaires à "extraire donnee texte variable entre deux reperes fixes"