Export xlsm to csv

Bonjour,

J'ai trouvé sur ce site un petit bout de code qui me permet d'exporter une feuille au format csv.

Le comportement de cette macro me va parfaitement .

Le seul petit soucis pour moi c'est que je ne veux pas exporter la première ligne.

Étant novice je fais appel à vos talents.

Ci dessous le code.

Public Sub SaveAsCSV()
Dim wb As Workbook, ws As Worksheet
Dim strPath As String, strFilename As String
    Set wb = ThisWorkbook
    Set ws = wb.Worksheets("ma feuille")
    strPath = wb.Path & Application.PathSeparator
    strFilename = "TEST.csv"
    ws.Copy
    With ActiveWorkbook
        .SaveAs Filename:=strPath & strFilename, _
                FileFormat:=xlCSV, _
                local:=True '? adapter
        .Close savechanges:=False
    End With
End Sub

Merci pour votre aide

Bonjour,
A tester.
Cdlt.

Public Sub SaveAsCSV()
Dim wb As Workbook, newWb As Workbook, ws As Worksheet
Dim rng As Range
Dim lastRow As Long
Dim strPath As String, strFilename As String

    Application.ScreenUpdating = 0

    Set wb = ThisWorkbook
    Set ws = wb.Worksheets(1)

    strPath = wb.Path & Application.PathSeparator
    strFilename = "TEST.csv"

    With ws
        lastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
        Set rng = .Cells(1).CurrentRegion.Offset(1).Resize(lastRow - 1)
    End With

    rng.Copy

    Set newWb = Workbooks.Add(xlWBATWorksheet)

    With newWb
        .Worksheets(1).Cells(1).PasteSpecial Paste:=xlValues
        .SaveAs Filename:=strPath & strFilename, _
                FileFormat:=xlCSV, _
                local:=True    '? adapter
        .Close savechanges:=False
    End With

End Sub

Bonjour Jean-Eric,

Merci pour ton aide

Ton code fonctionne à merveille et c'est déjà ton code que j'utilisais.

Puis je abusé de ton savoir?

A la place de test.csv peut t-on exporter le fichier à la date du jour ?

Merci

Bonjour NJA31, Jean-Eric, le fil

Dans le code de Jean-Eric tu remplaces la ligne

strFilename = "TEST.csv"

par

strFilename = Format(Date, "formatDateSouhaité") & ".csv"

Dans lequel "formatDateSouhaité" est un format de date valide tel DDMMYYYY, YYYYMM...
MMM donne le mois sur 3 caractères, MMMM idem en entier
DD donne le quantième (le jour du mois), DDD jour de semaine sur 3 caractères, DDDD jour de semaine en entier
Le YYYY ou YY pour l'année (parce que VBA parle en anglais)
Attention pour un nom de fichier certains caractères sont interdits le slash "/" en particulier !

Bonjour Green SoftS,
Je te remercie pour ton aide.
ça fonctionne parfaitement.

Merci à tous les 2.
Cdlt

J'ai d'autres question avec des macros, on peut en parler en MP ou j'ouvre un autre sujet?

Bonjour NJA31, le fil

Si ces questions concernent le même sujet tu peux rester sur ce fil.

Quant à la poursuite en MP, si tu considères qu'il n'est pas possible de mettre un fichier en PJ (pour cause de confidentialité des données) pourquoi pas envoyer seulement le fichier en MP et poursuivre sur ce fil ou un autre avec des extraits de code, pour que d'autres puissent profiter des corrections et d'autres en proporser d'autres et respecter aussi la philosophie du forum

Par ailleurs il existe un "obfusquateur" de données sur le site, créer par Sébastien... ici

Merci Green SoftS,

Cela concerne le même classeur mais pas sur la fonction d'export en csv.

Le sujet pour ce problème est donc résolu.

Bonjour,
Merci de ces retours.
Cdlt.

Bonjour,

je rencontre un soucis avec l'export, je verrouille les cellules que je ne veux pas que l'on touche car formules sensibles a l’intérieur.

Du coup je reçois un message d'erreur à l'exportation.

Peut t- on rajouter un bout de code de manière à pouvoir exporter même avec les cellules verrouiller ou il faut que je déverrouille les cellules ?

Merci

Bonjour,

J'ai un problème lors de l'exportation, il me supprime le 0 devant les codes postaux.

J'ai essayer en changeant le format comme txt avec tabulation , cela fait pareil, du coup le fichier n'est pas conforme.

