Supprimer la ligne numero n d'un fichier texte .txt

Contenu du snippet

Ce code supprime la ligne désirée d'un fichier texte.

Le principe
>Création d'un fichier texte temporaire vide dans le même répertoire que le fichier cible
>Ouverture du fichier cible
>Ouverture du fichier temporaire de destination
>Lecture ligne par ligne du fichier source
>écriture de toutes les lignes lues sauf celle précisée dans le fichier de destination
>fermeture des fichiers
>Supression du fichier cible
>renommage du fichier de destination avec le nom du fichier cible

J'utilise 2 fonctions complémentaires
> La première propose un chemin complet ("aborescence de répertoire + nomfichier") pour le fichier .txt temporaire à partir du chemin complet du fichier .txt cible
> La seconde compte le nombre de ligne du fichier cible, ce qui permet à l'utilisateur de supprimer "réellement" une ligne

Source / Exemple :


Function Chemin_nouveau_fichier(Chemin_complet As String)
Dim TEMP As String
Dim NbOC As Integer
Dim compteur as integer

'compte le nombre de caractère dans une chaîne
NbOC = (Len(Chemin_complet) - Len(Replace(Chemin_complet, "\", "", , , 1))) / Len("\")
TEMP = Chemin_complet
For compteur = 1 To NbOC
TEMP = Mid(TEMP, InStr(1, TEMP, "\") + 1)
Next
Chemin_nouveau_fichier = Left(Chemin_complet, Len(Chemin_complet) - Len(TEMP) - 1) & "\TEMP_" & TEMP
End Function

'///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Function compte_ligne(Chemin_complet As String)
On Error GoTo ANNULER 'pour traiter(sommairement)
'les erreurs
Open Chemin_complet For Input As #1
While Not EOF(1)
Line Input #1, texte
NbLignes = NbLignes + 1
Wend
Close #1
compte_ligne = NbLignes
ANNULER:
End Function

'///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Sub suppr_ligne_TXT()

Dim text As String
Dim tmp As String
Dim N°ligne As Variant
Dim nbre_ligne_fichier As Integer

Dim CHEMIN_COMPLET_TXT As String
Dim CHEMIN_COMPLET_NOUVEAU_TXT As String

CHEMIN_COMPLET_TXT = "C:\Documents and Settings\test.txt"
CHEMIN_COMPLET_NOUVEAU_TXT = Chemin_nouveau_fichier(CHEMIN_COMPLET_TXT)

'INPUTBOX "INTELLIGENTE" QUI DONNE LE NOMBRE DE LIGNE
nbre_ligne_fichier = compte_ligne(CHEMIN_COMPLET_TXT)
N°ligne = 0
While N°ligne > nbre_ligne_fichier Or N°ligne < 1
N°ligne = InputBox("Numéro de la ligne à supprimer?" & Chr(10) & "Entre 1 et " & nbre_ligne_fichier & "", "SAISIE")
If N°ligne = "" Then Exit Sub
N°ligne = CInt(N°ligne)
Wend

'N°ligne = VARIABLE_X

'CREATION FICHIER TEMPORAIRE
Set FSys = CreateObject("Scripting.FileSystemObject")
Set MonFic = FSys.CreateTextFile(CHEMIN_COMPLET_NOUVEAU_TXT)

'FERMETURE FICHIER TEMPORAIRE
MonFic.Close

'ouverture des 2 fichiers texte
Open CHEMIN_COMPLET_TXT For Input As 1#
Open CHEMIN_COMPLET_NOUVEAU_TXT For Output As 2#

'LECTURE "CONDITIONNELLE" DU FICHIER SOURCE ET ECRITURE DANS LE NOUVEAU FICHIER
compteur = 0
While Not (EOF(1) Or False)
compteur = compteur + 1
Input #1, text
If compteur = N°ligne Then Else Print #2, text   '> print est utilisé pour éviter les guillemets apparaissant avec .write
Wend

'fermeture des 2 fichiers texte
Close #1
Close #2

'Supprmime le fichier SOURCE
Kill CHEMIN_COMPLET_TXT
'Renomme le fichier TEMP(et donc remplace le fichier SOURCE)
Name CHEMIN_COMPLET_NOUVEAU_TXT As CHEMIN_COMPLET_TXT

'If N°ligne > nbre_ligne_fichier Or N°ligne < 1 Then MsgBox "Procédure exécutée avec succès, mais sans effet!", vbInformation, "Message"

End Sub

Conclusion :


Merci à cqui789 et yocrita pour leur fonction qui compte le nombre de caractères dans une chaîne.

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.