Convertir plusieurs fichiers CSV en Xlsx

Fermé
HEMIYELY Messages postés 61 Date d'inscription mercredi 10 mai 2017 Statut Membre Dernière intervention 25 janvier 2022 - Modifié le 25 oct. 2021 à 13:10
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 - 26 oct. 2021 à 11:02
Bonjour,
J'ai actuellement 68 fichiers en csv à transformer en fichiers xlsx.
J'ai trouvé le code suivant :
Sub CSVtoXLS()
'UpdatebyExtendoffice20170814
    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", ".xls", vbTextCompare), xlNormal
        ActiveWorkbook.Close
        Windows(xWsheet).Activate
        xCSVFile = Dir
    Loop
    Application.StatusBar = False
    Application.DisplayAlerts = True
End Sub


Cependant, lorsque les fichiers sont convertis, mais ne conserve pas le format (décalage des valeurs et séparation par des " ; " au mauvais endroit)

Pouvez-vous m'aider ? :-)

Merci par avance pour votre aide.
A voir également:

3 réponses

jee pee Messages postés 40277 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 25 septembre 2024 9 348
Modifié le 25 oct. 2021 à 13:10
Bonjour,

Pourquoi ne pas avoir essayé cette solution : https://forums.commentcamarche.net/forum/affich-37383583-fusionner-des-fichers-csv#8

Le script indiqué fusionne bien des CSV et en modifiant le SKIP=1 en SKIP=14 il devrait correspondre à tes fichiers.

PS : Pour la mise en forme des sources, au dessus de la zone d'édition de tes messages, il y a des icônes pour l'enrichissement du texte. Celle qui a cet aspect
<> ▼
permet d'appliquer au code, suivant une liste de valeurs, le format correspondant à sa nature.
Un petit tuto là : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code


0
HEMIYELY Messages postés 61 Date d'inscription mercredi 10 mai 2017 Statut Membre Dernière intervention 25 janvier 2022
25 oct. 2021 à 13:21
Bonjour,
Merci pour votre réponse. Cependant, dans le lien, je ne vois pas de code VBA à essayer. Est-ce une erreur?

Merci beaucoup
0
jee pee Messages postés 40277 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 25 septembre 2024 9 348 > HEMIYELY Messages postés 61 Date d'inscription mercredi 10 mai 2017 Statut Membre Dernière intervention 25 janvier 2022
25 oct. 2021 à 13:26
Il y a un lien télécharger qui conduit vers : https://github.com/blogmotion/windows-scripts/blob/master/Batch%20(BAT)/moulinette-csv/fusionner.bat

Ce n'est pas du VBA, c'est un script Windows
0
HEMIYELY Messages postés 61 Date d'inscription mercredi 10 mai 2017 Statut Membre Dernière intervention 25 janvier 2022 > jee pee Messages postés 40277 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 25 septembre 2024
25 oct. 2021 à 13:30
D'accord, merci !! Désolée je suis un peu nulle...
Et du coup où dois-je coller ce scripte?
0
jee pee Messages postés 40277 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 25 septembre 2024 9 348 > HEMIYELY Messages postés 61 Date d'inscription mercredi 10 mai 2017 Statut Membre Dernière intervention 25 janvier 2022
Modifié le 25 oct. 2021 à 13:34
Le copier dans le bloc note, l'enregistrer sous le nom fusionner.bat, changer éventuellement le nom des répertoires que l'on y trouve ( SORTIE\, CVS_ENTREE\ ), remplacer skip=1 en skip=14 et lancer le .bat depuis une fenêtre ligne de commande Windows
0
HEMIYELY Messages postés 61 Date d'inscription mercredi 10 mai 2017 Statut Membre Dernière intervention 25 janvier 2022 > jee pee Messages postés 40277 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 25 septembre 2024
Modifié le 25 oct. 2021 à 13:47
D'accord, et à quel endroit dans le script dois-je indiquer l'emplacement de mes fichiers ?
0
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729
25 oct. 2021 à 14:34
Bonjour,

voir ceci qui est opérationnel:

https://www.mrexcel.com/board/threads/vba-convert-csv-to-xlsx.1056318/

Option Explicit
Sub ConvertCSVToXlsx()
    Dim myfile As String
    Dim oldfname As String, newfname As String
    Dim workfile
    Dim folderName As String
    
    Application.DisplayAlerts = False
    Application.ScreenUpdating = False
    
'   Capture name of current file
    myfile = ActiveWorkbook.Name
    
