Exceller:Enregistrez au format CSV via VBA et obtenez manuellement un fichier différent
Question
Je dois enregistrer plusieurs fichiers xlsm au format CSV afin de les importer dans d'autres programmes (tels que R, etc.).Eh bien, j'ai écrit les routines d'importation nécessaires dans tous les autres programmes et elles fonctionnent très bien avec le cas 1 :
Cas 1:Enregistrer manuellement un xlsm au format CSVSi j'utilise cette option, que j'enregistre manuellement chaque fichier au format CSV et que je clique sur OUI dans toutes les invites, j'obtiens un fichier .csv qui ressemble beaucoup à un fichier Excel normal lorsqu'il est rouvert dans Excel.Il s'agit d'une vue en colonnes standard, et rien n'est séparé par des virgules, etc.(C'est peut-être le cas, mais ça ne semble pas être le cas..)
Cas 2 :Enregistrer un xlsm de VBA au format CSVEh bien, ici, j'obtiens un fichier complètement différent lorsqu'il est rouvert dans Excel.Celui-ci ressemble à un "vrai" fichier csv avec toutes les valeurs séparées par des virgules.
Mes questions sont :1.Pourquoi y a-t-il une différence ?2.Comment puis-je accéder par programme au cas 2 à partir de VBA ?Ou est-ce impossible ?
Si 2 est impossible, je dois réécrire mes routines de code d'importation pour gérer le fichier csv "normal"... pas très difficile mais quand même beaucoup de travail et je me demande vraiment pourquoi il y a une différence.
La solution
T1 : Je ne pense pas qu'il y ait une différence, du moins pas dans un exemple que j'ai pris. T2 : Essayez ceci :
J'ai 3 exemples de fichiers XLSM dans C:\stack\folder1
comme illustré ci-dessous :
Chaque fichier contient une seule fiche technique, que nous transformerons en CSV :
Je suis sûr que votre routine est beaucoup plus compliquée, mais pour tester la sortie CSV, je vais simplement parcourir les fichiers et les enregistrer sous xlCSV
:
Option Explicit
Sub TestCSVOutput()
Dim DataBook As Workbook
Dim DataSheet As Worksheet
Dim FilePaths(3) As String
Dim FileIdx As Long
'set up file paths for test
FilePaths(1) = "C:\stack\folder1\test_file_01.xlsm"
FilePaths(2) = "C:\stack\folder1\test_file_02.xlsm"
FilePaths(3) = "C:\stack\folder1\test_file_03.xlsm"
'loop through array and save each file as a CSV
Application.DisplayAlerts = False
For FileIdx = 1 To UBound(FilePaths)
Set DataBook = Workbooks.Open(FilePaths(FileIdx))
Set DataSheet = DataBook.ActiveSheet
DataBook.SaveAs FileFormat:=xlCSV '<~~ the save step
DataBook.Close
Next FileIdx
Application.DisplayAlerts = True
End Sub
Une fois le script terminé, je me retrouve avec trois fichiers CSV :
Chaque fichier est délimité par des virgules lorsqu'il est ouvert dans un éditeur de texte :