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.
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…
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é :
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
Derniers articles parBenoît RIVIERE (voir tous)
- Projet IXP (v1.2beta) : quelques nouvelles de mon interpréteur d’expressions - dimanche 1 décembre 2024
- Nouveautés de l’interpréteur de formules de calcul (v1.1) - dimanche 3 novembre 2024
- Dématérialisation de la facturation : nouvelles mentions obligatoires - lundi 28 octobre 2024
- Interpréteur de formules de calcul en Python - dimanche 13 octobre 2024
- Les données de la facturation électronique - mercredi 9 octobre 2024
Pingback: Format du fichier d’importation d’écritures comptables DCSnet – Audit & Systèmes d'Information
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 .
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
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
En mettant local=False, les guillemets disparaissent!
Merci à vous.
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
Et je voudrais savoir ou es que l’on peut choisir ou enregistrer le ficher final
En vous remerciant encore
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
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.
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
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 ?
Bonjour,
Le séparateur utilisé par le CSV (version US) est la virgule (d’ailleurs le C de CSV = Coma = virgule en Français).
Pour utiliser le ; il faut ajouter à la suite de .SaveAs : local:=True.
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