Macro pour créer .CSV d'au moins 30 colonnes

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

pmfontaine

XLDnaute Occasionnel
Bonjour,
Je cherche une macro me permettant de créer un fichier csv d’au moins 30 colonnes a partir d’une feuille Excel pour une application cartoExplorer
Sur comment ça marche j’ai trouvé une solution partiel, car elle ne marche que pour 28 colonne. Au dela impossible de rajouter des élément à Print #1 , j’ai posé la question sur le forum de comment ça marche, mais ce poste date un peu, et je ne suis pas sur qu’il soit encore surveillé Voir :
Définition de commande macro [Résolu]
Donc je m’adresse a vous.
Pour résumer, j’ai une feuille Excel avec des données sur 30 colonnes, et je veux en VBA créer un fichier cartoexplorer.csv avec les 30 colonnes.
Merci d’avance pour votre aide.
 
Re : Macro pour créer .CSV d'au moins 30 colonnes

Bonsoir

Ce code ne suffit-il pas ?

Code:
Sub Macro1()
ActiveWorkbook.SaveAs Filename:="C:\Temp\classeur1.csv", FileFormat:=xlCSV, CreateBackup:=False
End Sub
EDITION une version plus aboutie (paramétrable)

Pour tester , lancer la macro : exporter
(en modifiant le chemin et le nom du fichier csv)

Code:
Private Sub export_en_CSV(Feuille$, Chemin$, NomFichier_EXPORT$)
Dim fs, a, s$, r&, c&
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set a = fs.CreateTextFile(Chemin & NomFichier_EXPORT & ".csv", True)
    With ThisWorkbook.Sheets(Feuille)
    For r = 2 To .[A65536].End(xlUp).Row
        s = "": c = 1
        While Not IsEmpty(.Cells(r, c))
        s = s & .Cells(r, c) & Chr(59)
            c = c + 1
        Wend
        a.writeline s
    Next r
    End With
End Sub
Code:
Sub exporter()
export_en_CSV "Feuil1", "C:\Temp\", "F_ExportCSV"
End Sub
 
Dernière édition:
Re : Macro pour créer .CSV d'au moins 30 colonnes

Bonjour,
Merci Spaple1600 pour ta proposition de code.
Mais malheureusement ça ne fonctionne pas.

