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 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
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).