Public Sub SaveAsCSV()
Dim wb As Workbook, newWb As Workbook, ws As Worksheet
Dim rng As Range
Dim lastRow As Long
Dim strPath As String, strFilename As String

    Application.ScreenUpdating = 0

    Set wb = ThisWorkbook
    Set ws = wb.Worksheets(2)

    strPath = wb.Path & Application.PathSeparator
    strFilename = Format(Date, "DD.MM.YYYY") & ".csv"

    With ws
        lastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
        Set rng = .Cells(1).CurrentRegion.Offset(1).Resize(lastRow - 1)
    End With

    rng.Copy

    Set newWb = Workbooks.Add(xlWBATWorksheet)

    With newWb
        .Worksheets(1).Cells(1).PasteSpecial Paste:=xlValues
        .SaveAs Filename:=strPath & strFilename, _
                FileFormat:=xlcsv, _
                local:=True    '? adapter
        .Close savechanges:=False
    End With

End Sub

Si quelqu'un a une idée.

Merci

Bonjour NJA31, le fil

A mon avis 2 solutions, selon 2 cas

  1. Si tu es certain de toujours savoir repérer la colonne où se trouve le code postal :
    Une fois l'export terminé dans le code VBA tu formates directement dans le code, cette colonne avec quelque chose du genre Format( cellulePTT, "00000") où cellulePTT représente la colonne concernée, éventuellement sous forme de "range"
  2. Sinon
    Une fois l'export terminé, tu formates la colonne de ce code postal à la main au bon format à savoir "00000" - 5 fois le chiffre zéro entre guillemets

Bonjour Green SoftS,

Merci pour ton retour

La colonne est toujours la même soit la E.

Si je te comprends bien, il faut que j'ouvre mon csv pour formater la colonne?

...

Non, pas forcément ! Et d'ailleurs ce serrait une manipulation "bête" alors que VBA peut le faire pour nous !

Ce que je voulais dire, c'est qu'une fois la partie de code traitant de l'import est terminée, tu formates la colonne E au bon format !
Avec une instruction VBA de ce genre-là :

Range(Cells( debut, 5), Cells( fin, 5)).NumberFormat = "00000"

dans laquelle "debut" est la première ligne de tes données et "fin" la dernière
Pour connaitre la dernière ligne "fin" tu peux utiliser Cells(Rows.Count, 5).End(xlUp).Row
Donc :

Range(Cells( debut, 5), Cells( Cells( Rows.Count, 5).End(xlUp).Row, 5)).NumberFormat = "00000"

Merci Green SoftS

Mais je ne sais pas ou collé ta ligne de code. Je ne suis vraiment pas doué en VBA.

...

Public Sub SaveAsCSV()
Dim wb As Workbook, newWb As Workbook, ws As Worksheet
Dim rng As Range
Dim lastRow As Long
Dim strPath As String, strFilename As String

    Application.ScreenUpdating = 0

    Set wb = ThisWorkbook
    Set ws = wb.Worksheets(2)

    strPath = wb.Path & Application.PathSeparator
    strFilename = Format(Date, "DD.MM.YYYY") & ".csv"

    With ws
        lastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
        Set rng = .Cells(1).CurrentRegion.Offset(1).Resize(lastRow - 1)
    End With

    rng.Copy

    Set newWb = Workbooks.Add(xlWBATWorksheet)

    With newWb
        .Worksheets(1).Cells(1).PasteSpecial Paste:=xlValues
        '
        '    ==> AJOUTER ICI juste avant la sauvegarde, le formatage de la colonne 
        '
        Range(Cells( debut, 5), Cells( Cells( Rows.Count, 5).End(xlUp).Row, 5)).NumberFormat = "00000"
        '
        '    en remplaçant "debut" par la 1ère ligne du début réel des données
        '    DONC, si j'ai bien compris ce doit être 1 (chiffre un)
        '    <==
        '
        .SaveAs Filename:=strPath & strFilename, _
                FileFormat:=xlcsv, _
                local:=True    '? adapter

        .Close savechanges:=False
    End With

End Sub

Merci Green SoftS ça fonctionne, du coup en changeant le format en txt ça fonctionne aussi.

J'ai le choix .

Tu m'a enlevé une épine du pied.

Merci encore je clôture le sujet.

Bonjour NJA31,

Merci pour

Merci Green SoftS ça fonctionne, du coup en changeant le format en txt ça fonctionne aussi.

Et heureux aussi, d'avoir résolu ton problème !

Rechercher des sujets similaires à "export xlsm csv"