Extraire du texte entre 2 mots dont la mise en forme est...aléatoire

Bonjour à tous,

cherchant à extraire des éléments de texte d'une cellule, je suis tombé sur ce fil de discussion:

https://forum.excel-pratique.com/excel/extraire-texte-entre-2-caracteres-different-91593

Bien que ressemblant en partie à ce que je souhaite faire, les propositions faites ne répondent pas tout à fait à mon besoin spécifique...

J'ai une longue suite d'informations aéronautiques (des NOTAM) dans une cellule, pas toujours "formatées" de la même façon, et il y a certains éléments que j'aimerais pouvoir faire ressortir dans une cellule à côté, histoire de bien faire ressortir ces données, pour exploitation ultérieure...
Mes cellules présentent ce type de données (pas forcément organisées ainsi, mais dans les grandes lignes, c'est ça)

P0285/19 NOTAMN
Q) LFBB/QOBCE/IV/M /E /000/022/4500N00200E001
A) LFBB B) 1902061119 C) PERM
E) MEASURING MAST AT CAMPS SAINT MATHURIN LEOBAZELS - RDL288/19.4NM
LFLW ARP :
- PSN : 450024N 0015959E
- HEIGHT : 262FT
- ELEV : 2143FT
- LIGHTING : H24

Je souhaiterais avoir les informations PSN, HEIGHT, ELEV et LIGHTING chacun dans sa cellule...
SACHANT:
Que des fois il y a le "-" devant les intitulés, des fois non, qu'il peut y avoir plusieurs espaces entre les intitulés ou informations et les ":", que l'information "PSN" se terminera par E ou par W (ce sont des coordonnées GPS), que les rédacteurs de ces NOTAM écrivent parfois HGT à la place de HEIGHT...

Je souhaiterais également que les informations entre "E)..." et PSN soient également à part.

Bref, j'avoue que ça fait un peu trop de variables pour que j'arrive à bien visualiser mes formules de tri...

J'arrive, tant bien que mal à extraire les éléments HEIGHT & PSN du reste du tableau, mais la moindre "interférence", espace superflu, mot écrit différemment m'oblige à rajouter un SUBSTITUE à un liste qui s'allonge, ou me sort un #VALEUR que je ne sais pas encore résoudre...

Quant au VBA, je sais que ça existe, j'arrive à recopier des trucs, mais je ne comprends malheureusement rien à ce langage.

Je tâtonne, pour le plaisir d'y arriver tout seul, mais des fois, il faut savoir appeler à l'aide...

En vous remerciant, déjà d'avoir tout lu, et peut-être compris mes soucis, et éventuellement du coup de main.

Steph

Salut,

Pour ce faire je pense que tes amis sont les expressions régulières. Je suis loin d'être un expert envers celles-ci mais par exemple pour ressortir cette chaine - PSN : 450024N 0015959E tu peux utiliser cette expression régulière minimaliste \- +PSN +: +(\d{6,8}N +\d{6,8}E|W) entre parenthèse se trouve la chaine qui va être capturée, Tu peux tester tes expressions sur ce site tu as aussi un tas d'exemples et une aide rapide. en bas à droite.

Bonjour Steph et bienvenue !

Pour trouver une solution à ce type de demande, il faut pouvoir déterminer une règle ... mais d'emblée, tu nous dis que les indications que tu donnes ne sont pas toujours respectées (espaces multiples, présence/absence des '-', HGT à la place de HEIGHT)
Rien ne dit qu'un de tes rédacteurs ne mélange les lettres de LIGHTING et des autres termes recherchés !

