XL 2016 convertir (ou enregistrer) des fichiers CSV to xlsx par lot VBA

hastaz

XLDnaute Nouveau
Bonjour le Forum,
Je souhaiterai convertir un lot de fichiers .csv issus d'une extraction en fichiers .xlsx afin de pouvoir appliquer ma macro dessus. J'ai essayé le code suivant trouvé sur le net:
VB:
Sub CSVtoXLS()

    Dim xFd As FileDialog
    Dim xSPath As String
    Dim xCSVFile As String
    Dim xWsheet As String
    Application.DisplayAlerts = False
    Application.StatusBar = True
    xWsheet = ActiveWorkbook.Name
    Set xFd = Application.FileDialog(msoFileDialogFolderPicker)
    xFd.Title = "Select a folder:"
    If xFd.Show = -1 Then
        xSPath = xFd.SelectedItems(1)
    Else
        Exit Sub
    End If
    If Right(xSPath, 1) <> "\" Then xSPath = xSPath + "\"
    xCSVFile = Dir(xSPath & "*.csv")
    Do While xCSVFile <> ""
        Application.StatusBar = "Converting: " & xCSVFile
        Workbooks.Open Filename:=xSPath & xCSVFile
        ActiveWorkbook.SaveAs Replace(xSPath & xCSVFile, ".csv", ".xlsx", vbTextCompare), xlWorkbookDefault
        ActiveWorkbook.Close
        Windows(xWsheet).Activate
        xCSVFile = Dir
    Loop
    Application.StatusBar = False
    Application.DisplayAlerts = True
End Sub
mais il m'est impossible d'ouvrir les fichiers .xlsx. Ce qui m'intrigue c'est que les fichiers .csv de source s'ouvrent avec Excel au bon format et me suffit juste d'enregistrer sous le dossier actif et choisir l'extension .xlsx. Comme je dispose d'une trentaine de fichiers dans mon dossier csv, je souhaiterai automatiser ceci par une VBA.
Pourriez vous m'aider, s'il vous plait.
Merci d'avance pour votre aide.
 

job75

XLDnaute Barbatruc
Bonjour hastaz,

J'ai supprimé mon dernier post qui était incomplet.

Téléchargez les fichiers zippés joints dans le même dossier (le bureau).

Ouvrez le fichier .xlsm et voyez la macro affectée au bouton :
VB:
Sub Convertir_CSV()
Dim chemin$, fichier$, n&, nomconverti$
chemin = ThisWorkbook.Path & "\" 'adapter éventuellement
fichier = Dir(chemin & "*.csv") '1er fichier .csv du dossier
Application.ScreenUpdating = False
Application.DisplayAlerts = False 'si le fichier xlsx a déjà été créé
While fichier <> ""
    n = n + 1
    nomconverti = Left(fichier, Len(fichier) - 3) & "xlsx"
    On Error Resume Next
    Workbooks(fichier).Close False 'si le fichier est ouvert on le ferme
    Workbooks(nomconverti).Close False 'si le fichier est ouvert on le ferme
    On Error GoTo 0
    Workbooks.OpenText chemin & fichier, Local:=True 'ouvre le fichier
    ActiveWorkbook.SaveAs chemin & nomconverti, 51 '51 => format xlsx
    ActiveWorkbook.Close 'ferme le fichier
    fichier = Dir 'fichier suivant
Wend
MsgBox n & " fichier(s) converti(s)"
End Sub
 

Pièces jointes

  • Convertir CSV.zip
    14.8 KB · Affichages: 17

hastaz

XLDnaute Nouveau
Bonjour hastaz,

J'ai supprimé mon dernier post qui était incomplet.

Téléchargez les fichiers zippés joints dans le même dossier (le bureau).

Ouvrez le fichier .xlsm et voyez la macro affectée au bouton :
VB:
Sub Convertir_CSV()
Dim chemin$, fichier$, n&, nomconverti$
chemin = ThisWorkbook.Path & "\" 'adapter éventuellement
fichier = Dir(chemin & "*.csv") '1er fichier .csv du dossier
Application.ScreenUpdating = False
Application.DisplayAlerts = False 'si le fichier xlsx a déjà été créé
While fichier <> ""
    n = n + 1
    nomconverti = Left(fichier, Len(fichier) - 3) & "xlsx"
    On Error Resume Next
    Workbooks(fichier).Close False 'si le fichier est ouvert on le ferme
    Workbooks(nomconverti).Close False 'si le fichier est ouvert on le ferme
    On Error GoTo 0
    Workbooks.OpenText chemin & fichier, Local:=True 'ouvre le fichier
    ActiveWorkbook.SaveAs chemin & nomconverti, 51 '51 => format xlsx
    ActiveWorkbook.Close 'ferme le fichier
    fichier = Dir 'fichier suivant
Wend
MsgBox n & " fichier(s) converti(s)"
End Sub
Merci Job75, ça fonctionne très bien. Peut on ajouter une boite de dialogue qui permet de choisir le dossier à convertir sans à ce que la macro ne soit dans le même dossier?
 

job75

XLDnaute Barbatruc
Peut on ajouter une boite de dialogue qui permet de choisir le dossier à convertir sans à ce que la macro ne soit dans le même dossier?
Bien sûr, c'est ce que fait la macro de votre post #1, vous n'avez qu'à copier le code.

Mais puisque vous savez où sont les fichiers CSV il est quand même plus simple de mettre le fichier .xlsm dans le même dossier, non ?
 

hastaz

XLDnaute Nouveau
Bien sûr, c'est ce que fait la macro de votre post #1, vous n'avez qu'à copier le code.

Mais puisque vous savez où sont les fichiers CSV il est quand même plus simple de mettre le fichier .xlsm dans le même dossier, non ?
J'ai créé un UserForm avec plusieurs boutons macro car je reçois constamment des nouveaux fichiers à traiter, ne voulant copier coller mon fichier .xlsm à chaque fois; j'ai pensé à la boite de dialogue qui permet de parcourir le pc et choisir le dossier.
En effet, dans mon post 1, il y'a bien la boite de dialogue, je vais essayer de l'intégrée au code.
Je vous remercie pour votre aide.
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 084
Messages
2 085 194
Membres
102 810
dernier inscrit
mohammedaminelahbali