EXCEL, VBA : exporter des données Excel dans un fichier CSV

Il est courant d’exporter sous la forme d’un fichier texte des données produites ou mises en forme sur EXCEL en vue d’une intégration dans un logiciel tiers ; il en est ainsi, par exemple, d’écritures comptables.

Ces opérations d’exportation gagnent à être automatisées avec une macro VBA lorsqu’elles sont répétées.

L’exemple qui suit sélectionne une plage de cellules Excel, la copie en mémoire, la colle dans une feuille créée spécialement à cet effet puis la sauvegarde au format CSV (texte).

ClasseurEcritures.Sheets(1).Range(PremièreColonne & LignedébutEcritures & ":" & DernièreColonne & LignedébutEcritures - 1 + NumEchéancier * 3).Select
Selection.Copy
Workbooks.Add
ActiveSheet.Paste
Application.CutCopyMode = False
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:=s, FileFormat:=xlCSV, CreateBackup:=False
ActiveWindow.Close
Application.DisplayAlerts = True

Ce code se décompose ainsi :

Sélection des données à exporter

ClasseurEcritures.Sheets(1).Range(PremièreColonne & LignedébutEcritures & ":" & DernièreColonne & LignedébutEcritures - 1 + NumEchéancier * 3).Select

Cette ligne de code sélectionne (Select) la plage de données (ici A10 à G15) à exporter (Range) de la première feuille (Sheets(1)) située dans le classeur des écritures.

Ecritures à exporter

Selection.Copy

Copie la sélection en mémoire (équivalent à la combinaison des touches <Contrôle> + <C>).

Exportation des données

Workbooks.Add

Crée un nouveau classeur.

ActiveSheet.Paste

Colle les données dans la feuille active (première feuille du classeur nouvellement créé).

Application.CutCopyMode = False

Rend le presse-papier disponible et vide.

Application.DisplayAlerts = False

Cette commande désactive les messages d’alerte lors de la fermeture d’un Excel. Ce qui s’avère utile pour éviter à l’utilisateur de répondre aux messages l’alertant sur le risque de perte de données liés au changement de format de fichier. La commande Application.DisplayAlerts = True rétablit les messages d’alerte.

ActiveWorkbook.SaveAs Filename:=s, FileFormat:=xlCSV, CreateBackup:=False

Sauvegarde (SaveAs) le classeur actif (ActiveWorkbook) au format CSV (FileFormat:=xlCSV) sous le nom contenu dans la variable ‘s’. SaveAs est l’équivalent de Fichier / Enregistrer sous…

Enregistrer sous... fichier CSV

Enregistrer sous… fichier CSV

 

ActiveWindow.Close

Ferme la fenêtre du classeur.

Le fichier contenant les données exportées (en l’occurrence des écritures comptables) est maintenant disponible tout prêt à être importé dans la comptabilité :

Ecritures exportées en CSV

Ecritures exportées en CSV

Tous les articles en rapport avec la conversion de fichier.

Approfondir le sujet : Programmer en VBA / Découvrir la série d’articles Maîtriser Excel

Share Button
The following two tabs change content below.
Après seize années passées en cabinet d’expertise-comptable et de commissariat aux comptes (où j’ai exercé comme expert-comptable et chef de mission audit), j’ai pris le poste de directeur comptable d’un groupe de distribution automobile en novembre 2014. Au cours de ma carrière, j’ai acquis une expérience significative en audit et en exploitation des systèmes d’information (analyse de données, automatisation des tâches, programmation informatique) au service de la production des comptes annuels et consolidés. C’est cette expérience personnelle et ma passion pour l’informatique que je partage sur ce blog. Mon CV / Réalisations personnelles et projets informatiques / Ma collection / Me contacter

