Formule pour extraire du texte de plusieurs lignes

MarkusMiller

XLDnaute Nouveau
Bonjour,

Je rencontre quelques soucis pour effectuer une certaine opération d'extraction de texte dans un fichier excel

Voici le texte :
:70E::ADTX//++ ADDITIONAL INFORMATION
++++++ NEW INFORMATION DATED
12 APRIL 2011 ++++
.
AS PER INFORMATION FROM THE
AGENT, PLEASE NOTE THAT FOR
THIS ISSUE THE PRICE IS NOW
MONITORED DAILY TO SEE IF THE
CONVERSION OPTION HAS BEEN
TRIGGERED. IT HAS SO FAR NOT
:70E::ADTX//MET REQUIREMENTS AND SO IS
NOT CONVERTIBLE AT PRESENT.
.
+++DATED 06JAN11+++
.
PLEASE BE ADVISED THAT THE
CONVERSION IS NOT APPLICABLE
THIS QUARTER FROM 01JAN11
UNTIL 31MAR11 AS THE
CONDITIONS HAVE NOT BEEN MET.

Dans une seule et même cellule je souhaiterai récupérer le texte situé entre :70E:: et la balise suivante :70E::
Le texte se situe sur plusieurs lignes excel
Pour l'instant j'ai la formule
=SI(ESTNA(DROITE(RECHERCHEV("*" & ":70E::" & "*";Message!A:A;1;FAUX);3))=VRAI;"";STXT(RECHERCHEV("*" & ":70E::" & "*";Message!A:A;1;FAUX);7;50))
résultat = ADTX//++ ADDITIONAL INFORMATION

Il faudrait inclure également la formule =recherchev
résultat attendu = dans une cellule avoir ADTX//++ ADDITIONAL INFORMATION ++++++ NEW INFORMATION DATED 12 APRIL 2011 ++++ etc....
Voilà je sais c'est pas trés clair, j'en suis désolé

Merci d'avance pour vos réponses
 

JNP

XLDnaute Barbatruc
Re : Formule pour extraire du texte de plusieurs lignes

Bonjour MarkusMiller et bienvenue :),
J'avoue que par formule, je suis un peu sceptique, mais j'ai déjà vu des miracles sur XLD :rolleyes:...
En attendant, une proposition par fonction VBA, en espérant qu'elle tournera sur 2002 :p...
Bonne suite :cool:
 

Pièces jointes

  • Balise.xls
    35.5 KB · Affichages: 77

JNP

XLDnaute Barbatruc
Re : Formule pour extraire du texte de plusieurs lignes

Re :),
Le plus simple, tu ouvres mon fichier et le tien en même temps.
Tu tapes Alt+F11 afin d'ouvrir l'éditeur VBA.
Tu tapes Ctrl+r pour afficher l'explorateur de projet.
Dans l'arbre qui ressemble à l'explorateur Windows, tu dois voir mon fichier et le tien. Tu ouvres les + pour pouvoir afficher dans mon fichier Module1 et tu le glisses vers ton fichier.
La fonction sera accessible comme les autres fonctions de feuilles dans ton fichier.
La nomenclature est =markus(La plage que tu veux analyser;la balise que tu cherches entre doubles cotes)
Bon courage :cool:
 

MarkusMiller

XLDnaute Nouveau
Re : Formule pour extraire du texte de plusieurs lignes

Merci beaucoup, oui ca marche dans mon fichier de travail.
Par contre, j'ai bien le texte désiré situé entre la 1ere :70E:: et la seconde mais pas la seconde série de balise :
:70E::ADTX//MET REQUIREMENTS AND SO IS
NOT CONVERTIBLE AT PRESENT.
.
+++DATED 06JAN11+++
.
PLEASE BE ADVISED THAT THE
CONVERSION IS NOT APPLICABLE
THIS QUARTER FROM 01JAN11
UNTIL 31MAR11 AS THE
CONDITIONS HAVE NOT BEEN MET.

Cela marche en faisant recopier vers le bas, mais je souhaiterai que cette opération soit automatique et se répète pour chaque nouveau message

Je souhaiterai avoir un rendu comme celui ci=
colonne 1 Texte #1 ADTX//++ ADDITIONAL INFORMATION++++++ NEW INFORMATION DATED 12 APRIL 2011 ++++. AS PER INFORMATION FROM THE AGENT, PLEASE NOTE THAT FOR THIS ISSUE THE PRICE IS NOW MONITORED DAILY TO SEE IF THE CONVERSION OPTION HAS BEEN TRIGGERED. IT HAS SO FAR NOT
colonne 2 Texte #2
ADTX//MET REQUIREMENTS AND SO IS NOT CONVERTIBLE AT PRESENT..+++DATED 06JAN11+++. PLEASE BE ADVISED THAT THE CONVERSION IS NOT APPLICABLE THIS QUARTER FROM 01JAN11 UNTIL 31MAR11 AS THE CONDITIONS HAVE NOT BEEN MET.

de facon automatique

Je sais, c'est pas trés clair
 

MarkusMiller

XLDnaute Nouveau
Re : Formule pour extraire du texte de plusieurs lignes

Merci JNP mais fait pas une surchauffe!

Oui c'est complexe, je le conçois. La méthode par VBA me parait la bonne, la solution par une formule me parait impossible effectivement.

En tout cas merci bcp JNP pour tes recherches
 

david84

XLDnaute Barbatruc
Re : Formule pour extraire du texte de plusieurs lignes

