Extraire onglet au format CSV

Bonjour,

J'ai un fichier excel avec 20 onglets.

14 de ces onlgets contiennes des informations "bruts" (Code + Libellé)

Je souhaiterai sur la première page mettre un bouton qui me permet d'exporter automatiquement ces 14 onglets de données bruts au format CSV.

Pouvez vous m'aider ?

D'avance merci

Bonjour et bienvenue,

Un peu de lecture :

https://forum.excel-pratique.com/viewtopic.php?f=2&t=13

Que dit le point 6 de la chartre du forum ?

Cdlt.

Bonjour Jean Eric,

Toutes mes excuses. Voici le fichier joint (exemple).

J'aimerai sur la page une un bouton qui permette d'extraire les onglets 2-3-4-5 au format CSV, avec comme nom le nom de leur feuille.

J'espère avoir été assez clair. Si ce n'est pas le cas n'hésitez pas à me demander des précisions.

D'avance merci.

9exemple.xlsx (13.14 Ko)

Re,

Une proposition à étudier.

ALT F8 : exécuter la procédure Create_CSV

(séparateur local =

Cdlt.

17exemple-csv.xlsm (25.73 Ko)
Public Sub Create_CSV()
Dim wb As Workbook, ws As Worksheet
Dim sPath As String, sFile As String
    Application.ScreenUpdating = False
    Set wb = ActiveWorkbook
    sPath = wb.Path & Application.PathSeparator
    For Each ws In wb.Worksheets
        If ws.Name <> "Dossier_de_demande" Then
            sFile = ws.Name & ".csv"
            ws.Copy
            With ActiveWorkbook
                .SaveAs Filename:=sPath & sFile, FileFormat:=xlCSV
                .Close savechanges:=False
            End With
        End If
    Next ws
End Sub

Whaou ! Merci beaucoup Jean Eric, tu es doué !!

J'avais bidouillé ca de mon coté (en prenant des bouts de codes un peu partout - mais c’était que pour l'extraction d'une feuille.

Sub Fct_Export_CSV()
chemincsv = Range("Paramètres!D58").Value
Worksheets("Exploitation").Select
Dim Plage As Object, oL As Object, oC As Object, Tmp As String, Sep$
Sep = ";"
Set Plage = ActiveSheet.Range("A1:F" & ActiveSheet.Range("A65000").End(3).Row)
Open chemincsv For Output As #1
For Each oL In Plage.Rows
Tmp = ""
For Each oC In oL.Cells
Tmp = Tmp & CStr(oC.Text) & Sep
Next
Print #1, Tmp
Next
Close
End Sub

J'ai deux questions sur ton code et le mien, comment puis je dire que je ne veux pas le titre des colonnes (ici code et libellé) dans mon code cela est géré par "plage"

Ensuite je vois que sur ton code ce qui permet de choisir les feuilles à être générés est quelles ont un nom différent que "Dossier de demande", si j'ai une autre a coté de dossier de demande dont je ne veux pas la génération comment l'indiquer ?

Merci encore

Re,

Une mise à jour !...

Les feuilles à ne pas prendre en compte doivent être listées dans la déclaration Select Case (séparé par une virgule).

ALT F8 : exécuter la procédure Create_CSV_2

Cdlt.

22exemple-csv.xlsm (28.25 Ko)
Public Sub Create_CSV_2()
Dim wb As Workbook, newWB As Workbook, ws As Worksheet
Dim sPath As String, sFile As String
Dim rng As Range
Dim n As Long
    Application.ScreenUpdating = False
    n = Application.SheetsInNewWorkbook
    Application.SheetsInNewWorkbook = 1
    Set wb = ActiveWorkbook
    sPath = wb.Path & Application.PathSeparator
    For Each ws In wb.Worksheets
        Select Case ws.Name
            Case "Dossier_de_demande":
            Case Else
                sFile = ws.Name & ".csv"
                Set rng = ws.Cells(1).CurrentRegion
                rng.Offset(1).Resize(rng.Rows.Count - 1, rng.Columns.Count).Copy
                Set newWB = Workbooks.Add
                With newWB
                    .Worksheets(1).Cells(1).PasteSpecial xlPasteValues
                    .SaveAs Filename:=sPath & sFile, FileFormat:=xlCSV, local:=True
                    .Close savechanges:=False
                End With
                Application.CutCopyMode = 0
        End Select
    Next ws
    Application.SheetsInNewWorkbook = n
End Sub

Je n'en demandais pas temps !

Je ne sais pas comment te remercier. Donc si je comprends bien les arguments en haut sont déclarés et utilisé par la suite.

Une question, comment tu fais dans la macro pour dire que les éléments sont séparés par des ";" ? Car il m'en faudrait aussi sur la fin de chaque ligne.

Je vois bien que tu copies les informations dans le nouveau fichier dans ta macro mais après je ne vois pas ou tu lui dis de séparer par un;

Est ce le fait que tu dises que cela est en CSV ?

Merci encore

Re,

De plus lors de la mise en place de ce script dans mon fichier (plus gros) j'ai l'erreur : 1004 Erreur définie par l'application ou par l'objet sur la ligne rng.Offset(1).Resize(rng.Rows.Count - 1, rng.Columns.Count).Copy

J'ai regardé sur internet l'erreur 1004 mais ce n'est pas tres clair haah

Bonjour,

Pour le point-virgule, c'est le paramètre Local:=True (voir lien ci-dessous).

https://msdn.microsoft.com/fr-fr/VBA/Excel-VBA/articles/workbook-saveas-method-excel

Pour l'ajout d'un nouveau point-virgule en fin de ligne, on est plus dans la procédure type et je ne sais pas faire !...

Les différents types de CSV proposés par Windows n'ajoutent pas de caractères supplémentaires.

Cdlt.

C'est bon j'ai trouvé pour le ";"

La maintenant je galère sur 2 choses : l'erreur plus haut

et

j'essaie de faire un export que d'une feuille (en fait je souhaite mettre un lien sur chaque feuille -en plus de l''export global- pour pouvoir généré unitairement cette feuille j'ai donc essayé d'adapter ton code mais ca ne veux pas j'ai une erreur sur la ligne sFile je ne

comprends pas car ws est bien déclaré porutant

Sub exportUnitaire()
Dim wb As Workbook, ws As Worksheet
Dim sPath As String, sFile As String
    Application.ScreenUpdating = False
    Set wb = ActiveWorkbook
    sPath = wb.Path & Application.PathSeparator
    sFile = ws.Name & ".csv"
            ws.Copy
            With ActiveWorkbook
                .SaveAs Filename:=sPath & sFile, FileFormat:=xlCSV
                .Close savechanges:=False
            End With

End Sub

Bonjour,

Si ws est bien déclarée elle n'est pas initialisée :

Set ws = wb.Worksheets("à définir")

Ou alors si c'est la feuille active, alors :

sFile=ActiveSheet.Name & ".csv"

Cdlt.

Rechercher des sujets similaires à "extraire onglet format csv"