Note: The other languages of the website are Google-translated. Back to English

Comment convertir par lots plusieurs fichiers CSV en fichiers XLS (X) dans Excel?

Pour convertir un fichier CSV en fichier XlS ou XLSX est très facile pour vous en appliquant la fonction Enregistrer sous. Cependant, convertir plusieurs fichiers CSV en fichiers XLS ou XLSX à partir d'un dossier prend du temps en les enregistrant un par un manuellement. Ici, j'introduis un code macro pour convertir rapidement par lots tous les fichiers CSV en fichiers XLS (x) à partir d'un dossier.

Conversion par lots de fichiers CSV en fichiers XlS (X) avec un code macro


Conversion par lots de fichiers CSV en fichiers XlS (X) avec un code macro

Pour convertir plusieurs fichiers CSV d'un dossier en fichiers XLS (X), vous pouvez procéder comme suit:

1. Activez un nouveau classeur, appuyez sur Alt + F11 clés pour ouvrir Microsoft Visual Basic pour applications fenêtre, et cliquez sur insérer > Module. Voir la capture d'écran:
doc par lots convertir cvs xls 1

Notes: Assurez-vous que tous les fichiers CSV que vous souhaitez convertir sont fermés.

2. Collez ensuite le code de macro ci-dessous dans le Module script et appuyez sur F5 clé pour exécuter le code.

VBA: convertir CSV 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
        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

3. Dans la boîte de dialogue contextuelle, sélectionnez le dossier spécifié contenant les fichiers CSV que vous souhaitez convertir. Voir la capture d'écran:
doc par lots convertir cvs xls 2

4. Cliquez OK, tous les fichiers CSV du dossier sélectionné ont été convertis en fichiers XLS.
doc par lots convertir cvs xls 3

Conseil : Si vous souhaitez convertir des fichiers CSV en fichiers XLSX, vous utilisez le code VBA ci-dessous.

VBA: convertir des fichiers CSV en XLSX

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", ".xlsx", vbTextCompare), xlWorkbookDefault
        ActiveWorkbook.Close
        Windows(xWsheet).Activate
        xCSVFile = Dir
    Loop
    Application.StatusBar = False
    Application.DisplayAlerts = True
End Sub

convertir ou exporter rapidement une plage de feuilles pour séparer les fichiers XLS / Word / PDF ou d'autres formats en une seule fois

Normalement, Excel ne vous prend pas en charge avec une option pour exporter ou enregistrer rapidement une plage sous forme de fichier CSV ou Excel. Si vous souhaitez enregistrer une plage de données au format CSV ou classeur dans Excel, vous devrez peut-être utiliser une macro VBA pour ce faire ou copier la plage dans le presse-papiers et la coller dans un nouveau classeur, puis enregistrer le classeur au format CSV ou Classeur. Kutools pour Excel augmente Excel avec Exporter la plage vers un fichier utilitaire pour les utilisateurs d'Excel qui souhaitent traiter rapidement les opérations suivantes :  Cliquez pour un essai gratuit complet de 30 jours!
doc exportation de la plage de cellules vers un fichier
 
Kutools for Excel: avec plus de 300 compléments Excel pratiques, essayez gratuitement sans limitation en 30 jours.

Articles relatifs:


Les meilleurs outils de productivité de bureau

Kutools for Excel résout la plupart de vos problèmes et augmente votre productivité de 80%

  • Réutilisation: Insérer rapidement formules complexes, graphiques et tout ce que vous avez utilisé auparavant; Crypter les cellules avec mot de passe; Créer une liste de diffusion et envoyer des e-mails ...
  • Barre Super Formula (modifiez facilement plusieurs lignes de texte et de formule); Disposition de lecture (lire et modifier facilement un grand nombre de cellules); Coller dans la plage filtrée...
  • Fusionner les cellules / lignes / colonnes sans perdre de données; Contenu des cellules divisées; Combiner des lignes / colonnes en double... Empêcher les cellules en double; Comparer les gammes...
  • Sélectionnez Dupliquer ou Unique Lignes; Sélectionnez les lignes vides (toutes les cellules sont vides); Super Find et Fuzzy Find dans de nombreux classeurs; Sélection aléatoire ...
  • Copie exacte Plusieurs cellules sans changer la référence de formule; Créer automatiquement des références à plusieurs feuilles; Insérer des puces, Cases à cocher et plus encore ...
  • Extrait du texte, Ajouter du texte, Supprimer par position, Supprimer l'espace; Créer et imprimer des sous-totaux de pagination; Conversion entre le contenu et les commentaires des cellules...
  • Super filtre (enregistrer et appliquer des schémas de filtrage à d'autres feuilles); Tri avancé par mois / semaine / jour, fréquence et plus; Filtre spécial par gras, italique ...
  • Combiner des classeurs et des feuilles de travail; Fusionner les tableaux en fonction des colonnes clés; Diviser les données en plusieurs feuilles; Conversion par lots xls, xlsx et PDF...
  • Plus de 300 fonctionnalités puissantes. Prend en charge Office / Excel 2007-2019 et 365. Prend en charge toutes les langues. Déploiement facile dans votre entreprise ou organisation. Essai gratuit de 30 jours. Garantie de remboursement de 60 jours.
onglet kte 201905

Office Tab apporte une interface à onglets à Office et simplifie considérablement votre travail

  • Activer l'édition et la lecture par onglets dans Word, Excel, PowerPoint, Publisher, Access, Visio et Project.
  • Ouvrez et créez plusieurs documents dans de nouveaux onglets de la même fenêtre, plutôt que dans de nouvelles fenêtres.
  • Augmente votre productivité de 50% et réduit des centaines de clics de souris chaque jour!
bas de cabine
Commentaires (37)
Pas encore de notes. Soyez le premier à évaluer!
Ce commentaire a été minimisé par le modérateur sur le site
Je veux faire le contraire - convertir XLS en CSV. ce script fonctionne-t-il ?
Sous CSVtoXLS()
'Mettre à jour parExtendoffice20170814
Boîte de dialogue Dim xFd en tant que fichier
Estomper xSPath en tant que chaîne
Dim xXLSFile As String
Dim xWsheet As String
Application.DisplayAlerts = Faux
Application.StatusBar = Vrai
xWsheet = ActiveWorkbook.Nom
Définir xFd = Application. FileDialog (msoFileDialogFolderPicker)
xFd.Title = "Sélectionnez un dossier :"
Si xFd.Show = -1 Alors
xSPath = xFd.SelectedItems(1)
autre
Exit Sub
Si fin
Si Droite(xSPath, 1) <> "\" Alors xSPath = xSPath + "\"
xXLSFile = Dir(xSPath & "*.xls")
Faire tant que xXLSFile <> ""
Application.StatusBar = "Conversion : " & xXLSFile
Workbooks.Open Filename :=xSPath & xXLSFile
ActiveWorkbook.SaveAs Replace(xSPath & xXLSFile, ".xls", ".csv", vbTextCompare), xlNormal
ActiveWorkbook.Fermer
Windows(xWsheet).Activer
xXLSFile = Dir
boucle
Application.StatusBar = False
Application.DisplayAlerts = Vrai
End Sub
Karen
Ce commentaire a été minimisé par le modérateur sur le site
Sous ConvertCSVToXlsx()



Estomper monfichier en tant que chaîne

Dim oldfname As String, newfname As String

Dim fichier de travail

Estomper le nom du dossier en tant que chaîne



Application.DisplayAlerts = Faux

Application.ScreenUpdating = Faux



' Capturer le nom du fichier courant

monfichier = ActiveWorkbook.Name



' Définissez le nom du dossier à parcourir

nom_dossier = "D:\tmp\"



' Boucle sur tous les fichiers CSV du dossier

workfile = Dir(nomdossier & "*.CSV")

Faire tant que fichier de travail <> ""

' Ouvrir le fichier CSV

Workbooks.Open Filename:=folderName &amp; workfile

' Capturer le nom de l'ancien fichier CSV

oldfname = ActiveWorkbook.FullName

' Convertir en XLSX

newfname = nom_dossier & Left(ActiveWorkbook.Name, Len(ActiveWorkbook.Name) - 4) & ".xlsx"

ActiveWorkbook.SaveAs Filename :=newfname, FileFormat :=xlOpenXMLWorkbook, CreateBackup :=True

ActiveWorkbook.Fermer

' Supprimer l'ancien fichier CSV

Tuer l'ancien nom

Windows(monfichier).Activer

fichier de travail = Dir()

boucle



Application.DisplayAlerts = Vrai

Application.ScreenUpdating = True



End Sub
brad
Ce commentaire a été minimisé par le modérateur sur le site
"Astuce : si vous souhaitez convertir des fichiers CSV en fichiers XLXS, il vous suffit de remplacer .xls par .xlsx dans la macro ActiveWorkbook.SaveAs Replace(xSPath & xCSVFile, ".csv", ".xls", vbTextCompare)."

J'ai essayé ceci, et Excel n'a pas pu ouvrir les fichiers résultants. J'ai reçu le message suivant : "Excel ne peut pas ouvrir le fichier 'filename.xlsx' car le format de fichier ou l'extension de fichier n'est pas valide. Vérifiez que le fichier n'a pas été corrompu et que l'extension de fichier correspond au format du fichier."

Cependant, le script a réussi à convertir en .xls.
Matt Leonard
Ce commentaire a été minimisé par le modérateur sur le site
Je n'avais pas trouvé ce problème avant, merci pour votre commentaire correct. J'ai corrigé le conseil.
Maison ensoleillé
Ce commentaire a été minimisé par le modérateur sur le site

McFamyo
Ce commentaire a été minimisé par le modérateur sur le site
Merci beaucoup pour votre excellent script pour CSV vers XLS. C'est beaucoup plus utile à mon travail
Sathish
Ce commentaire a été minimisé par le modérateur sur le site
Hi,

Votre script est génial mais il ne convertit pas le csv séparé par des points-virgules. Pouvez-vous s'il vous plaît poster une solution pour ceux-ci?

Merci
Dragos
Ce commentaire a été minimisé par le modérateur sur le site
Désolé, ici, je n'ai pas de solution, peut-être que vous pouvez poser votre question sur notre forum, quelqu'un d'autre peut vous aider. https://www.extendoffice.com/forum.html
Maison ensoleillé
Ce commentaire a été minimisé par le modérateur sur le site
je suis peut-être en retard, je viens d'avoir le problème où j'avais besoin de convertir les fichiers CSV en points-virgules et j'ai ajouté ceci au code et cela a fonctionné, j'espère que cela aidera quelqu'un

Remplacez 'Workbooks.Open Filename:=xSPath & xCSVFile' par ce 'Workbooks.Open Filename:=xSPath & xCSVFile, Delimiter:=";", Local:=True'
Younes
Ce commentaire a été minimisé par le modérateur sur le site
J'ai utilisé le fichier plusieurs csv vers plusieurs xls mais je me trompe de fichiers xls de csv; infos séparées mais deviennent ensemble dans des cellules. Comment cela peut-il être résolu?
pte
Ce commentaire a été minimisé par le modérateur sur le site
Le code ne peut pas prendre en charge le fichier CSV séparé par des virgules.
Maison ensoleillé
Ce commentaire a été minimisé par le modérateur sur le site
Lorsque j'ai donné le nom du dossier, le programme a dit : "Aucun fichier ne correspond à votre recherche." Mais il y a 2,609 XNUMX fichiers .csv dans le dossier
Fred Maye
Ce commentaire a été minimisé par le modérateur sur le site
Le code ne prend pas en charge le fichier CSV séparé par des virgules, vos fichiers sont-ils dans ce cas ?
Maison ensoleillé
Ce commentaire a été minimisé par le modérateur sur le site
Bonjour,

un excellent article - merci! Fonctionne presque pour moi.

Voici le problème : j'ai un fichier csv délimité par des canaux. J'ai changé le délimiteur de fenêtres par défaut (via le panneau de configuration/les paramètres régionaux) en "|". Ainsi, lorsque j'ouvre le fichier csv avec Excel, il s'ouvre, lit directement et analyse correctement les champs en colonnes. Tout ce que j'ai à faire est de sauvegarder en xls ou xlsx, c'est fait. Quand je regarde votre code, cela devrait être ce que fait le code : il ouvre les fichiers csv dans un dossier, les enregistre au format xls ou xlsx, et boucle dessus.

Voici le problème : lorsque j'ouvre ces fichiers Excel, les délimiteurs de canal sont toujours là, rien n'est analysé dans les colonnes. C'était le comportement comme avant ma modification du paramètre par défaut délimité par un canal dans les paramètres Windows. Il semble donc qu'Excel n'utilise pas ces paramètres Windows. J'ai vérifié cela en remplaçant les délimiteurs de pipe par des délimiteurs de virgule dans une copie du fichier - des deux fichiers, le délimité par pipe est resté non analysé, le délimité par des virgules a été converti très bien.

Avez-vous une idée de l'endroit où cette délimitation par virgule intégrée à Excel peut être trouvée ou modifiée, ou s'il existe un moyen dans le code de le faire ? Je préférerais ne PAS avoir à faire une recherche et remplacer, puis enregistrer...

Merci HC
HC
Ce commentaire a été minimisé par le modérateur sur le site
Si vous souhaitez diviser les données en colonne en fonction du délimiteur de tuyau dans Excel, utilisez simplement la fonction Text to Columns pour diviser les données par / après avoir converti les fichiers csv en xls.
Maison ensoleillé
Ce commentaire a été minimisé par le modérateur sur le site
Ne rend pas vraiment le code utile pour les fichiers Excel.
Sam.
Ce commentaire a été minimisé par le modérateur sur le site
Salut, super script qui a fonctionné pour moi après avoir essayé tous les autres scripts disponibles dans google. J'ai ajouté quelques lignes supplémentaires qui effectuent l'opération de texte en colonnes que je veux. Quelqu'un peut-il m'aider à modifier le script en spécifiant l'emplacement du dossier dans le lecteur local au lieu d'ouvrir la boîte de dialogue car j'automatise réellement le système
. Merci d'avance
Pramod Koliar
Ce commentaire a été minimisé par le modérateur sur le site
Hi
Pourriez-vous partager le script qui exécute le texte en colonnes ? ?
Best Regards
Jacobo Fernández Obeso
Ce commentaire a été minimisé par le modérateur sur le site
Great Script après avoir recherché tous les autres scripts disponibles sur Google. Quelqu'un peut-il aider à modifier ce script en spécifiant un emplacement de dossier dans le lecteur local au lieu de lui permettre d'ouvrir la boîte de dialogue car j'automatise réellement le système. Merci d'avance
pramod koliar
Ce commentaire a été minimisé par le modérateur sur le site
Cool morceau de code. Très utile. Si je ne me trompe pas, le code pour .xlsx ressemble au code .xls.

Cette ligne:
ActiveWorkbook.SaveAs Replace(xSPath & xCSVFile, ".csv", ".xls", vbTextCompare), xlWorkbookDefault

Je suppose que cela devrait être: ".csv" , ".xlsx", vbTextCompare etc.
stb
Ce commentaire a été minimisé par le modérateur sur le site
J'ai changé le code ainsi, décrit ci-dessus; maintenant le script fonctionne comme prévu : il génère des fichiers xlsx
iBrezel
Ce commentaire a été minimisé par le modérateur sur le site
non tu ne l'as pas fait. il dit toujours xls dans les deux versions.
ton
Ce commentaire a été minimisé par le modérateur sur le site
cette macro n'affiche pas mon fichier csv
Rose
Ce commentaire a été minimisé par le modérateur sur le site
Un petit problème avec ce code est qu'une certaine précision (nombre de décimales) peut être perdue lors de l'ouverture d'un csv et de son enregistrement au format xlsx.
La façon d'éviter cela est de sélectionner toutes les cellules juste après l'ouverture, de définir le nombre de décimales sur le montant souhaité (15 pour moi personnellement), et * puis * d'enregistrer au format xlsx

Sinon, le xlsx a moins de détails (moins de précision en termes de décimales) que le csv d'origine, ce qui peut entraîner des problèmes dans certaines applications
Sam
Ce commentaire a été minimisé par le modérateur sur le site
il change mon format de colonne de date de jj-mm-aaaa à jj/mm/aaaa, s'il vous plaît quelqu'un peut-il aider à empêcher ce script de changer les formats de colonne.
Merci beaucoup.
vipère
Ce commentaire a été minimisé par le modérateur sur le site
Bonjour, viper, après la conversion, vous pouvez les reformater, sélectionner les dates et cliquer avec le bouton droit pour choisir Formater les cellules dans le menu contextuel, dans la boîte de dialogue Format de cellule, sous l'onglet Nombre, cliquez sur Personnalisé dans la liste Catégorie, puis tapez mm-jj- aaaa dans la zone de texte de la section de droite. Ou si vous avez Kutools for Excel, appliquez Appliquer la mise en forme de la date pour modifier le format de la date selon vos besoins.
Maison ensoleillé
Ce commentaire a été minimisé par le modérateur sur le site
excellent article. Comment puis-je enregistrer tous les fichiers convertis dans un nouvel emplacement ? Pouvez-vous s'il vous plaît mettre à jour le code et me l'envoyer. Comme permettre à l'utilisateur de choisir son dossier de destination.


Merci
Aaqil Rahman
Ce commentaire a été minimisé par le modérateur sur le site
Vous avez une erreur sur la ligne 22 du csv vers xlsx
Avec erreur - ActiveWorkbook.SaveAs Replace(xSPath & xCSVFile, ".csv", ".xls", vbTextCompare), xlWorkbookDefault
Corrigé - ActiveWorkbook.SaveAs Replace(xSPath & xCSVFile, ".csv", ".xslx", vbTextCompare), xlWorkbookDefault
Jason
Ce commentaire a été minimisé par le modérateur sur le site
Merci pour votre rappel, je l'ai mis à jour, merci encore.
Maison ensoleillé
Ce commentaire a été minimisé par le modérateur sur le site
J'obtiens une erreur "Object variable or with block variable not set" pour cette ligne :
xFd.Title = "/Users/[my.name]/Documents/[myFolder]" >> c'est le chemin d'un dossier particulier sur mon ordinateur où je fais la conversion (le dossier contient un tas de fichiers csv à l'intérieur )

Est-ce que je fais quelque chose de mal ici?
Dixon
Ce commentaire a été minimisé par le modérateur sur le site
Cela fonctionne pour moi, mais l'extension de fichier ne change pas. Des conseils ?
rouge-gorge
Ce commentaire a été minimisé par le modérateur sur le site
Pareil pour moi - tous les fichiers restent .csv.
Steve Hurm
Ce commentaire a été minimisé par le modérateur sur le site
Tous les fichiers csv que vous choisissez ont été enregistrés en tant que nouveaux fichiers Excel, les fichiers originaux (csv) ne changent pas, il existe de nouveaux fichiers Excel avec le même contenu.
Maison ensoleillé
Ce commentaire a été minimisé par le modérateur sur le site
J'ai eu le même problème. Si votre fichier source a une extension en majuscules (.CSV), cela ne fonctionne pas. Remplacez simplement .csv par .CSV dans le code de la ligne 22 et cela devrait fonctionner. Eh bien, au moins pour moi, il l'a fait.
Pascal
Ce commentaire a été minimisé par le modérateur sur le site
Comment incorporer du code dans la routine de fichier batch XLSX pour séparer les données en colonnes séparées ? Le code partagé convertit le fichier d'un .csv à un .xlsx, mais il ne sépare pas les données en colonnes séparées.
Daniel
Ce commentaire a été minimisé par le modérateur sur le site
oui ce n'est pas le travail.
mehmet
Ce commentaire a été minimisé par le modérateur sur le site
Bonjour compagnons

Adiciona a lo que hace el script, quisiera poder convert inmediatamente el texto en columnas, por la opción que no es delimitado por ningún tipo de caracter, adicional los tamaños de las columnas son diferentes. Vale la pena aclarar que si tomo cada archivo por separado y le aplico la opción de texto en columnas, bajo esa opción los puedo convertir sin problemas, abriéndolos uno por uno, pero si grabo esa macro y le aplico la misma macro a todos, inclusive usando la opción de "USAR REFERENCIAS RELATIVAS", no hace el proceso bien, porque el graba las posiciones de la delimitación del archivo que uso de ejemplo, pero necesito que lo aplique nuevo a cada archivo, es decir, como si abriera cada archivo nuevo y le hiciera manualmente la opción de delimitación y no aplique los valores de ubicación de las columnas identificados in el archivo ejemplo.

Ya inserte esa opcion en este archivo, sin embargo pasa lo que indico en la lineas arriba, solo requiero saber como puedo hacer para aplicar la conversion a cada archivo, aplicando la delimitacion del campo como su fuera un archivo nuevo.


Workbooks.Open Filename :=xSPath & xCSVFile
ActiveWorkbook.SaveAs Replace(xSPath & xCSVFile, ".csv", ".xlsx", vbTextCompare), xlWorkbookDefault

ESTA PARTE ES LA QUE AGREGUE APPLICANDO EL FORMATO DEL TEXTO A COLUMNAS

StartRow :=1, DataType :=xlFixedWidth, FieldInfo :=Array(Array(0, 1), Array(18 _
, 1), Array(38, 1)), TrailingMinusNumbers :=True
ActiveCell.Cells.Select
ActiveCell.Cells.EntireColumn.AutoFit
ActiveCell.Offset(1, 0).Range("A1").Sélectionner
ActiveWorkbook.Sauvegarder

HASTA AQUI AGREGUE YO

ActiveWorkbook.Fermer
Windows(xWsheet).Activer
xFichierCSV = Dir

boucle
Application.StatusBar = False
Application.DisplayAlerts = Vrai
End Sub

No se si me hago explicar bien, pero es mi problema.
Luis Ron
Il n'y a pas encore de commentaires postés ici
Laisser vos commentaires
Publier en tant qu'invité
×
Évaluez cet article:
0  Personnages
Emplacements suggérés