Vous avez besoin d’un petit script en Visual Basic pour faire un export simple d’un tableau Excel vers un fichier texte .txt ? Alors j’ai peut-être le script dont vous avez besoin !

Enthousiasmé

Je ne connais pas vraiment VB, mais une lecture rapide de quelques tutoriaux m’a permis de faire ce que je cherchais comme comportement. Ce script fonctionnerait uniquement sur Windows. Voici le résultat :

Sub ExportToTxt()
    Dim sheetName As String
    

    'Enregistrer le nom de la feuille actuelle
    startSheetName = ActiveSheet.Name
    
    
    'Exemples d'utilisation de la fonction WriteInTxtFile
    WriteInTxtFile "Enregistrables", "Registrables", 4
    WriteInTxtFile "Actions des séquences", "Actions", 4
    WriteInTxtFile "Dialogues réponses", "DialogAnswers", 4
    WriteInTxtFile "Localisation", "Localization", 3
    
    
    'Afficher de nouveau la feuille active au début de l'action
    Sheets(startSheetName).Activate
    
End Sub

Public Function WriteInTxtFile(sheetName As String, fileName As String, columnCount As Integer)
    Dim objStream As Object, i As Integer, s As String
    
    
    'Activer la feuille dont on va exporter le contenu
    Sheets(sheetName).Activate
    
    
    'Création de l'objet qui gère le stream de texte à exporter
    Set objStream = CreateObject("ADODB.Stream")
    
    
    'Initialisation
    objStream.Open
    
    
    'Redéfinir la position ainsi que l'encodage en UTF-8
    objStream.Position = 0
    objStream.Charset = "UTF-8"
    
    
    'Démarrer en ligne 2 (la première ligne étant un en-tête dans mon document Excel)
    For r = 2 To Range("A1048576").End(xlUp).Row
        s = ""
        c = 1

        'Construire la ligne sous forme de string
        While c <= columnCount
            s = s & Cells(r, c)
            
            If Not c = columnCount Then
                'Ajouter le contenu de la cellule au string ainsi que le séparateur de cellule (ici une tabulation)
                s = s & vbTab
            End If
            
            c = c + 1
        Wend
        
        'S'il n'y a pas que des cellules vides dans la ligne, ajouter cette ligne dans le stream
        If Not Len(s) = columnCount - 1 Then
            'Ajouter le carriage return (nouvelle ligne façon Windows)
            s = s & vbCr & vbLf
            
            
            'Écrire dans le stream
            objStream.WriteText s
        End If
    Next r
    
    
    'Enregistrer le fichier texte final à côté du document Excel ouvert
    objStream.SaveToFile ActiveWorkbook.Path & "/" & fileName & ".txt", 2
    
    objStream.Close
End Function

Il est probable que le code puisse être optimisé pour être exécuté plus rapidement. Néanmoins, il me suffit dans son état actuel pour exporter mes fichiers.

À noter que ce script s'exécute sans problème lorsque le document est ouvert dans LibreOffice Calc (toujours sur Windows).

Published by Dakwamine

Dakwamine, alias Quang-Minh Dang, né en 1987 en région parisienne. Un type sympa, pas bavard et pragmatique.