Microsoft 365 convertir un fichier excel en csv

patrice3450

XLDnaute Nouveau
Bonjour,
je voudrais automatiser la création de plusieurs fichiers csv à partir de fichiers excel
un fichier excel aura plusieurs classeurs et donc créer un fichier csv de chacun des classeurs pour chaque fichier excel présent dans mon répertoire
merci pour votre aide
 

xUpsilon

XLDnaute Accro
Bonjour,

Voir le code suivant à adapter à votre besoin, trouvé sur stackoverflow en deux clics.
Code:
Sub SaveWorksheetsAsCsv()

Dim WS As Excel.Worksheet
Dim SaveToDirectory As String

Dim CurrentWorkbook As String
Dim CurrentFormat As Long

CurrentWorkbook = ThisWorkbook.FullName
CurrentFormat = ThisWorkbook.FileFormat
' Store current details for the workbook
SaveToDirectory = "H:\test\"

For Each WS In Application.ActiveWorkbook.Worksheets
    WS.SaveAs SaveToDirectory & WS.Name, xlCSV
Next

Application.DisplayAlerts = False
ThisWorkbook.SaveAs Filename:=CurrentWorkbook, FileFormat:=CurrentFormat
Application.DisplayAlerts = True
' Temporarily turn alerts off to prevent the user being prompted
'  about overwriting the original file.

End Sub

Bonne journée,
 

job75

XLDnaute Barbatruc
Téléchargez les fichiers joints dans le même dossier (le bureau), ouvrez le fichier Pilote.xlsm et exécutez la macro du bouton :
VB:
Sub Creer_CSV()
Dim chemin$, fichier$, n&, w As Worksheet, nf&
chemin = ThisWorkbook.Path & "\"
fichier = Dir(chemin) '1er fichier du dossier
Application.ScreenUpdating = False
Application.DisplayAlerts = False 'si un fichier est déjà créé
On Error Resume Next
While fichier <> ""
    If fichier <> ThisWorkbook.Name And (Right(fichier, 5) = ".xlsx" Or Right(fichier, 5) = ".xlsm") Then
        Workbooks(fichier).Close False 'si le fichier est ouvert on le ferme
        With Workbooks.Open(chemin & fichier) 'ouverture du fichier
            n = n + 1
            For Each w In .Worksheets
                nf = nf + 1
                w.Select
                .SaveAs chemin & fichier & "-" & w.Name & ".csv", xlCSV
            Next
            .Close False 'fermeture
        End With
    End If
    fichier = Dir 'fichier suivant
Wend
MsgBox n & " fichier(s) Excel traité(s), " & nf & " fichier(s) CSV créé(s)"
End Sub
 

Pièces jointes

  • Pilote.xlsm
    17.7 KB · Affichages: 5
  • Classeur1.xlsx
    9.2 KB · Affichages: 3
  • Classeur2.xlsx
    9.2 KB · Affichages: 3
Dernière édition:

patrice3450

XLDnaute Nouveau
Bonjour,

Voir le code suivant à adapter à votre besoin, trouvé sur stackoverflow en deux clics.
Code:
Sub SaveWorksheetsAsCsv()

Dim WS As Excel.Worksheet
Dim SaveToDirectory As String

Dim CurrentWorkbook As String
Dim CurrentFormat As Long

CurrentWorkbook = ThisWorkbook.FullName
CurrentFormat = ThisWorkbook.FileFormat
' Store current details for the workbook
SaveToDirectory = "H:\test\"

For Each WS In Application.ActiveWorkbook.Worksheets
    WS.SaveAs SaveToDirectory & WS.Name, xlCSV
Next

Application.DisplayAlerts = False
ThisWorkbook.SaveAs Filename:=CurrentWorkbook, FileFormat:=CurrentFormat
Application.DisplayAlerts = True
' Temporarily turn alerts off to prevent the user being prompted
'  about overwriting the original file.

End Sub

Bonne journée,
merci pour la réponse, je teste et adapte si besoin et si j't arrive à mon environnement et besoin
 

