IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Voir le flux RSS

Pierre Fauconnier

Ecrire dans un fichier texte en VBA

Noter ce billet
par , 14/09/2021 à 13h32 (5555 Affichages)
Salut.

Dans une récente discussion, l'utilisateur avait besoin d'écrire une ligne à la suite de lignes existantes dans un fichier texte...

Saisir "Ecrire dans fichier texte vba" dans Google amène 99.900 réponses à l'heure où j'écris ces quelques lignes. Il existe en effet sur la toile une quantité impressionnante de billets, Q/R ou vidéos qui expliquent cela... J'apporte ici ma modeste contribution à l'édifice...


On peut bien sûr retenir que pour écrire dans un fichier texte en VBA, il faut utiliser l'instruction Open assortie du nom du fichier et de la méthode d'écriture. Car oui, on peut écrire dans un fichier Texte en VBA de deux façons :
  • Remplacer le fichier existant;
  • Ecrire à la suite des lignes déjà présentes.


Ainsi, Open Filename For Output As Channel remplace le contenu du fichier, alors que Open Filename For Append As Channel écrit à la suite... Encore faut-il savoir qu'il faut obtenir un "numéro de fichier", c'est-à-dire une sorte de canal d'écriture. Vous trouverez souvent sur le net #1, mais il n'est pas certain que le "canal 1" soit libre. VBA met FreeFile à votre disposition qui renvoie le numéro du premier canal disponible.

Il ne faut pas oublier non plus de fermer le fichier (ou le canal) lorsque l'on a terminé d'écrire: Close #1 par exemple...

Il faut donc RETENIR (par coeur ou dans un OneNote ou EverNote) le code qui permet d'écrire dans un fichier texte en VBA:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
  Open "c:\data\temp\monfichier.txt" For Output As 1
  Print #1, "MonTexte"
  Close 1
Bon, ça, c'est pour écrire UNE ligne. Et si on veut en écrire plusieurs, comment fait-on? Deux solutions:
  • Le texte que l'on passe contient le(s) retour(s) à la ligne;
  • On passe autant de lignes qu'on veut entre l'ouverture et la fermeture du fichier.


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
  Open "c:\data\temp\monfichier.txt" For Output As 1
  Print #1, "Ma première ligne" & vbCrLf & "Ma deuxième ligne" & vbCrLf & "Ma troisième ligne"
  Close 1
ou bien

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
  Open "c:\data\temp\monfichier.txt" For Output As 1
  Print #1, "Ma première ligne"
  Print #1, "Ma deuxième ligne"
  Print #1, "Ma troisième ligne"
  Close 1



Bien entendu, il faut remplacer ce qui doit l'être par vos données (le nom du fichier, la méthode Output/Append, le numéro du canal)... => Ca, c'est ce que vous trouverez sur la toile.

Et si on s'en foutait? Si ça nous cassait les pieds de devoir se souvenir de cela? Et si On adoptait les bonnes pratiques en ayant une approche systématique de notre façon de coder? Dans un autre billet, je vous parle de fonctions génériques à stocker dans des modules, des bibliothèques de code, pour pouvoir les réutiliser dans tous vos projets.

Dès lors, plutôt que de noter un code dans un OneNote ou Evernote dans lequel vous ne le retrouverez pas, plutôt que de passer par une recherche Google pour retrouver pour la énième fois le code dont vous avez besoin, vous pourriez créer une fois pour toutes une fonction à placer dans votre module Tools (codes génériques VBA non liés à une application) le code qui permet d'écrire une ou des lignes dans un fichier Texte, en choisissant lors de l'appel de la procédure si vous voulez remplacer le fichier ou écrire à la suite de ce qu'il contient...

Simple et efficace, non?


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Sub WriteLinesInTextFile(Filename As String, Lines, Optional Replace As Boolean)
  Dim Channel As Long
  Dim i As Long
  
  Channel = FreeFile
  If Replace Then
    Open Filename For Output As Channel
  Else
    Open Filename For Append As Channel
  End If
  For i = LBound(Lines) To UBound(Lines)
    Print #Channel, Lines(i)
  Next i
  Close Channel
End Sub
Pour appeler cette procédure, par exemple en remplacement du contenu, on pourrait utiliser
Code : Sélectionner tout - Visualiser dans une fenêtre à part
Tools.WriteLinesInTextFile "c:\data\temp\Monfichier.txt", Array("Pierre", "Martine", "Manon"), True
et on peut dès lors "oublier" les Open append ou output (ch'sais plus, m'sieur...), les Close et les numéros de canaux...

Et dire que certains considèrent VBA comme un langage pourri et "pas professionnel"...



.

Envoyer le billet « Ecrire dans un fichier texte en VBA » dans le blog Viadeo Envoyer le billet « Ecrire dans un fichier texte en VBA » dans le blog Twitter Envoyer le billet « Ecrire dans un fichier texte en VBA » dans le blog Google Envoyer le billet « Ecrire dans un fichier texte en VBA » dans le blog Facebook Envoyer le billet « Ecrire dans un fichier texte en VBA » dans le blog Digg Envoyer le billet « Ecrire dans un fichier texte en VBA » dans le blog Delicious Envoyer le billet « Ecrire dans un fichier texte en VBA » dans le blog MySpace Envoyer le billet « Ecrire dans un fichier texte en VBA » dans le blog Yahoo

Mis à jour 14/09/2021 à 14h05 par Pierre Fauconnier

Catégories
VBA , MS Office , Trucs & Astuces , Bonnes pratiques

Commentaires