Lors de l’utilisation des outils disponibles à partir du ruban pour exporter une feuille de calcul, sous forme de fichier CSV, Arkadiusz a noté qu’il peut spécifier qu’il souhaite utiliser un point-virgule (;) comme délimiteur de champ. Cependant, s’il enregistre un fichier CSV à l’aide d’une macro (FileFormat: = xlCSV ou xlCSVWindows), il ne peut pas spécifier de point-virgule comme délimiteur.

Cela fonctionne de cette façon par conception dans VBA. L’implémentation Excel des routines d’exportation pour VBA utilise toujours les paramètres régionaux de Windows pour déterminer comment les éléments d’un CSV doivent être séparés.

Plus précisément, la routine examine le champ Séparateur de liste pour le délimiteur. Cela signifie que vous pouvez, si vous le souhaitez, remplacer le séparateur par un point-virgule en modifiant le paramètre Séparateur de liste dans la configuration de vos paramètres régionaux.

Si vous ne souhaitez pas modifier les paramètres régionaux, vous pouvez à la place écrire votre propre macro qui produira le fichier de la manière que vous souhaitez.

Considérez, pendant un moment, la macro suivante, qui affichera le fichier:

Sub CreateFile()

Dim sFName As String     Dim Rows As Long     Dim Cols As Long     Dim J As Long     Dim K As Long     Dim sTemp As String     Dim sSep As String

sSep = ";"  'Specify the separator to be used

sFName = ActiveWorkbook.FullName     If Right(sFName, 5) = ".xlsx" Then         sFName = Mid(sFName, 1, Len(sFName) - 5)

sFName = sFName & ".txt"

Open sFName For Output As 1

With ActiveSheet             'Number of rows to export is based on the contents             'of column B. If it should be based on a different             'column, change the following line to reflect the             'column desired.

Rows = .Cells(.Rows.Count, "B").End(xlUp).Row             For J = 1 To Rows                 sTemp = ""

Cols = .Cells(J, .Columns.Count).End(xlToLeft).Column                 For K = 2 To Cols                     sTemp = sTemp & .Cells(J, K).Value                     If K < Cols Then sTemp = sTemp & sSep                 Next                 Print #1, sTemp             Next J         End With

Close 1

sTemp = "There were " & Rows & " rows of data written "

sTemp = sTemp & "to this file:" & vbCrLf & sFName     Else         sTemp = "This macro needs to be run on a workbook "

sTemp = sTemp & "stored in the XLSX format."

End If

MsgBox sTemp End Sub

Cette macro ouvre un fichier texte qui porte le même nom que votre classeur. Il parcourt ensuite chaque ligne et commence à rassembler une chaîne du contenu de la cellule. (Ceci est placé dans la variable sTemp.) Chaque cellule a un point-virgule placé entre elle, comme défini par la variable sSep. Les valeurs concaténées de chaque ligne sont stockées dans le fichier texte et, une fois terminé, le fichier texte est fermé. La routine est très rapide et une fois terminée, elle affiche un message indiquant le nombre de lignes exportées vers le fichier.

_Note: _

Si vous souhaitez savoir comment utiliser les macros décrites sur cette page (ou sur toute autre page des sites ExcelTips), j’ai préparé une page spéciale qui comprend des informations utiles.

lien: / excelribbon-ExcelTipsMacros [Cliquez ici pour ouvrir cette page spéciale dans un nouvel onglet de navigateur].

ExcelTips est votre source pour une formation Microsoft Excel rentable.

Cette astuce (9243) s’applique à Microsoft Excel 2007, 2010, 2013, 2016, 2019 et Excel dans Office 365. Vous pouvez trouver une version de cette astuce pour l’ancienne interface de menu d’Excel ici:

link: / excel-Specifying_a_Delimiter_when_Saving_a_CSV_File_in_a_Macro [Spécification d’un délimiteur lors de l’enregistrement d’un fichier CSV dans une macro].