patrice3450

XLDnaute Nouveau
Téléchargez les fichiers joints dans le même dossier (le bureau), ouvrez le fichier Pilote.xlsm et exécutez la macro du bouton :
VB:
Sub Creer_CSV()
Dim chemin$, fichier$, n&, w As Worksheet, nf&
chemin = ThisWorkbook.Path & "\"
fichier = Dir(chemin) '1er fichier du dossier
Application.ScreenUpdating = False
Application.DisplayAlerts = False 'si un fichier est déjà créé
On Error Resume Next
While fichier <> ""
    If fichier <> ThisWorkbook.Name And (Right(fichier, 5) = ".xlsx" Or Right(fichier, 5) = ".xlsm") Then
        Workbooks(fichier).Close False 'si le fichier est ouvert on le ferme
        With Workbooks.Open(chemin & fichier) 'ouverture du fichier
            n = n + 1
            For Each w In .Worksheets
                nf = nf + 1
                w.Select
                .SaveAs chemin & fichier & "-" & w.Name & ".csv", xlCSV
            Next
            .Close False 'fermeture
        End With
    End If
    fichier = Dir 'fichier suivant
Wend
MsgBox n & " fichier(s) Excel traité(s), " & nf & " fichier(s) CSV créé(s)"
End Sub
merci cela fonctionne, j'ai adapté le résultat sans le nom du fichier devant mais il me reste à tester l'imput du fichier csv dans une base de donnée
 

patrice3450

XLDnaute Nouveau
Bonjour patrice3450, le forum,

Alors comment faites-vous si les noms des feuilles sont les mêmes ???

A+
j'ai conçu mes différents classeurs excel avec des noms de feuilles différents car se sont des virus ou bactéries différentes
en fait j'ai plusieurs choses à faire :
je récupère des fichiers excel dans lesquels il y a plusieurs feuilles (pas le même nombre)
chaque feuille de chaque fichier est un tableau dont je dois retirer la première ligne et chaque feuille de chaque fichier doit être enregistré en csv
j'arrive a peu prêt à faire chaque étape manuellement, ou avec des macros, le fichier csv le plus satisfaisant que je fais est avec kutools+ (diviser le classeur)
je voudrais faire tout cela avec le moins de manipulation possible en lançant un bouton ou plusieurs si pas possible avec un sur un répertoire ou je mettrais tous mes fichiers excel à traiter
 

Pièces jointes

  • tableaux_virus_28.09.22.xlsx
    28.4 KB · Affichages: 1

job75

XLDnaute Barbatruc
Si l'extension de tous les fichiers sources est ".xlsx" :
VB:
Sub Creer_CSV()
Dim chemin$, fichier$, n&, w As Worksheet, nf&
chemin = ThisWorkbook.Path & "\"
fichier = Dir(chemin & "*.xlsx") '1er fichier du dossier
Application.ScreenUpdating = False
Application.DisplayAlerts = False 'si un fichier est déjà créé
While fichier <> ""
    On Error Resume Next
    Workbooks(fichier).Close False 'si le fichier est ouvert on le ferme
    On Error GoTo 0
    With Workbooks.Open(chemin & fichier) 'ouverture du fichier
        n = n + 1
        For Each w In .Worksheets
            nf = nf + 1
            w.Select
            w.UsedRange.Rows(1).Delete 'supprime la 1ère ligne
            .SaveAs chemin & w.Name & ".csv", xlCSV
        Next
        .Close False 'fermeture
    End With
    fichier = Dir 'fichier suivant
Wend
MsgBox n & " fichier(s) Excel traité(s), " & nf & " fichier(s) CSV créé(s)"
End Sub
 

Pièces jointes

  • Pilote(1).xlsm
    17.4 KB · Affichages: 4
  • tableaux_virus_28.09.22.xlsx
    28.4 KB · Affichages: 2

Discussions similaires

Statistiques des forums

Discussions
315 096
Messages
2 116 175
Membres
112 677
dernier inscrit
Justine11