'   Set folder name to work through
    folderName = "C:\Users\LePivert\Documents\Nouveau dossier\" 'adapter chemin du dossier où se trouve les CSV
    
'   Loop through all CSV filres in folder
    workfile = Dir(folderName & "*.CSV")
    Do While workfile <> ""
'       Open CSV file
        Workbooks.Open Filename:=folderName & workfile
'       Capture name of old CSV file
        oldfname = ActiveWorkbook.FullName
'       Convert to XLSX
        newfname = folderName & Left(ActiveWorkbook.Name, Len(ActiveWorkbook.Name) - 4) & ".xlsx"
        ActiveWorkbook.SaveAs Filename:=newfname, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
        ActiveWorkbook.Close
'       Delete old CSV file
        'Kill oldfname
        Windows(myfile).Activate
        workfile = Dir()
    Loop
    
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
End Sub

0
HEMIYELY Messages postés 61 Date d'inscription mercredi 10 mai 2017 Statut Membre Dernière intervention 25 janvier 2022
Modifié le 25 oct. 2021 à 15:09
Bonjour,
Merci pour votre retour.
Je viens de tester le code et j'ai le même résultat (séparation point virgule où il ne faut pas et décalage des nombres :

Voici comment se présent le fichier avant conversion :


Et après conversion :
0
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729 > HEMIYELY Messages postés 61 Date d'inscription mercredi 10 mai 2017 Statut Membre Dernière intervention 25 janvier 2022
25 oct. 2021 à 15:49
il doit y avoir une erreur dans les captures d'écran!
celle du haut est un xlsx et celle du bas un csv!
0
HEMIYELY Messages postés 61 Date d'inscription mercredi 10 mai 2017 Statut Membre Dernière intervention 25 janvier 2022 > cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024
25 oct. 2021 à 17:42
Non, le fichier de la capture d'écran et bien en cvs et la capture 2 en xlsx (après la macro).
0
jee pee Messages postés 40277 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 25 septembre 2024 9 348 > cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024
25 oct. 2021 à 17:49
il est vraisemblable que la macro ne fait pas la même chose que l'ouverture d'un fichier .cvs qui est converti en colonnes sur les ; on dirait que la macro effectue une coupure sur la virgule
0
Yoyo01000 Messages postés 1639 Date d'inscription samedi 2 février 2019 Statut Membre Dernière intervention 7 mars 2022 165 > HEMIYELY Messages postés 61 Date d'inscription mercredi 10 mai 2017 Statut Membre Dernière intervention 25 janvier 2022
25 oct. 2021 à 17:50
Bonsoir,

c'est du .csv, à partir de la ligne 15 sur la première copie d'écran ?!
0
Utilisateur anonyme
25 oct. 2021 à 18:34
Bonjour,
Excel utilise par défaut la virgule comme séparateur de colonnes. Or, les fichiers d'origine utilisent le point virgule.

En modifiant la macro comme ceci on automatise la répartition des données dans des colonnes avant d'enregistrer le fichier en xls :
Sub CSVtoXLS()
'UpdatebyExtendoffice20170814
    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
        '
        'Répartir les données dans des colonnes en utilisant le séparateur ";"
        ActiveWorkbook.ActiveSheet.Columns("A:A").Select
        Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
        Semicolon:=True, Comma:=False, Space:=False, Other:=False

        ActiveWorkbook.SaveAs Replace(xSPath & xCSVFile, ".csv", ".xls", vbTextCompare), xlNormal
        ActiveWorkbook.Close
        Windows(xWsheet).Activate
        xCSVFile = Dir
    Loop
    Application.StatusBar = False
    Application.DisplayAlerts = True
End Sub
0
HEMIYELY Messages postés 61 Date d'inscription mercredi 10 mai 2017 Statut Membre Dernière intervention 25 janvier 2022
26 oct. 2021 à 09:00
Bonjour,
Merci pour votre retour,
Il y a une amélioration, mais des colonnes sont perdues :

Avant conversion :


Après conversion :
0
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729 > HEMIYELY Messages postés 61 Date d'inscription mercredi 10 mai 2017 Statut Membre Dernière intervention 25 janvier 2022
26 oct. 2021 à 11:02
Quand tu le fais manuellement sur un fichier , obtiens-tu le résultat escompté?

https://fr.extendoffice.com/documents/excel/3165-how-to-import-csv-file-into-worksheet.html

Si oui sers-toi de l'enregistreur de macro. Ensuite tu intègres dans ta boucle la macro ainsi obtenue.

@+
0