Si tu peux identifier tous les cas de figure, peut-être une solution sera-t-elle envisageable (par formule ou macro, la première chose à garantir, c'est la cohérence et l'uniformité des données ... imaginer toutes les libertés que les rédacteurs pourraient prendre au moment de l'encodage, on n'y arrivera jamais !

[Edit :] salut Jean-Paul

Bonsoir,

une proposition via une fonction personnalisée. Mais comme je ne sais pas à quoi ressemblent tes données (une seule ligne, plusieurs lignes, une cellule, plusieurs cellules) j'ai fait l'hypothèse que l'info se trouve dans plusieurs cellules à raison d'une ligne par cellule.

la fonction extraire (plage,libellé), parcourt la plage de cellule à la recherche du libellé et renvoie les caractères qui suivent. Si un libellé peut être orthographié de plusieurs manières, le libellé doit contenir les variantes séparées par le caractères /.

Ceci dit, cela reste très aléatoire comme l'ont judicieusement fait remarquer U.Milité et Jean-Paul.

4extraire.xlsm (15.37 Ko)

Bonjour à tous, et merci pour ces réponses rapides

Pour répondre à ta question, H2SO4, ces données sont, malheureusement, dans une seule cellule... l'intégralité du texte mis en exemple provient de G6 et suivantes...

Et oui, U.Milité, si on était sûr de "l'orthographe" des données, ce serait tellement plus simple... Mais à la base, ces textes restent tapés par des humains qui ont encore, dieu merci, le droit à l'erreur...😉

Je vais regarder en détail vos suggestions.

Merci beaucoup

bonjour,

Pour répondre à ta question, H2SO4, ces données sont, malheureusement, dans une seule cellule... l'intégralité du texte mis en exemple provient de G6 et suivantes...

merci de mettre un fichier avec quelques exemples.

Pour faire simple, je récupère ça sur le site de la FAA (administration aéronautique US).

C'est déjà en format xls, ce qui me facilite un peu la vie, pour l'instant...

Le but est d'avoir les différentes informations (Ligne E, PSN, Height, ELEV...) chacune dans sa case, que je puisse réexploiter ça ensuite pour l'afficher sur une carte (PSN, ce sont des coordonnées)...

Il existe des sites qui font ça, mais leur affichage ne correspond pas tout à fait à mon attente...

J'avais lu quelque partt que rien n'était impossible avec Excel...

Et en attendant, avec tous les trucs que j'essaie, les formules que je découvre, via les forums ou en tâtonnant, c'est fou ce que je progresse...

Et c'est grâce à vous.

Merci

bonjour,

voici la fonction adaptée à ton fichier.

9extraire.xlsm (156.33 Ko)

Bonjour HSO4, bonjour tout le monde.

Pardon pour ma réponse tardive, je n'ai pas eu la possibilité de me pencher dessus plus tôt.

Un grand merci pour l'aide apporté.

Autodidacte dans beaucoup de choses (dont Excel), je suis fana d'apprendre de nouvelles méthodes.

Si je comprends bien la formule EXTRAIRE telle qu'elle est utilisé dans ton fichier, elle ne va afficher QUE ce qui se trouve dans la cellule #1, MAIS, qui se trouve apparaitre APRES ce qui est dans la cellule #2...

Vu comme ça, c'est brillant... J'avais bien pensé à un truc de ce style, mais quand on connais pas le solfège, c'est pas évident d'apprendre tout seul.

Merci beaucoup.

Stéphane

bonjour,

Si je comprends bien la formule EXTRAIRE telle qu'elle est utilisée dans ton fichier, elle ne va afficher QUE ce qui se trouve dans la cellule #1, MAIS, qui se trouve apparaitre APRES ce qui est dans la cellule #2...

exact, mais avec la précision suivante : APRES ce qui est dans la cellule #2, jusqu'au première caractère de passage à la ligne (chr(10))

Bonjour,

Peut-être, pour le PSN, si la fonction FILTRE.XML est supportée par Excel 2007 :

=GAUCHE(SUBSTITUE(SUBSTITUE(INDEX(FILTRE.XML("<M><R>"&SUBSTITUE(A1;"PSN";"</R><R>")&"</R></M>";"//R");2);" ";"");":";"");SIERREUR(CHERCHE("e";SUBSTITUE(SUBSTITUE(INDEX(FILTRE.XML("<M><R>"&SUBSTITUE(A1;"PSN";"</R><R>")&"</R></M>";"//R");2);" ";"");":";""));CHERCHE("w";SUBSTITUE(SUBSTITUE(INDEX(FILTRE.XML("<M><R>"&SUBSTITUE(A1;"PSN";"</R><R>")&"</R></M>";"//R");2);" ";"");":";""))))

Daniel

Rechercher des sujets similaires à "extraire texte entre mots mise forme aleatoire"