Convertir xls en csv avec séparateur ";"

Fermé
greg - 5 déc. 2011 à 17:06
Normad Messages postés 112 Date d'inscription dimanche 6 juin 2010 Statut Membre Dernière intervention 10 juin 2015 - 20 mai 2013 à 14:50
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.
A voir également:

1 réponse

Normad Messages postés 112 Date d'inscription dimanche 6 juin 2010 Statut Membre Dernière intervention 10 juin 2015 39
20 mai 2013 à 14:50
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