Effacer une ligne dans un fichier texte [Résolu]

Signaler
Messages postés
13
Date d'inscription
mardi 27 avril 2004
Statut
Membre
Dernière intervention
31 août 2006
-
Messages postés
13
Date d'inscription
mardi 27 avril 2004
Statut
Membre
Dernière intervention
31 août 2006
-
Bonjour,

(je fais des macros sous VBE Excel)
Je ne parviens pas à trouver comment effacer une ligne précise dans un fichier en .txt

je sais écrire à la fin avec .WriteLine
je sais tout lire grâce à .ReadAll

mais comment faire pour, par exemple, supprimer les 3 premières ligne sdu fichier texte à l'aide d'une macro ou comment supprimer une ligne précise (autre que la dernière ligne ! )

Merci pour votre aide.

6 réponses

Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
47
Salut,


Essaie ceci. j'espere que cela t'aidera.










Dim Fso  As New FileSystemObject 
Dim TStream As TextStream 
Dim Contenu As String 
Dim Lignes() As String 
Dim i As Integer 

Set TStream =  Fso.OpenTextFile("C:\2.txt", ForReading) 
'On lit tout d'un coup
Contenu = TStream.ReadAll 
Call TStream.Close 
'On recupere toutes les lignes grace a la fonciton Split
Lignes = Split(Contenu, vbCrLf) 

'[.. operation sur tes lignes]
'Lignes(0) = Premiere ligne
'Lignes(1) = Seconde ligne...
'... Lignes(Ubound(Lignes)) = Derniere ligne
'Ne pas oublier de décaler les lignes vides redimensionner le tableau
'OU bien n'ecrire que les lignes non vides

Set TStream = Fso.OpenTextFile("C:\2.txt", ForWriting) 

For i =  LBound (Lignes) To UBound(Lignes) 
    Call TStream.WriteLine(Lignes(i)) 
    'OU    If Lignes(i) <> "" Then Call TStream.WriteLine(Lignes(i))
Next 
Call TStream.Close 
Set TStream  = Nothing 
Set Fso = Nothing 
 







<small> Coloration syntaxique automatique [AFCK]</small>

       







 






@+, Julien
Messages postés
13
Date d'inscription
mardi 27 avril 2004
Statut
Membre
Dernière intervention
31 août 2006

Edit :
Le but final étant de tout copier le fichier texte sauf les 3 premières lignes.
plutôt que de supprimer les 3 premières lignes, existe-t-il une solution qui permettrait de copier toutes les lignes sauf les 3 premières ?
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
47
Re pas vu ton dernier post.


Dans ce cas la boucle d'écriture


passe de For i =   LBound (Lignes) To UBound(Lignes) 

A For i  = 2 To UBound(Lignes) '2 Car l'indice du tableau commence a 0






@+, Julien
Messages postés
13
Date d'inscription
mardi 27 avril 2004
Statut
Membre
Dernière intervention
31 août 2006

Merci pour avoir répondu si rapidement ...

Je suis en train d'essayer ta solution mais la procédure bloque sur

Dim Fso  As New FileSystemObject

message d'erreur : "Erreur de compilation : Type défini par l'utilisateur non défini"

(j'utilise Excel 2000 sous WinNT)
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
47
Salut,
J ai mis en référence au projet Microsoft Scripting Runtime.
Mais comme dans le premier post tu parlais de .ReadAll et WriteLine (methodes du textstream) je pensais que tu l'avais ajouter comme référence aussi.

@+, Julien
Messages postés
13
Date d'inscription
mardi 27 avril 2004
Statut
Membre
Dernière intervention
31 août 2006

(désolé, je suis débutant et j'ai pas bien compris ton explication pourquoi ça marchait pas !)

Toujours est il que j'ai réussi à faire ce que je demandais grâce à

Lignes = Split(Contenu, vbCrLf)

et

For i = LBound(Lignes) To UBound(Lignes) 
    Call TStream.WriteLine(Lignes(i)) 
    'OU    If Lignes(i) <> "" Then Call TStream.WriteLine(Lignes(i))
Next 

Comme j'avai des erreurs de compilations avec les Fso ... j'ai bidouillé avec d'autres solutions pour m'en sortir mais la tienne fonctionne sûrement

je te remercie pour ton aide