Bonjour à tous,
Je sais, c'est pas trés clair
Pour que ce soit clair, je te propose de nous placer toi-même sur un fichier exemple :
- les données à traiter
- à côté les résultats attendus inscrits manuellement.
Je pense que cela nous fera gagner de temps et nous aidera à mieux comprendre ta demande.
A+
 

hoerwind

XLDnaute Barbatruc
Re : Formule pour extraire du texte de plusieurs lignes

Bonjour, salut les autres,

J'attends également un petit fichier avant de m'y mettre ... par formule.

Mon idée est la suivante :
Faire appel à la fonction complémentaire MCONCAT de Morefunc pour concaténer l'ensemble des lignes à traiter.
A défaut, concaténer de façon traditionnelle (un peu plus long) et nommer cette formule.
Ensuite un STXT devrait renvoyer le résultat souhaité.
Extraire différentes parties dans des colonnes différentes ne devrait pas poser problème.
 

JNP

XLDnaute Barbatruc
Re : Formule pour extraire du texte de plusieurs lignes

Re :),
Je pense que l'idée d'Hoerwind devrait fonctionner (sachant que MoreFunc est quand même basé sur du VBA :rolleyes:).
Je ne peux pas tester car MoreFunc n'a pas été remis à jours pour 64 bits :eek:...
Sinon, après une bonne nuit de sommeil, les idées sont plus claire, et au lieu de transformer ma première fonction, j'en ait écrit une 2[SUP]ème[/SUP] qui parait faire ce que tu souhaites :p...
Code:
Function Markus2(Plage As Range, Balise As String, Position As Integer) As String
Dim Cellule As Range, MaString As String, Tablo
For Each Cellule In Plage
MaString = MaString & " " & Cellule
Next Cellule
Tablo = Split(MaString, Balise)
If Position <= UBound(Tablo) Then Markus2 = Tablo(Position)
End Function
avec en B1
Code:
=markus2($A$1:$A$21;":70E::";LIGNES($1:1))
à glisser vers le bas ;)...
Par contre, si tu travailles sur des milliers de lignes, aucune garantie, ni sur la vitesse, ni que la String n'explosera pas :eek:...
Bonne suite :cool:
 

hoerwind

XLDnaute Barbatruc
Re : Formule pour extraire du texte de plusieurs lignes

Bonjour, salut les autres,

En attendant la pièce jointe j'ai fait quelques tests par formules, cela fonctionne, mais ...

La fonction Mconcat est limitée à 254 caractères (je l'avais perdu de vue), donc elle ne peut être employée tel que je me proposais de le faire, mais bien en couplant uniquement le nombre de lignes entre deux :70E:: et ceci par l'intermédiaire d'une colonne intermédiaire.
C'est faisable, mais la première extraction fait déjà 248 caractères.
D'où la question : il y a-t-il des extractions supérieures à 254 caractères par lignes couplées ?

Il est normal que la deuxième chaine de caractères ne soit pas extraite sous les propositions faites, puisque la question est : récupérer le texte situé entre :70E::, mais c'est faisable sans problème.

Est-ce le hasard que sous l'exemple (#1) les :70E:: se trouvent toujours en début de ligne, ou peuvent-ils se trouver au milieu d'une ligne, et que faut-il faire dans ce cas ?

En pièce jointe, une première approche, à finaliser sur base d'un petit fichier joint reprenant tous les cas de figure.

Si on ne croise plus avant l'année prochaine, bon réveillon à vous tous.
 

Pièces jointes

  • ConcatenerEntreBalises.xls
    20 KB · Affichages: 58

JNP

XLDnaute Barbatruc
Re : Formule pour extraire du texte de plusieurs lignes

Re :),
Comme dit précédemment, je ne peux pas charger MoreFunc et tester la proposition d'Hoerwind, par contre, je n'ai pas eu l'impression que le limite de ma fonction soit de 254 carctères, mais bon, je soulevais le même problème de longueur de chaîne :rolleyes:...
Bon réveillon :cool:
 

MarkusMiller

XLDnaute Nouveau
Re : Formule pour extraire du texte de plusieurs lignes

bonjour à tous

Bonne année à vous tous, merci pour vos réponses!
, tout d'abord je tenais à vous dire que vous êtes impressionnants, Excel n'a plus de secret pour vous! et vraiment merci pour vos retours, je sais que ce que je demande est loin d'etre evident

voilà j'ai fait un pti fichier excel pour présenter mon problème
dans la colonne A, les données que je dois traiter, elles seront tjrs dans la colonne A
A coté vous trouverez le résultats espérés
Extraire toutes les données aprés le :70E:: qui peuvent se situer sur plusieurs lignes et les recopier en ligne comme dans l'exemple
le nombre de caractère après le :70E:: est aléatoire (en réalité c'est du texte libre)
il peut y avoir par message un nombre aléatoire de :70E::

je traite des milliers de messages structurés comme dans l'exemple, je souhaiterai donc une méthode pour extraire les données de facon automatique

En espérant vous aider davantage,
Merci
 

Pièces jointes

  • exemple markus.xls
    19.5 KB · Affichages: 65
  • exemple markus.xls
    19.5 KB · Affichages: 64
  • exemple markus.xls
    19.5 KB · Affichages: 73

Statistiques des forums

Discussions
312 424
Messages
2 088 286
Membres
103 808
dernier inscrit
qsfdhqzsfg