J'ai besoin de générer des résultats sous forme de fichier .csv
, qui sera analysé ultérieurement par un autre processus. Afin de produire ces résultats, j'ai un énorme classeur contenant toutes les macros et fonctions dont j'ai besoin.
.csv
séparé de VBA
? VBA
pour y écrire au lieu d'écrire simplement dans une approche "textuelle brute"?Je vous remercie :)
Vous voulez quelque chose comme ça?
Option Explicit
Sub WriteFile()
Dim ColNum As Integer
Dim Line As String
Dim LineValues() As Variant
Dim OutputFileNum As Integer
Dim PathName As String
Dim RowNum As Integer
Dim SheetValues() As Variant
PathName = Application.ActiveWorkbook.Path
OutputFileNum = FreeFile
Open PathName & "\Test.csv" For Output Lock Write As #OutputFileNum
Print #OutputFileNum, "Field1" & "," & "Field2"
SheetValues = Sheets("Sheet1").Range("A1:H9").Value
ReDim LineValues(1 To 8)
For RowNum = 1 To 9
For ColNum = 1 To 8
LineValues(ColNum) = SheetValues(RowNum, ColNum)
Next
Line = Join(LineValues, ",")
Print #OutputFileNum, Line
Next
Close OutputFileNum
End Sub
N'oubliez pas que vous devrez mettre des guillemets autour des champs contenant une virgule.
La réponse de Tony fonctionne généralement mais ne traite pas le cas où votre texte contient des virgules ou des guillemets. Vous préférerez peut-être utiliser la méthode Workbook.SaveAs.
Voici un exemple si vous souhaitez enregistrer le contenu de la feuille Sheet1 en tant que fichier CSV séparé.
Sub create_csv()
Dim FileName As String
Dim PathName As String
Dim ws As Worksheet
Set ws = ActiveWorkbook.Sheets("Sheet1")
FileName = "filename.csv"
PathName = Application.ActiveWorkbook.Path
ws.Copy
ActiveWorkbook.SaveAs FileName:=PathName & "\" & FileName, _
FileFormat:=xlCSV, CreateBackup:=False
End Sub
Imaginez que votre Sheet1 contient:
lorem ipsum
lore, m ips "um"
Le fichier de sortie CSV sera:
lorem, ipsum
"lore, m", "ips" "um" ""
Vous pouvez écrire une macro comme enregistrer le classeur actuel (fichier Excel ouvert) au format CSV à partir de VBA:
ActiveWorkbook.SaveAs Filename:="C:\Book1.csv", _
FileFormat:=xlCSVMSDOS, CreateBackup:=False