13 commentaires

  1. Pingback: Format du fichier d’importation d’écritures comptables DCSnet – Audit & Systèmes d'Information

  2. bonsoir ,
    j’ai un petit problème j’ai pas trouver le code spécifique pour
    j’ai fait un interface en VBA excel qui importe des fichiers excel et l’exporter dans un seul fichier externe fermer .xls donc je veux terminer mon code de faire
    la lecture de ce fichier fermer .xls et l’afficher sur notre page actuel excel

    voila le code mais n’est pas complet

    Dim ligne_debut As Integer: Dim ligne_fin As Integer
    Dim clonne_debut As Integer: Dim colonne_fin As Integer
    Dim ligne_enCours As Integer: Dim colonne_enCours As Integer

    Private Sub fermer_Click()

    End Sub

    Private Sub exporter_Click()
    Dim nom_fichier As String
    ligne_debut = 1: colonne_debut = 1
    ligne_enCours = ligne_debut: colonne_enCours = colonne_debut
    For i = 0 To liste_fichiers.ListCount – 1

    lecture (liste_fichiers.List(i))
    Next i
    traitement
    nom_fichier = Application.GetSaveAsFilename(fileFilter:=”Text Files (*.xls), *.xls”)
    sortie.Value = nom_fichier

    lecture (nom_fichier)

    End Sub

    Private Sub importer_Click()
    Dim fichier_choisi As String
    fichier_choisi = Application.GetOpenFilename(“Text Files (*.xls), *.xls”, , “selectionner un fichiers EXCEL”)
    If (LCase(fichier_choisi) “faux” And fichier_choisi “0”) Then
    liste_fichiers.AddItem (fichier_choisi)

    End If

    End Sub

    Private Sub ecriture()

    End Sub
    Private Sub lecture(fichier As String)

    End Sub

    Private Sub traitement()

    End Sub

    si vous pouvez m’aider , merci d’avance .

  3. Bonsoir,
    Quelle partie de votre code vous pose problème exactement ? Je vois bien qu’il n’est pas finalisé. Je peux vous aider à trouver une solution pour résoudre une difficulté précise mais je ne vais pas rédiger votre programme.
    Bien cordialement,
    Benoît RIVIERE

  4. Bonjour,
    En enregistrant en CSV (format xlCSV), des guillemets sont rajoutés autour des cellules. Votre exemple ne semble pas le mentionner…
    Comment faites vous pour supprimer les guillemets dnas l’enregistrement CSV?
    Je vous remercie.
    Louis

  5. Bonjour,
    je travail dans un service des eaux, et afin d’optimiser le travail de mon service je dois exporter des éléments de tableau en CSV. Votre poste st donc pour moi le Graal.
    Malheureusement je touche au macro VBA depuis peu de temps et je m’intéresse donc à ces programmations sans mis connaître vraiment je cherche mes informations un peu partout.

    Ce qui me Bloc avec les informations que vous avez données c’est la sélection de ma feuille, je m’explique.
    En ce qui me concerne ma zone a un nom “ZONE_OMEG” donc le Rang (“ZONE_OMEG”) mais en amont il me faut donner le nom de la feuille ou aller chercher cette zone et cela je n’y parvient pas.

    Pour la suite de votre macro j’ai une autre question sur le nom du fichier :
    je n’arrive pas a voir à quoi il fait référence,
    et si il est possible de lui faire pointer sur une case du fichier de base ?

    Dans l’attente de votre retour.
    Bien cordialement,
    VICENTE Léo

  6. Bonjour,
    Merci de votre intérêt pour mes travaux.
    Pour récupérer le nom d’une feuille d’un classeur : variable=Sheets(numéro_feuille).Name ou variable=Activesheet(numéro_feuille).Name. A l’inverse, pour renommer une feuille de travail : Sheets(numéro_feuille).Name= variable ou Activesheet(numéro_feuille).Name= variable (cf exemple : https://www.auditsi.eu/?p=720). Bien entendu, la variable qui contient le nom de la feuille doit être de type String (Dim variable as String).
    Concernant le nom du classeur (FileName), dans mon exemple, il est défini à l’aide de la variable s. Dans cet article, je ne reproduis que des extraits d’un code source. Bien entendu, le nom du classeur doit être défini par une commande “s=… “. Explorez les articles de mon blog qui traitent du VBA, vous trouverez plusieurs exemples qui mettent en œuvre la commande .SaveAs (exemple : https://www.auditsi.eu/?p=7259).
    Pour nommer le classeur à l’aide du contenu d’une cellule (par exemple la cellule A1 de la feuille “Feuille1”) : .SaveAs Sheets(“Feuille1”).Range(“A1″).Value…
    Le dossier de destination est à mentionner dans FileName. Par exemple, pour enregistrer le fichier dans la racine de C: : s=”C:\” & s.
    Bon courage dans vos développements VBA,
    Benoît RIVIERE

  7. Bonjour,

    Merci beaucoup pour votre poste et vos explications.
    Cependant j’aurai besoin d’enregistrer le fichier en format CSV (Macintosh).
    Comment cela est-il réalisable ?

    Je vous remercie.

  8. Bonjour,
    Je ne connais pas du tout l’environnement Mac. Mais je présume que le VBA Excel doit être semblable à celui de Windows. Avez-vous fait une recherche sur votre moteur de recherche préféré ?
    Cordialement,
    B. RIVIERE

  9. Bonjour,

    Vous dites qu’il s’enregistre au format csv sauf que quand on l’ouvre, il s’ouvre mais avec des “,” au lieu des “;, ce qui n’est pas le format csv choisit au départ… Comment faire ?

  10. local:=True ça ne fonctionne pas pour moi.

    La solution est pourtant simple, ce n’est pas xlCSV qu’il faut utiliser avec FileFormat mais plutôt xlCSVUTF8

    Voici le code complet qui fonctionne.

    Sub saveSheetToCSV()

    Dim myCSVFileName As String
    Dim tempWB As Workbook

    myCSVFileName = ThisWorkbook.Path & “\” & ActiveSheet.Name & “.csv”

    ActiveSheet.Copy
    Set tempWB = ActiveWorkbook

    With tempWB
    .SaveAs Filename:=myCSVFileName, FileFormat:=xlCSVUTF8, Local:=True, CreateBackup:=False
    .Close
    End With
    End Sub

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.