Écrire des données dans un fichier texte à l'aide d'Excel VBA

Glen Alfaro 18 avril 2022
É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’éditeur Visual Basic.
  • Dans la barre d’outils Tools, cliquez sur References.
  • 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.