Exporter en CSV
Résolu
senecartour
Messages postés
324
Date d'inscription
Statut
Membre
Dernière intervention
-
Le Pingou Messages postés 12249 Date d'inscription Statut Contributeur Dernière intervention -
Le Pingou Messages postés 12249 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
J'ai créé une macro pour exporter en CSV des plages de données après les avoir définies.
Je me suis basé sur une macro que m'avait proposé "LePingou" qui fonctionne bien sur mon ancien fichier. Je remercie au passage "Lepingou".
J'ai essayé de l'adapter dans cette situation mais je n'arrive pas.
En résumé, j'ai défini des plages qui m'intéressent dans une base de données et souhaiterais exporter uniquement les plages sélectionnées en CSV.
La macro se plante sur une ligne au niveau des codes permettant d'exporter les données en csv mais je n'arrive pas à trouver l'origine du problème.
Voici le fichier avec la macro: https://www.cjoint.com/c/DLcmm55f8sT
Merci pour votre aide.
J'ai créé une macro pour exporter en CSV des plages de données après les avoir définies.
Je me suis basé sur une macro que m'avait proposé "LePingou" qui fonctionne bien sur mon ancien fichier. Je remercie au passage "Lepingou".
J'ai essayé de l'adapter dans cette situation mais je n'arrive pas.
En résumé, j'ai défini des plages qui m'intéressent dans une base de données et souhaiterais exporter uniquement les plages sélectionnées en CSV.
La macro se plante sur une ligne au niveau des codes permettant d'exporter les données en csv mais je n'arrive pas à trouver l'origine du problème.
Voici le fichier avec la macro: https://www.cjoint.com/c/DLcmm55f8sT
Merci pour votre aide.
A voir également:
- Exporter en CSV
- Exporter favoris chrome - Guide
- Exporter conversation sms android - Guide
- Exporter favoris firefox - Guide
- Exporter photos google photos - Guide
- Exporter excel en pdf sur une page - Guide
21 réponses
Bonjour,
TU donnes un chemin.. mais sans nom de fichier...
par exemple :
TU donnes un chemin.. mais sans nom de fichier...
par exemple :
Open chemin & "\test.csv" For Output As #1
J'ai déjà donné le chemin dans:
Set FSO = CreateObject("Scripting.FileSystemObject")
If Not (FSO.FolderExists(chemin & "\EXP")) Then
FSO.CreateFolder (chemin & "\EXP")
End If
If Not (FSO.FolderExists(chemin & "\EXP\" & feuille)) Then
FSO.CreateFolder (chemin & "\EXP\" & feuille)
End If
Je ne pense pas que ce soit un problème de chemin. Aussi, j'ai mis ce que vous m'avez conseillé mais il y a juste le repertoire qui est crée mais pas le fichier CSV.
Pourriez-vous, s'il vous plâit, jeter un coup d'oeil sur le fichier joint?
Merci d'avance!
Set FSO = CreateObject("Scripting.FileSystemObject")
If Not (FSO.FolderExists(chemin & "\EXP")) Then
FSO.CreateFolder (chemin & "\EXP")
End If
If Not (FSO.FolderExists(chemin & "\EXP\" & feuille)) Then
FSO.CreateFolder (chemin & "\EXP\" & feuille)
End If
Je ne pense pas que ce soit un problème de chemin. Aussi, j'ai mis ce que vous m'avez conseillé mais il y a juste le repertoire qui est crée mais pas le fichier CSV.
Pourriez-vous, s'il vous plâit, jeter un coup d'oeil sur le fichier joint?
Merci d'avance!
Je ne sais pas ce que tu essayais de faire au juste .. mais visiblement tu essayais de concatener un objet RANGE avec du text....
Essayes ce code :
Essayes ce code :
Sub export_csv() Dim separateur, cellule, feuille, chemin, strChaine As String Dim lideb, codeb, lifin, cofin, cofintitre As Long Dim plagetitre, plageentete, plagetitrechamp, plagedonnees, plagetotale As Range Dim FSO As Object Dim ligne_precedente As Integer separateur = "^" chemin = Application.ActiveWorkbook.Path feuille = ActiveSheet.Name 'Je défini les bornes que je vais utiliser pour la définition de mes plages cofintitre = Range("B1").End(xlToRight).Column lideb = 7 codeb = 2 lifin = Cells(Rows.Count, codeb).End(xlUp).Row cofin = Cells(lideb, Columns.Count).End(xlToRight).Column 'Je défini le chemin d'accès du répertoire de dépôt de mes fichier csv Set FSO = CreateObject("Scripting.FileSystemObject") If Not (FSO.FolderExists(chemin & "\EXP")) Then FSO.CreateFolder (chemin & "\EXP") End If If Not (FSO.FolderExists(chemin & "\EXP\" & feuille)) Then FSO.CreateFolder (chemin & "\EXP\" & feuille) End If 'Je défini mes quatre plages Set plagetitre = Range(Cells(1, 2), Cells(1, cofintitre)) plagetitre.Select Set plageentete = Range(Cells(2, 2), Cells(2, cofintitre)) plageentete.Select Set plagetitrechamp = Range(Cells(3, 2), Cells(3, cofintitre)) plagetitrechamp.Select Set plagedonnees = Range(Cells(lideb, codeb), Cells(lifin, cofintitre)) plagedonnees.Select Set plagetotale = Union(plageentete, plagetitrechamp, plagedonnees) 'J'exporte ma plage totale en CSV 'C'est à ce niveau que je rencontre des problèmes Open chemin & "\test.csv" For Output As #1 ligne_precedente = plageentete.Row For Each cell In plagetotale 'On concatene les cellules avec le séparateur.. strChaine = strChaine & separateur & cell.Value 'On passe à la ligne suivante If (cell.Row > ligne_precedente) Then strChaine = strChaine & vbCrLf End If ligne_precedente = cell.Row Next 'On retire le premier caractère separateur strChaine = rigth(strChaine, Len(strChaine) - 1) 'On écrit le fichier Print #1, strChaine strChaine = "" 'Fermeture du fichier Close #1 Set FSO = Nothing Set plagedat = Nothing Set Plagetit = Nothing MsgBox "Fichier : " & chefichcsv & " disponible" End Sub
Bonjour
Voila encore une macro
regarde bien deja la macro copy
http://cjoint.com/?0Lco1X50Eqt
A+
Maurice
Voila encore une macro
regarde bien deja la macro copy
http://cjoint.com/?0Lco1X50Eqt
A+
Maurice
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour Maurice,
Le lien que vous m'avez donné ne fonctionne pas.
Pourriez-vous, s'il vous plaît, me l'envoyer une nouvelle fois?
Merci!
Le lien que vous m'avez donné ne fonctionne pas.
Pourriez-vous, s'il vous plaît, me l'envoyer une nouvelle fois?
Merci!
Maurice,
J'ai adapté une nouvelle fois votre code en l'adaptant à mon fichier. Plus besoin de copier les plages dans un autre onglet pour ensuite exporter en csv.
L'export se fait directement depuis l'onglet.
Lorsque je lance ma macro, le fichier csv est cré mais ne se met pas dans le repertoire export.
Aussi, mon souhait est de mettre chaque fichier csv dans un sous repertoire portant le nom de l'onglet.
EX; Si j'exporte l'onglet "donnees", le fichier csv qui va porter le nom "donnees.csv" doit se trouver dans un sous repertoire appelé donnees dans le quel on a notre fichier csv.
voici mon code modifié:
Merci d'avance pour votre aide très utile pour moi.
EDIT : Ajout des balises de code (jordane)
J'ai adapté une nouvelle fois votre code en l'adaptant à mon fichier. Plus besoin de copier les plages dans un autre onglet pour ensuite exporter en csv.
L'export se fait directement depuis l'onglet.
Lorsque je lance ma macro, le fichier csv est cré mais ne se met pas dans le repertoire export.
Aussi, mon souhait est de mettre chaque fichier csv dans un sous repertoire portant le nom de l'onglet.
EX; Si j'exporte l'onglet "donnees", le fichier csv qui va porter le nom "donnees.csv" doit se trouver dans un sous repertoire appelé donnees dans le quel on a notre fichier csv.
voici mon code modifié:
Sub CreatRepertoire() Chemin = ActiveWorkbook.Path & "\" MonRep = Chemin & "EXP" If Dir(MonRep, vbDirectory) = "" Then MkDir (MonRep) Call Export(MonRep) End If Call Export(MonRep) End Sub Private Sub Export(Chemin) Dim separateur, trChaine As String Dim lideb, codeb, lifin, cofin, cofintitre As Long Dim plagetitre, plageentete, plagetitrechamp, plagedonnees, plagetotale As Range Dim FSO As Object separateur = "^" Chemin = Application.ActiveWorkbook.Path 'Je défini les bornes que je vais utiliser pour la définition de mes plages cofintitre = Range("B1").End(xlToRight).Column lideb = 7 codeb = 2 lifin = Cells(Rows.Count, codeb).End(xlUp).Row cofin = Cells(lideb, Columns.Count).End(xlToRight).Column 'Je défini mes trois plages à exportrer dans mon fichier csv Set plageentete = Range(Cells(2, 2), Cells(2, cofintitre)) plageentete.Select Set plagetitrechamp = Range(Cells(3, 2), Cells(3, cofintitre)) plagetitrechamp.Select Set plagedonnees = Range(Cells(lideb, codeb), Cells(lifin, cofintitre)) plagedonnees.Select 'Ma plage totale est la somme des trois plages que je vais exporter. Je n'ai pas besoin d'exporter ma plage de titre Set plagetotale = Union(plageentete, plagetitrechamp, plagedonnees) Nomfichier = ActiveSheet.Name Ext = ".csv" Fichier = Nomfichier & Ext 'Chemin = ActiveWorkbook.Path & Application.PathSeparator CheminFiche = Chemin & "\" & Fichier separateur = "^" Nlig = Cells(Rows.Count, 2).End(xlUp).Row Set Plage = plagetotale Open CheminFiche For Output As #1 For Each Lig In Plage.Rows Tmp = "" For Each Cel In Lig.Cells Tmp = Tmp & CStr(Cel.Text) & separateur Next Print #1, Tmp Next Close Set Plage = Nothing MsgBox "Terminer" End Sub
Merci d'avance pour votre aide très utile pour moi.
EDIT : Ajout des balises de code (jordane)
Merci de bien vouloir utiliser la coloration syntaxique (les balises de code) lorsque tu postes du code sur le forum.
Explications disponibles ici :
https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code
Explications disponibles ici :
https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code
re
je pense que tes Set sont pas bon
moi je prefere une copy avant car je voie se que je vais transferer HI
ses toi qui voie
A+
Maurice
je pense que tes Set sont pas bon
moi je prefere une copy avant car je voie se que je vais transferer HI
ses toi qui voie
A+
Maurice
Bonjour senecartour,
Si j'ose une petite remarque, pourquoi dans la procédure [Private Sub Export(Chemin)] vous changez le chemin du répertoire (voir ligne : Chemin = Application.ActiveWorkbook.Path) que vous avez créé dans la procédure [Sub CreatRepertoire()] ....... ?
Si j'ose une petite remarque, pourquoi dans la procédure [Private Sub Export(Chemin)] vous changez le chemin du répertoire (voir ligne : Chemin = Application.ActiveWorkbook.Path) que vous avez créé dans la procédure [Sub CreatRepertoire()] ....... ?
Bonjour Lepingou,
J'avoue que je suis perdu. Hier j'ai passé presque toute la soirée pour résoudre le problème, en vain.
Au fait, j'aimerais exporter en CSV en prenant ma méthode de codage que je connais relativement.
J'ai presque réussi à définir ma plage totale à exporter. Mais j'ai du mal à parvenir pour l'extraction de ma plage en CSV. Ma macro beugue sur une ligne.
Maurice m'a donné une autre méthode mais je souhaiterais m'appuyer sur la méthode se trouvant dans mon fichier (voir code).
Je vous joins la nouvelle version de mon fichier: https://www.cjoint.com/c/DLdlLaMQiD3
Merci d'avance pour votre aide.
J'avoue que je suis perdu. Hier j'ai passé presque toute la soirée pour résoudre le problème, en vain.
Au fait, j'aimerais exporter en CSV en prenant ma méthode de codage que je connais relativement.
J'ai presque réussi à définir ma plage totale à exporter. Mais j'ai du mal à parvenir pour l'extraction de ma plage en CSV. Ma macro beugue sur une ligne.
Maurice m'a donné une autre méthode mais je souhaiterais m'appuyer sur la méthode se trouvant dans mon fichier (voir code).
Je vous joins la nouvelle version de mon fichier: https://www.cjoint.com/c/DLdlLaMQiD3
Merci d'avance pour votre aide.
Bonjour,
C'est étonnant de votre part, vous ne répondez pas à la petite remarque.....
De plus j'ai testé la procédure et elle fonctionne à merveille, il faut juste préciser le répertoire que vous voulez utiliser....... ?
Soit ; je veux bien voir ce qu'il est possible de faire avec ce nouveau code, mais vous indiquer la quelle est la macro de base ( il y en a 2 ...)... ?
C'est étonnant de votre part, vous ne répondez pas à la petite remarque.....
De plus j'ai testé la procédure et elle fonctionne à merveille, il faut juste préciser le répertoire que vous voulez utiliser....... ?
Soit ; je veux bien voir ce qu'il est possible de faire avec ce nouveau code, mais vous indiquer la quelle est la macro de base ( il y en a 2 ...)... ?
Bonjour,
Au fait votre remarque concernait la première version de la macro que m'avez proposé Maurice.
Au fait, j'ai codé à ma méthode et je souhaite extraire mes CSV avec cette méthode.
En réponse à votre question, je vous confirme qu'il y a deux codes:
-Le code princiapal est le premier code
-le deuxième code permet d'enregistrer le fichier csv et il est utilisé en fin du code principal via le nom "EnregistrementFichierCSV".
Merci d'avance pour votre aide.
Au fait votre remarque concernait la première version de la macro que m'avez proposé Maurice.
Au fait, j'ai codé à ma méthode et je souhaite extraire mes CSV avec cette méthode.
En réponse à votre question, je vous confirme qu'il y a deux codes:
-Le code princiapal est le premier code
-le deuxième code permet d'enregistrer le fichier csv et il est utilisé en fin du code principal via le nom "EnregistrementFichierCSV".
Merci d'avance pour votre aide.
Bonjour,
Merci pour l'information.
Mise au point pour ceci : Au fait votre remarque concernait la première version de la macro que m'avez proposé Maurice.
C'est non il s'agit du code que vous avez mis dans votre message 2.12.2014 à 15:58
Et là je n'ai pas votre réponse pourquoi vous changez le chemin ..... ?
Si vous mélangez tout on ne va pas sans sortir... !
Merci pour l'information.
Mise au point pour ceci : Au fait votre remarque concernait la première version de la macro que m'avez proposé Maurice.
C'est non il s'agit du code que vous avez mis dans votre message 2.12.2014 à 15:58
Et là je n'ai pas votre réponse pourquoi vous changez le chemin ..... ?
Si vous mélangez tout on ne va pas sans sortir... !
Le PINGOU?
Au fait ne vous fiez pas des précédents codes. Comme évoqué dans mon précédent message, merci de tenir en compte que cette nouvelle version de mon fichier. Et je souhaiterais exporter mes CSV avec la méthode déjà commencée dans le fichier.
je vous rejoins une nouvelle fois la version du fichier précédemment postée.
https://www.cjoint.com/c/DLdpXogzYit
Merci d'avance
Partager son savoir est la meilleure façon d'apprendre!
Au fait ne vous fiez pas des précédents codes. Comme évoqué dans mon précédent message, merci de tenir en compte que cette nouvelle version de mon fichier. Et je souhaiterais exporter mes CSV avec la méthode déjà commencée dans le fichier.
je vous rejoins une nouvelle fois la version du fichier précédemment postée.
https://www.cjoint.com/c/DLdpXogzYit
Merci d'avance
Partager son savoir est la meilleure façon d'apprendre!
Bonjour,
Je tiens encore à ceci, eh bien je constate que c'est approximativement la même procédure que je vous avais corrigée en octobre dernier c'est presque un copier/coller... !
Je vous remercie quand même pour la réponse qui manque... ce n'est pas une bonne man......!
Cela dit j'annule tout et je prends en compte votre dernier lien fourni.
Salutations.
Le Pingou
Je tiens encore à ceci, eh bien je constate que c'est approximativement la même procédure que je vous avais corrigée en octobre dernier c'est presque un copier/coller... !
Je vous remercie quand même pour la réponse qui manque... ce n'est pas une bonne man......!
Cela dit j'annule tout et je prends en compte votre dernier lien fourni.
Salutations.
Le Pingou
Bonjour
Voila sans copy
faire les macro le plus simple possible
A+
Maurice
Voila sans copy
faire les macro le plus simple possible
Sub CreatRepertoire() Chemin = ActiveWorkbook.Path & "\" MonRep = Chemin & "EXP" If Dir(MonRep, vbDirectory) = "" Then MkDir (MonRep) End If Call Export(MonRep) End Sub Private Sub Export(Chemin) NonFic = ActiveSheet.Name Ext = ".csv" Sep = "^" Fichier = NonFic & Ext CheminFiche = Chemin & "\" & Fichier ' -------------- lifin = Cells(Rows.Count, 2).End(xlUp).Row Set A = Range(Cells(2, 2), Cells(3, 7)) Set B = Range(Cells(7, 2), Cells(lifin, 7)) Set Plage = Union(A, B) Open CheminFiche For Output As #1 For Each Lig In Plage.Rows Tmp = "" For Each Cel In Lig.Cells Tmp = Tmp & CStr(Cel.Text) & Sep Next Print #1, Tmp Next Close Set Plage = Nothing MsgBox "Terminer" End Sub
A+
Maurice
Bonjour LePingou,
Super! c'était ce que je voulais. Mais j'ai juste une question.
Dans le fichier CSV généré, je ne souhaite pas obtenir le séparateur à la fin des lignes d'entête et des titres de champs.
Par contre, pour la plage de données, le séparateur doit être exister aussi à la dernière ligne (comme c'est le cas).
Est-il possible de trouver une solution, pour supprimer les séparateur (^) dans les lignes d'entête et de titre du fichier CSV?
Merci d'avance.
Super! c'était ce que je voulais. Mais j'ai juste une question.
Dans le fichier CSV généré, je ne souhaite pas obtenir le séparateur à la fin des lignes d'entête et des titres de champs.
Par contre, pour la plage de données, le séparateur doit être exister aussi à la dernière ligne (comme c'est le cas).
Est-il possible de trouver une solution, pour supprimer les séparateur (^) dans les lignes d'entête et de titre du fichier CSV?
Merci d'avance.
Bonjour,
Je vous laisse lire cette définition :
Définition : Fichier CSV
CSV est un format informatique permettant de stocker des données tabulaires dans un fichier texte.
Chaque ligne du fichier correspond à une ligne du tableau. Les valeurs de chaque colonne du tableau sont séparées par un caractère de séparation, en général une virgule ou un point-virgule. Chaque ligne est terminée par un caractère de fin de ligne (line break).
Toutes les lignes contiennent obligatoirement le même nombre de valeurs (donc le même nombre de caractères de séparation). Les valeurs vides doivent être exprimées par deux caractères de séparation contigus.
La taille du tableau est le nombre de lignes multiplié par le nombre de valeurs dans une ligne.
La première ligne du fichier peut être utilisée pour exprimer le nom des colonnes
Je vous laisse lire cette définition :
Définition : Fichier CSV
CSV est un format informatique permettant de stocker des données tabulaires dans un fichier texte.
Chaque ligne du fichier correspond à une ligne du tableau. Les valeurs de chaque colonne du tableau sont séparées par un caractère de séparation, en général une virgule ou un point-virgule. Chaque ligne est terminée par un caractère de fin de ligne (line break).
Toutes les lignes contiennent obligatoirement le même nombre de valeurs (donc le même nombre de caractères de séparation). Les valeurs vides doivent être exprimées par deux caractères de séparation contigus.
La taille du tableau est le nombre de lignes multiplié par le nombre de valeurs dans une ligne.
La première ligne du fichier peut être utilisée pour exprimer le nom des colonnes