VBA: lire un fichier texte ligne par ligne 5



Après la fonction permettant de charger le contenu d'un fichier texte en VBA, voici le code VBA qui vous permettra de lire un fichier texte ligne par ligne.

Il suffit d'indiquer le chemin complet (chemin & nom) du fichier texte qui doit être traité  et le code effectuera une itération (Loop) dans le contenu du fichier en vous laissant facilement accéder à chaque ligne séparément. Ce code VBA est prêt à l'emploi – il suffit de le copier / coller dans votre Projet VBA et vous n'aurez qu'à ajouter votre code à exécuter pour chaque ligne (comptage, vérifications, copie des lignes spécifiques,…).

Ceci peut être très utile par exemple dans le cas où vous avez un fichier de données (.csv) et vous voulez travailler seulement avec certaines lignes. Le code VBA que je vous propose peut, entre autre, servir de base pour trier les données avant de les copier vers une Feuille Excel ou même avant d'en créer un nouveau fichier texte…

Lire et traiter un fichier texte ligne par ligne en VBA

Le code suivant est assez explicite et peut facilement être transformé en une fonction. Votre code VBA pour gérer les lignes doit être placé à l'endroit indiqué dans les commentaires (lignes: 18-19).

Sub LireFichierTexteParLigne()
'par: https://excel-malin.com

Application.ScreenUpdating = False
On Error GoTo CodeErreur

Dim IndexFichier As Integer
Dim MonFichier As String
Dim ContenuLigne As String

MonFichier = "C:\MonDossier\MonFichier.txt" '<-- mettez ici le nom du fichier à lire
IndexFichier = FreeFile()
Open MonFichier For Input As #IndexFichier 'ouvre le fichier

While Not EOF(IndexFichier) '
    Line Input #IndexFichier, ContenuLigne     ' lecture du fichier ligne par ligne: la variable "ContenuLigne" contient le contenu de la ligne active
    
    'ajoutez ici votre code à appliquer pour chaque ligne
    '...
    
Wend

Close #IndexFichier ' ferme le fichier
Application.ScreenUpdating = True
Exit Sub

CodeErreur:
MsgBox "Une erreur s'est produite..."
Application.ScreenUpdating = True
End Sub

Remarques pratiques sur la lecture des fichiers texte en VBA

Voici quelques remarques concernant l'utilisation de ce code:

    • Le "fichier texte", ne veut pas nécessairement dire un fichier avec suffixe .TXT. Il s'agit de tout fichier dont le contenu a la forme du texte lisible. Il peut donc s'agir des fichiers de données (comme per exemple .CSV), des pages web (.PHP ou .HTML), des fichiers journaux (.LOG ou autre) ou encore des fichiers XML
    • Pour éviter des erreurs lors de l'exécution de ce code, il peut être utile d'y ajouter la vérification si le fichier texte en question existe. Vous pouvez consulter ce tutoriel: VBA: Vérifier si le fichier existe
    • Ce code utilise le mode For Input pour accéder au contenu du fichier (plus sur la page Microsoft dédiée à ce sujet). Cela a deux avantages:
      1. vous pouvez lire le contenu même d'un fichier qui est déjà ouvert (par vous ou par un autre utilisateur)
      2. vous ne bloquez pas le fichier aux autres applications et / ou utilisateurs. Vous pouvez donc lire par exemple un fichier log sans craindre de le bloquer. Il peut continuer à être utilisé malgré que vous le lisiez…

Pour aller plus loin dans la gestion des textes en VBA

Voici quelques autres articles sur Excel-Malin.com qui pourraient vous être utiles:

 

 

36 0

 


Laissez un commentaire

Votre adresse de messagerie ne sera pas publiée.

5 commentaires sur “VBA: lire un fichier texte ligne par ligne

  • Antoine

    Bonjour,
    Un grand merci pour ce code! Assez bizarrement, le contenu de mon fichier texte initial contenait toujours un saut de ligne supplémentaire, avec une ligne vide, ce qui me faisait repasser une nouvelle fois dans la boucle. Le fichier était écrit via le presse-papier, bizarre.
    J'ai finalement résolu cela avec le code suivant: If (ContenuLigne "") Then…
    Encore merci!

  • Jeremy

    Bonjour,

    J'ai voulu utiliser cette fonction sur un fichier et il s'avère que j'ai un soucis au niveau du ligne par ligne. Pas cohérent avec les données à l'ouverture du fichier sur excel.

    Il me donne une valeur :
    a b c d

    Sur excel et wordpad j'ai :
    a
    b
    c
    d

    Mais si j'ouvre avec le bloc j'ai :
    a b c d

    Le problème vient il de mon fichier ou bien d'une option de cette fonction ?

    En vous remerciant par avance.

    Cordialement,
    Jérémy

    • excel-malin.com Auteur de l’article

      Bonjour Jérémy,
      il faudrait voir quel caractère se trouve entre les lettres.
      Normalement, le plus correct ce que vous pouvez voir, c'est dans le Notepad – il ne fait aucune "interprétation" du contenu et il l'affiche tel qu'il est exactement.
      Excel & Wordpad travaillent avec des formats et peuvent afficher le fichier "comme le plus correct leur semble" (peut-être c'est un caractère entre les lettres que Excel/Wordpad considère comme un retour à la ligne).
      Ma fonction travaille sur le même principe que le Notepad donc il est normal qu'elle affiche la même chose que ce que vous voyez en Notepad.

      Pour en avoir le cœur net, vous pouvez essayer d'ouvrir votre fichier dans un autre éditeur de texte pur (par exemple le Notepad++ qui est gratuit).
      Ou bien j'ai une autre idée. Changez le suffixe de votre fichier (.txt ou celui que vous utilisez) en ".html". Ensuite, ouvrez le fichier en double-cliquant dessus dans l'Explorateur de fichiers. Il va l'ouvrir dans le navigateur internet (Firefox, Chrome,…) et vous verrez ce qu'il affiche comme contenu…

      J'espère vous avoir aidé. Cordialement, Martin