Ton premier code transforme mon fichier Excel en CSV (Le fichier CSV reste ouvert et le fichier Excel est fermé (C’est l’inverse que je voudrais)
Quand je ferme sans enregistrer pour garder le format CSV et que je réouvre, je me retrouve avec un fichier CSV avec les données sur une seule colonne avec une virgule comme séparateur.

Pour le deuxième code j’ai ce message d’erreur.
Erreur d’exécution 9 :
L’indice n’appartient pas à la sélection.
Ce message est pour la ligne :
With ThisWorkbook.Sheets(Feuille)
Ma feuille Excel se nome cartoexploreur j’ai essayé :
With ThisWorkbook.Sheets(cartoexploreur)
Mais même message.

Je joint mon fichier qui marche correctement pour mémory, et qui marche à 28/30 pour Explorer car je n’arrive pas à générer les colonnes 29 et 30.
Voir module 2 ligne Print #1 ..
Bien sur s’il y a une solution avec un code plus simple je suis preneur.
D’avance merci pour votre aide.
 

Pièces jointes

Re : Macro pour créer .CSV d'au moins 30 colonnes

Bonsoir


Le code ci dessous fonctionne
Code:
Sub exporter()
export_en_CSV "Feuil1", "C:\Temp\", "F_ExportCSV"
End Sub
Je l'ai évidemment testé avant de le poster.

Tu dois faire une mauvaise manipulation
 
Re : Macro pour créer .CSV d'au moins 30 colonnes

Bonsoir à tous,
Est encore merci Staple1600 pour ton aide.
Je suis vraiment désolé d'embêter le forum pour quelque chose qui doit être simple puis que tu l’as tester, mais chez moi ça ne marche pas.
Pour info je suis sous vista et Excel 2002
J'ai bien un fichier F_ExportCSV.csv dans Temps, mais quand je l'ouvre,
il y a un message : Impossible de lire le Fichier
Et quand je clique sur OK il s’ouvre, mais il est vide ?
J'ai mis mon fichier de départ avec un bouton pour ta macro qui est dans le module 5.
Et j'ai également mis le fichier F_ExportCSV.csv obtenu.

Mais puisque la solution évoquer sur CommentçaMarche ne semble inspirer personne, ne puis-je pas crée un fichier csv en ayant regrouper les données sur une colonne avec concaténer et un séparateur du type point virgule et dans la même macro, réouvrir ce fichier CSV et de faire en VBA Donnée – Covertire pour retrouver mes données sur toutes mes colonne puis toujours en VBA enregister en csv ?
 

Pièces jointes

Re : Macro pour créer .CSV d'au moins 30 colonnes

Re




C'est normal , il fallait adapter le nom de la feuille !

Sub exporter() 'ici pour test
export_en_CSV "Feuil1", "C:\Temp\", "F_ExportCSV"
End Sub

Avec ton exemple
Code:
Sub exporter() 'ici pour test
export_en_CSV "[B]cartoexploreur[/B]", "C:\Temp\", "F_ExportCSV"
End Sub
 
Dernière édition:
Re : Macro pour créer .CSV d'au moins 30 colonnes

Bonjour,
Dans le code proposé par Staple1600,

Sub exporter() 'ici pour test
export_en_CSV "cartoexploreur", "C:\Temp\", "F_ExportCSV"
End Sub

je vais enregister le fichier créé dans C:\Temp\.
Et je voudrais qu'il s'enregistre dans le même répertoire que le fichier Excel qui fait exportation. Mais j'ai beau essayer de transformer le code suivant pour le code de Stpla1600,

Sub editionmemory()
Dim j, NombreLignes As Integer
Dim str, nom_fichier, Chemin As String
Dim f, fs
Chemin = ThisWorkbook.Path & "\"
' Code
Sheets("memory").Select
On Error Resume Next
Set fs = CreateObject("Scripting.FileSystemObject")
Sheets("BD").Select
NombreLignes = Application.WorksheetFunction.CountA(Range("A1:A65001"))
'NombreLignes = Range("AA1").Value
' On crée le fichier
nom_fichier = Chemin + ActiveSheet.Cells(2, 27).Text
Sheets("memory").Select
Set f = fs.CreateTextFile(nom_fichier, True)
' On écrit dedans
For j = 2 To NombreLignes
str = ActiveSheet.Cells(j, 1).Text
f.writeline str
Next j
' On ferme le fichier
f.Close
End Sub

Mais Je n'arrive à rien

Par la même occasion, dans cette ligne du code si dessus,
nom_fichier = Chemin + ActiveSheet.Cells(2, 27).Text
Quelle est la syntaxe pour ne pas aller cher le nom du fichier à enregistrer mais le mettre directement dans la macro.
du style :
nom_fichier = Chemin + Exporter.csv

Merci d'avance
Patrick
 
Re : Macro pour créer .CSV d'au moins 30 colonnes

Bonjour,
Merci Bertrand pour ton aide.
Je viens de tester :
nom_fichier = Chemin & "\Exporter.csv"
Pour remplacer :
nom_fichier = Chemin + ActiveSheet.Cells(2, 27).Text
Qui fonctionnait, mais qui m'obligé à aller chercher le nom du fichier dans une feuille.
Ta ligne de code marche super bien et est plus pratique pour moi.

Reste à trouver la bonne syntaxe pour que dans le code de JM (Staple1600) j'enregistre mon fichier csv dans le même dossier que fichier Excel.

Code de Staple1600
Private Sub export_en_CSV(Feuille$, Chemin$, NomFichier_EXPORT$)
Dim fs, a, s$, r&, c&
Set fs = CreateObject("Scripting.FileSystemObject")
Set a = fs.CreateTextFile(Chemin & NomFichier_EXPORT & ".csv", True)
With ThisWorkbook.Sheets(Feuille)
For r = 2 To .[A65536].End(xlUp).Row
s = "": c = 1
While Not IsEmpty(.Cells(r, c))
s = s & .Cells(r, c) & Chr(59)
c = c + 1
Wend
a.writeline s
Next r
End With
End SubCode:

Sub exporter()
export_en_CSV "Feuil1", "C:\Temp\", "F_ExportCSV"
End Sub

la réactivité des participants de ce Forum est super Express et c’est très appréciable.
Merci d'avance et à très bientôt.

PS : Je ne trouve pas les balises pour mettre mes codes en cadre grisé ? Comment faire.
 
Re : Macro pour créer .CSV d'au moins 30 colonnes

😛Salut pmfontaine, Staple1600🙂, Bertrand🙂 le Forum

A la volée mais à tester 😛

Code:
Sub exporter()
export_en_CSV "Feuil1", [B]ActiveWorkbook.Path [/B]& "\F_ExportCSV"
End Sub
EDITION: Purée ... j'arrête le "à la Volée" 😱 Merci Bertrand 🙂 d'avoir rectifié
 
Dernière édition:
Re : Macro pour créer .CSV d'au moins 30 colonnes

re,

il me semble que c'est activeworkbook.path et vérifier en testant le code pas à pas (touche F8) s'il ne faut pas intercaler &"\" avant le nom du fichier
 
Dernière édition:
Re : Macro pour créer .CSV d'au moins 30 colonnes

Bonjour a tous, toujours aussi rapide, c'est génial.
Meci a tous.
Avec le code de Bull, J'ai un message :
Erreur de compilation
Argument non facultatif

Avec : export_en_CSV surligné.

Si non pour : ActiveWorkbook.Path & "\F_ExportCSV"
que l'on écrive avec minuscule ou pas ou sans espace il y a une auto correction qui le met comme si-dessus.
 
Re : Macro pour créer .CSV d'au moins 30 colonnes

Bonsoir à tous


Quelques améliorations dans cette version.

Évidemment il faut toujours adapter selon le cas
(modifier à dessein ce qui en rouge )


Code:
Function fe(p$, f$)
Dim c$
c = p & f & ".xls": fe = Dir(c) <> ""
End Function
Code:
Function se(ByVal ws$) As Boolean
On Error Resume Next
se = (Sheets(ws).Name <> "")
On Error GoTo 0
End Function
Code:
Private Sub export_en_CSV(Feuille$, Chemin$, NomFichier_EXPORT$)
Dim fs, a, s$, r&, c&
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set a = fs.CreateTextFile(Chemin & NomFichier_EXPORT & ".csv", True)
    With ThisWorkbook.Sheets(Feuille)
    For r = 2 To .[A65536].End(xlUp).Row
        s = "": c = 1
        While Not IsEmpty(.Cells(r, c))
        s = s & .Cells(r, c) & Chr(59)
            c = c + 1
        Wend
        a.writeline s
    Next r
    End With
End Sub
Code:
Sub exporter()
Dim nf$, ph$, xnf$
ph = ThisWorkbook.Path & "\": xnf = "[COLOR=Red]Fx_ExportCSV[/COLOR]": nf = "[COLOR=Red]Feuil1[/COLOR]"
If se("[COLOR=Red]Feuil1[/COLOR]") And Not fe(ph, xnf) Then
export_en_CSV nf, ph, xnf
Else
MsgBox "ERREUR" & Chr(13) & "Le fichier existe déjà" & Chr(13) & _
"ou la feuille à exporter en CSV" & Chr(13) & _
"n'est pas présente dans ce classeur.", vbCritical, "Attention"
End If
End Sub
 
Re : Macro pour créer .CSV d'au moins 30 colonnes

Bonjour,
Merci à tous de m'avoir accordé de votre temps.
Ca marche très bien. Mais puisque JM m'a proposé des message d'erreur, quel serai le code pour mettre un message quand un fichier précédemment créait est déjà ouvert.
Actuellement le message est :
Erreur d'exécution 70
Permission refusée
Bon WE
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
8
Affichages
780
Réponses
20
Affichages
4 K
E
Réponses
10
Affichages
3 K
Ereudet
E
A
Réponses
17
Affichages
3 K
Retour