Importation à partir d'un txt

gribouillex Messages postés 172 Date d'inscription lundi 10 octobre 2005 Statut Membre Dernière intervention 16 mai 2011 - 7 juil. 2006 à 23:11
Dolphin Boy Messages postés 630 Date d'inscription vendredi 5 mai 2006 Statut Membre Dernière intervention 17 février 2007 - 8 juil. 2006 à 12:05
bonjour,

Voilà, j'ai un fichier txt assez gros et j'aimerais importer dans une feuille excel une petite partie du texte.
Pour savoir à partir d'où je souhaite effectuer l'importation, il faut faire une recherche du mot "REPERE" qui n'apparaît qu'une fois dans le fichier et qui est contenu dans la première ligne à importer. L'extrait à importer se termine à la première ligne où se trouve le mot "END".

Voici un extrait du fichier txt :
------------------
blabla
blabla
blabla
cette ligne contient le mot REPERE qui va permettre de savoir à partir d'où l'importation va débuter
tralala
tralala
tralala
on s'arrête à cette ligne qui contient le mot END (attention on peut trouver ce même mot plusieurs fois plus loin... )
blabla
blabla
blabla
------------------

Ensuite, une fois mon traitement sous excel terminé, les nouvelles données doivent retourner dans le fichier en lieu et place des précédentes, sachant qu'il y aura plus de lignes qu'à l'origine.

exemple, ces 7 lignes viendront remplacer les 5 précédentes :
------------------
cette ligne contient le mot REPERE qui va permettre de savoir à partir d'où l'importation va débuter
tralala tsoin tsoin
tralala tsoin tsoin
tralala tsoin tsoin
tralala tsoin tsoin
tralala tsoin tsoin
on s'arrête à cette ligne qui contient le mot END (bien que l'on puisse trouver plus loin ce même mot)
------------------

La question : comment écrire ces deux codes... j'ai essayé et je ne trouve pas....

Merci pour toute aide précieuse....

3 réponses

gribouillex Messages postés 172 Date d'inscription lundi 10 octobre 2005 Statut Membre Dernière intervention 16 mai 2011
7 juil. 2006 à 23:17
PS : j'ai essayé de poster ceci dans la catégorie VBA, et apparement ca n'a pas marché....
merci à tout modérateur de transférer ci possible.....
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
8 juil. 2006 à 01:08
Salut
Si si, tu es bien dans la catégorie VBA  ;-)

Comme toujours il faut décomposer ce que tu as faire (accroche toi) :
- Ouvrir le fichier : Open monFichier For Binary As #1
- Préparer unevariable de même longueur avant :  Temp$ = String(LOF(1), "x")
- Lire le contenu entier du fichier dans une variable : Get #1, , Temp$
- Fermer le fichier : Close #1
- Rechercher le REPERE : Position = Instr(1, Temp$, "REPERE")
- Mémoriser la position du début : MemoDebut = Position
- Rechercher le END : Position = Instr(MemoDebut, Temp$, "END")
- Mémoriser la position de la fin : MemoFin = Position
- Isoler le texte : Texte$ = Mid$(Temp$, MemoDebut, MemoFin - MemoDebut)
- Envoyer le texte à ta macro pour lui faire ce qu'elle veut : Call maMacro(Texte$)
Attention : Si tu veux que la variable Texte$ revienne avec les modifs apportées dans ta macro, il faut impérativement déclarer le paramètre Texte en ByRef, exemple :
Public Sub maMacro(By Ref monTexte As String)

Pour réécrire le fichier, c'est pareil, mais à l'envers
- Remettre le Texte modifié à l'intérieur de la variable qui contient le contenu du fichier :
   Temp$ = Left$(Temp$, MemoDebut - 1) & Texte$ & Mid$(Temp, MemoFin + 1)
- Ouvrir le fichier : Open monFichier For Binary As #1
- Ecrire le contenu entier du fichier : Put #1, , Temp$
- Fermer le fichier : Close #1

C'est pas trop mon habitude de fournir du "prémaché" mais là, j'étais en manque de code,

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Champion du monde de boule de cristal - 2005
Le savoir est la seule matière qui s'accro
0
Dolphin Boy Messages postés 630 Date d'inscription vendredi 5 mai 2006 Statut Membre Dernière intervention 17 février 2007
8 juil. 2006 à 12:05
Salut, je me permet d'apporter une petite modif au code de Jack :

dim MotDebut as string
MotDebut="REPERE"
- Mémoriser la position du début : MemoDebut = Position + len(MotDebut)

Sinon le mot repere sera inclus dans le texte à isoler.
0
Rejoignez-nous