Convertir xls en csv avec séparateur ";"

greg -  
Normad Messages postés 112 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

J'ai créé un macro pour convertir un fichier Excel en csv.
Elle marche :-) !

Le souci c'est que dans mon fichier csv, le séparateur est la virgule alors que je souhaiterais avoir un point virgule. :-(

Je me suis baladé sur déjà pas mal de forums où ce problème est parfois évoqué : apparemment VBA est en anglais (et utilise la virgule) tandis qu'Excel est en français (et utilise le point-virgule).

J'ai donc ajouté à mon code (ActiveWorkbook.SaveAs Filename:="nom_du_fichier.csv", _
FileFormat:=xlCSV, CreateBackup:=False) la commande "local:=True" (ce qui donne : ActiveWorkbook.SaveAs Filename:="nom_du_fichier.csv", _
FileFormat:=xlCSV, CreateBackup:=False, local:=True) comme cela est conseillé sur les forums, afin de prendre en compte la langue de mon ordinateur.

Mais ça ne marche toujours pas... :-(

Quelqu'un aurait d'autres idées ?

Merci d'avance.

1 réponse

  1. Normad Messages postés 112 Date d'inscription   Statut Membre Dernière intervention   40
     
    Une solution de mon cru ci-dessous, mais qui nécessite de préciser la plage à enregistrer dans le fichier CSV

    Private Declare Function GetTempPath Lib "kernel32" Alias _
        "GetTempPathA" (ByVal nBufferLength As Long, ByVal lpBuffer _
        As String) As Long
        
    
    Private Sub SaveAsCsv()
        Dim Value As Integer, Buf As String * 128, strligne() As String
        Dim Ligne As Long, Col As Integer, Fichier As String
        Dim f As Long, t As Variant, I As Integer, Test As String, Compte As Long
        
        On Error GoTo Fin
        
        Value = GetTempPath(128, Buf)
        'Emplacement d'enregistrement (ici répertoire temporaire avec nom de fichier d'origine)
        Fichier = Left(Buf, Value) & "\" & ThisWorkbook.Name & ".csv"
        
        'Plage à enregister pour l'exemple "A1:G20"
        ReDim strligne(20)      'nombre de lignes
        For Ligne = 1 To 20     'ligne 1 à 20
            For Col = 1 To 7    'colonne A à G
                strligne(Ligne) = strligne(Ligne) & ";" & Cells(Ligne, Col)
            Next Col
        Next Ligne
        
        
        On Error Resume Next
        If Dir(Fichier) <> "" Then Kill Fichier
        If Dir(Fichier) <> "" Then
            MsgBox "Le fichier de résultat ne peut être remplacé car il est déjà ouvert", vbCritical
            Exit Sub
        End If
        On Error GoTo Fin
        
        f = FreeFile
        Open Fichier For Append As #f
        
        For Each t In strligne
            Print #f, CStr(t)
            Compte = Compte + 1
        Next t
        Close #f
        
        MsgBox "Le fichier a bien été enregistré sous " & Fichier, vbInformation
        Exit Sub
        
    Fin:
        Close #f
        MsgBox Error
    End Sub
    0