IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Exporter en csv les sheets via VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2009
    Messages : 212
    Par défaut Exporter en csv les sheets via VBA
    Hello tout le monde,

    Je souhaite exporter les N sheets d'un fichier excel
    - au format csv (j'ai utilisé FileFormat:=xlCSV)
    - avec un séparateur ";" (j'ai utilisé local:=True)
    - (dans l'idéal mais pas mandatory) avec des doubles quotes englobant les champs (pas trouvé de solution)
    - 1 csv par sheet (j'ai bouclé : For Each ws In ActiveWorkbook.Worksheets)
    - les sheets soient générées dans le même répertoire que l'excel de base (j'ai setté file_path = ActiveWorkbook.Path & "\" avant de boucler sur les sheets)
    - Que les fichiers soient encodés en UTF8 (pas trouvé de solution pour le forcer)
    - Que le tout soit fait via le clic d'un bouton placé sur la première sheet, ou encore mieux sur un sheet qui servirait de page d'accueil. (Pas trouvé comment je pourrais exclure la sheet1, qui serait la page d'accueil, de la génération)
    - Compatible excel 2013 et +

    L'un de vous aurait-il un code VB sous la main ou pourrait m'aider à compléter le mien?

    J'ai fait ceci , mais ça bug un peu à la génération de la feuil2. lorsque le fichier est généré il a le contenu de la feuil1. Et lorsque je ferme le fichier xlsm, il demande de re sauver le fichier feuil2.csv...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    Sub saveSheetToCSV()
        Dim ws As Worksheet
        Dim file_path As String
     
        Application.ScreenUpdating = False
        Application.DisplayAlerts = False
     
        file_path = ActiveWorkbook.Path & "\"
        For Each ws In ActiveWorkbook.Worksheets
            ws.Copy
            MsgBox "PATH =" & ThisWorkbook.Path
            MsgBox "Filename =" & file_path & ActiveSheet.Name & ".csv"
            ws.SaveAs Filename:=file_path & ActiveSheet.Name & ".csv", FileFormat:=xlCSV, CreateBackup:=False, local:=True
            ActiveWorkbook.Close
        Next
    End Sub
    Des idées d'amélioration?

    Merci d'avance pour l'aide!

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Il suffit que tu appliques un SaveAs à ws.
    Inutile de faire de Copy et Close.
    https://msdn.microsoft.com/fr-fr/lib.../ff195820.aspx
    Etant donné que le SaveAs est sur la worksheet, ça ne modifiera pas ton fichier source.

    Cela dit, le problème dans ton code, c'est que tu fais le SaveAs sur ws et non sur ActiveWorkbook.

    Je te conseille aussi de supprimer les deux lignes de blocage en début de code ScreenUpdating et DisplayAlerts.

  3. #3
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Bonjour à toi, Bonjour le Forum,

    Si une feuille de travail est copiée sans autre propriété ou méthode, alors elle devient un classeur à part entière, activé de surcroît.
    Et c'est ce classeur qui doit être enregistré.

    Cela dit, il faudrait reporter quels sont les résultats obtenus, et quelles sont les erreurs éventuelles.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2009
    Messages : 212
    Par défaut
    Effectivement mon erreur était le .SaveAs appliqué à la worksheet,
    J'ai mis plutot ActiveWorkbook.SaveAs et c'est ok.

    J'ai par contre laissé
    ActiveWorkbook.Close ==> Sinon les fichiers csv générés s'ouvrent dans une nouvelle fenêtre, ce qui est inutile pour moi.
    ws.Copy ==> Sans ça , ça bug.


    Ce code semble répondre à mes besoins.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    Sub saveSheetToCSV()
        Dim ws As Worksheet
        Dim file_path As String
        Dim sheet_accueil As String
     
        Application.ScreenUpdating = False
        Application.DisplayAlerts = False
     
        file_path = ActiveWorkbook.Path & "\"
        sheet_accueil = "Accueil"
     
        For Each ws In ActiveWorkbook.Worksheets
            ws.Copy
                If StrComp(ActiveSheet.Name, "Accueil") = 1 Then
                    ActiveWorkbook.SaveAs Filename:=file_path & ActiveSheet.Name & ".csv", FileFormat:=xlCSV, CreateBackup:=False, local:=True
                End If
            ActiveWorkbook.Close
        Next
    End Sub
    Pas d'idée de comment :
    -Forcer à UTF8
    -mettre des doubles quotes englobantes
    ?

Discussions similaires

  1. Manipuler les Slicers Via Vba
    Par nouaman1996 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 30/05/2017, 11h59
  2. Export Exel dans Access (*.accdb) via VBA
    Par castiron dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 08/03/2017, 13h07
  3. [XL-2010] Copier Date sans les doublons via VBA ou Formule Matricielle
    Par Goulou95 dans le forum Excel
    Réponses: 2
    Dernier message: 23/03/2016, 16h30
  4. [AC-2010] Import CSV dans ACCESS via VBA
    Par BAYRAL dans le forum VBA Access
    Réponses: 1
    Dernier message: 11/04/2013, 16h52
  5. [XL-2010] Optimiser le téléchargement de fichiers .csv sur internet via VBA
    Par funtim78 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 08/01/2013, 09h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo