Écrire des données dans un fichier texte à l'aide d'Excel VBA
Excel VBA est une solution populaire lorsqu’il s’agit de tâches de traitement de données et de nettoyages. De plus, il peut automatiser des tâches répétitives qui prendraient beaucoup de temps à faire.
L’une des principales fonctionnalités de VBA est sa capacité à générer et à modifier des fichiers texte sans avoir à ouvrir, nommer et enregistrer les modifications manuellement.
Cet article vous montrera comment générer des fichiers texte (.txt)
à l’aide de VBA.
Dans cet article, nous essayons de générer des fichiers texte à l’aide d’Excel VBA. Avant d’approfondir le code, nous devons permettre à Excel VBA d’interagir avec FileSystemObject
, qui gère les fichiers et les dossiers.
Étapes pour activer FileSystemObject
:
-
Ouvrir le fichier Excel.
-
Depuis l’onglet
Développeur
, ouvrez l’éditeurVisual Basic
. -
Dans la barre d’outils
Tools
, cliquez surReferences
. -
Cochez la case
Microsoft Scripting Runtime
.
Vous êtes maintenant prêt.
Le bloc de code ci-dessous illustrera la création d’un fichier texte à l’aide de VBA.
La sous-routine SaveTextToFile
nécessite deux paramètres, le fileName
et le fileContent
. La variable fileName
sera le nom de fichier souhaité du fichier texte à générer. La variable fileContent
sera le contenu réel du fichier texte. Le filePath
doit être modifié afin qu’il corresponde à l’emplacement correct du fichier de sortie.
Il est recommandé de déclarer le FileSystemObject
en tant que fso
pour permettre à l’auto-complétion par Intellisense
de fonctionner, ce qui pourrait éviter les erreurs typographiques et aiderait également à découvrir d’autres méthodes dans la bibliothèque FileSystemObject
.
Il est important d’inclure fso = Nothing
et Set fileStream = Nothing
avant la fin de l’exécution du code car des erreurs se produiront lors de l’exécution si ces deux ne sont pas fermés.
Option Explicit
Public Sub SaveTextToFile(fileName As String, fileContent As String)
Dim filePath, fileAttributes As String
filePath = "C:\Users\temp\Desktop\Destination"
fileAttributes = filePath & "\" & fileName & ".txt"
Dim fso As FileSystemObject
Set fso = New FileSystemObject
Dim fileStream As TextStream
Set fileStream = fso.CreateTextFile(fileAttributes)
fileStream.WriteLine fileContent
fileStream.Close
If fso.FileExists(fileAttributes) Then
Debug.Print "File Created Successfully."
End If
Set fileStream = Nothing
Set fso = Nothing
End Sub
Sub testSub()
Call SaveTextToFile("sample1", "Here is the content.")
End Sub
Le bloc de code ci-dessus n’interagit pas réellement avec Excel et ne génère qu’un seul fichier.
Le bloc de code ci-dessous illustrera la création de fichiers texte en fonction des données du fichier Excel. Reportez-vous à Sheet1
pour les exemples de valeurs.
Sheet1
:
| A | B | C |
1| File Name | Content | GenerateTextFile? |
2| sample1 | This is the content of sample1| Yes |
2| sample2 | This is the content of sample2| No |
2| sample3 | This is the content of sample3| Yes |
2| sample4 | This is the content of sample4| No |
2| sample5 | This is the content of sample5| Yes |
2| sample6 | This is the content of sample6| No |
Sur l’exemple ci-dessous, nous allons réutiliser la sous-routine SaveTextToFile
pour la création du fichier texte. Le sous-programme testSub
appellera SaveTextToFile
dans une boucle en fonction des données de Sheet1
.
Option Explicit
Public Sub SaveTextToFile(fileName As String, fileContent As String)
Dim filePath, fileAttributes As String
filePath = "C:\Users\temp\Desktop\Destination"
fileAttributes = filePath & "\" & fileName & ".txt"
Dim fso As FileSystemObject
Set fso = New FileSystemObject
Dim fileStream As TextStream
Set fileStream = fso.CreateTextFile(fileAttributes)
fileStream.WriteLine fileContent
fileStream.Close
If fso.FileExists(fileAttributes) Then
Debug.Print fileName & " Created Successfully."
End If
Set fileStream = Nothing
Set fso = Nothing
End Sub
Sub testSub()
Dim wb As Workbook
Dim s1 As Worksheet
Set wb = ThisWorkbook
Set s1 = wb.Sheets("Sheet1")
Dim i As Integer
i = 2
Do Until s1.Cells(i, 1) = ""
If s1.Cells(i, 3) = "Yes" Then
Call SaveTextToFile(s1.Cells(i, 1), s1.Cells(i, 2))
End If
i = i + 1
Loop
End Sub
Sortie testSub
:
sample1 Created Successfully.
sample3 Created Successfully.
sample5 Created Successfully.
Sample1
, Sample3
et Sample5
sont les fichiers texte créés car ils ont Yes
dans la colonne GenerateTextFile
. Sample2
et Sample4
ne sont pas créés car ils sont No
dans la colonne GenerateTextFile
.