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).