VBA - Export .csv - Save as - nouveau document

Bonjour,

En farfouillant dans le forum, j'ai trouvé plusieurs posts qui traitent une partie de ce que j’essaie de faire ; en les combinant je n'arrive pas au résultat que j'espérais.

Les posts en question :

https://forum.excel-pratique.com/viewtopic.php?forum_uri=excel&t=93096&start=

https://forum.excel-pratique.com/viewtopic.php?t=93133

J'ai un document contenant plusieurs feuilles ; au format .xlsm

> Je voudrais qu'en cliquant sur un bouton "Exporter" une fenêtre de dialogue s'ouvre et propose d'enregistrer à l'emplacement souhaité.

(Si je refuse un emplacement particulier c'est parce que mon document pourrait être utilisé sur différentes machines, avec des systèmes d'exploitation différents ; étant donné que les chemins d'accès changent souvent je crains que ça ne finisse par poser problème).

> Une fois l'emplacement sélectionné, la feuille "Saisie" et uniquement elle, se retrouve enregistrée dans un nouveau document Excel au format .csv ; séparateur "point-virgule".

J'ai pu aller jusqu'à la partie "Enregistrement" ; sauf que c'est mon document qui se retrouve enregistrer au format .csv et que la feuille en question est simplement renommé avec ce que j'ai renseigné dans le champ "nom de fichier" lors de l'enregistrement.

Ça me surprend de ne pas avoir trouvé davantage d'information sur le sujet car c'est certainement une opération que beaucoup cherchent à faire.

Merci de votre attention ! Si je trouve une solution ailleurs, je viendrai poster à la suite de cette discussion.

J'ai ajouté un fichier joint, même s'il n'a pas une très grande utilité.

Bonne journée.

27export-csv.xlsm (41.63 Ko)

bonjour

a réponse décalée : tu as besoin d'exporter souvent en csv, et potentiellement en divers endroits

pourquoi faire ?

qui a besoin de csv ? (alors que de multiples logiciels lisent les xls tout aussi bien)

à te relire

amitiés

Bonjour à tous,

Un essai ...

Le nom du fichier de sortie est à adapter au besoin.

Si l'on ouvre le fichier de sortie avec Bloc Note, il est bien en texte et le séparateur est bien le point-virgule.

Sub SelDossierExportCSV()
Dim sChemin As String, Destination As String
Dim Plage As Object, oL As Object, oC As Object, Tmp As String, Sep$
Dim Dlig As Integer, Dcol As Integer

    sChemin = ThisWorkbook.Path
    With Application.FileDialog(msoFileDialogFolderPicker)
        .InitialFileName = sChemin & "\"
        .Title = "Sélectionner le dossier de destination ..."
        .AllowMultiSelect = False
        .InitialView = msoFileDialogViewDetails
        .ButtonName = "Sélection destination"
        .Show

        If .SelectedItems.Count > 0 Then
            Destination = .SelectedItems(1) & "\"

            Dlig = Worksheets("Saisie").Cells(Rows.Count, "A").End(xlUp).Row
            Dcol = Worksheets("Saisie").Cells(1, Columns.Count).End(xlToLeft).Column

            Sep = ";"
            Set Plage = ActiveWorkbook.Worksheets("Saisie").Range(Cells(1, 1), Cells(Dlig, Dcol))
            Open Destination & "Feuil_Saisie.csv" For Output As #1  ' << Adapter le nom du fichier créé
            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
            Set Plage = Nothing
        End If
    End With
End Sub

ric

Bonjour,

a réponse décalée : tu as besoin d'exporter souvent en csv, et potentiellement en divers endroits

pourquoi faire ?

qui a besoin de csv ? (alors que de multiples logiciels lisent les xls tout aussi bien)

Mon document se sert deux deux sources de données qu'il croise avec deux autres bases de données pour réaliser tout un tas de traitements. Les deux sources de données sont au format .csv . J'utilise une application mobile qui produit des document .csv en sortie, d'où mon choix pour ce format.

L'une des deux sources de données est mise à jour à la fin des traitement de manière à pouvoir conserver le travail qui a été fait. Il peut arriver que les sources de données soient changées de temps en temps, mais il est certain qu'à un moment ou un autre, il faudra récupérer ce qui a été fait sur certaines d'entre-elles. Je souhaite les exporter en .csv pour pouvoir les rouvrir plus tard en passant par le même algorithme qui m'a permit de les ouvrir la première fois.

Merci pour votre réponse @ric !

Savez-vous si l'on peut ajouter la date du jour ?

J'ai testé ainsi :

Open Destination & "Survey_Saisie" & now & ".csv" For Output As #1
        Dim Ladate As Date
        Ladate = Now()
Open Destination & "Survey_Saisie" & Ladate & "_" & ".csv" For Output As #1

J'ai l'erreur "nom ou numéro de fichier incorrect" ; Peut-être que tourné ainsi, le code ne supporte pas qu'on ajoute la date ?

Est-ce que cela provient du fait que la date qui est ajoutée contient des caractères particuliers ? Auquel cas, il me suffirait de chercher "Année" "Mois" et "Jour" et les séparer par des "_" pour pallier au problème.

Je vais tester ça.

Merci encore pour votre aide !

Bonjour,

Now donne la date et l'heure > l'heure contient des : (deux points) ce qui pose problème.

Utilise Date

ric

Oui c'était bien ça, donc pour pallier à ce petit problème j'ai fait comme suit :

 
     Dim Annee As String, Mois As String, Jour As String

        Annee = Year(Now)
        Mois = Month(Now)
        Jour = Day(Now)       
  

Et j'ai modifié cette partie là du code donc :

Open Destination & "Survey_Saisie" & "_" & Annee & "_" & Mois & "_" & Jour & "_" & "_" & ".csv" For Output As #1

Ça marche très bien !

Edit : Je n'avais pas vu votre précédent message. En utilisant Date, j'ai une erreur sur le chemin d'accès qui n'est pas trouvé.

Merci encore !!

ric

Rechercher des sujets similaires à "vba export csv save nouveau document"