Macro pour exporter un onglet en CSV (VBA)

Bonjour à tous,

Après plusieurs recherches sur le net, je me permets de demander votre aider en VBA.

Dans mon fichier Excel j'ai plusieurs onglets, et je voudrais créer une macro pour exporter un seul onglet et l'enregistrer en CSV. (Pour ça j'y suis arrivé)

Le problème est que je n'arrive pas, à faire un "enregistre sous" en choisissant n'importe quelle destination du fichier et en choisissant n'importe quel nom de mon fichier quand je l'export.

Voici mon code :

Sub SaveCSV()
Dim Chemin As String, Fichier As String

Set rep = Application.FileDialog(msoFileDialogFolderPicker)
    If rep.Show <> 0 Then
Application.ScreenUpdating = False
Chemin = rep.SelectedItems(1) & "\"
Fichier = "Import_DOE_" & Format(Now, "yyyymmdd")
ThisWorkbook.Worksheets("Feuil1").Copy
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:=Chemin & Fichier, FileFormat:=xlCSV, Local:=True
ActiveWorkbook.Close
Application.DisplayAlerts = True
        MsgBox "Votre fichier a été exporté", , "Export DOE": Exit Sub
    End If
End Sub

Si vous avez une petite solution à m'apporter.

Merci à vous

Bonjour,

N'importe quelle destination, c'est-à-dire ?

J'ai l'impression que vous y arrivez bien puisque l'emplacement de votre fichier dépend de variables. C'est juste que pour l'instant la variable chemin dépend de la boite de dialogue et la variable fichier contient une valeur saisie en dur. Mais il est tout à fait possible de lui donner une valeur en fonction d'une cellule de la feuille par exemple.

Cdlt,

Bonjour,

Etant débutant en VBA, j'ai repris plusieurs code sur net pour arriver au code que j'ai posté.

C'est vrai que je me suis mal exprimé.. j'arrive à choisir la destination ou je veux enregistrer mon fichier, mais je n'arrive pas à choisir n'importe quel nom du fichier à exporter.

Car le fichier aura le nom :

Fichier = "Import_DOE_" & Format(Now, "yyyymmdd")

Comment je peux faire pour que ma variable Fichier, est n'importe quel nom quand je fais enregistrer sous ?

Merci

Par exemple :

Fichier = "N'importe quel nom" 'JE RIGOLE :)
Fichier = range("A1").value & " " & Format(Now, "yyyymmdd")

Ici, Le fichier a pour nom la valeur de A1 (suivie d'un espace et de la date formatée).

Fichier = activesheet.name & " " & Format(Now, "yyyymmdd")

Dans cet exemple (pour l'exemple bien sûr car on le connait le nom dans le code), le fichier a le nom de la feuille (et la date...).

Cela me conviens parfaitement, merci !

Fichier = range("A1").value & " " & Format(Now, "yyyymmdd")

Une autre petite question, serais-tu comment faire pour demander si oui ou non il veux écraser le fichier déjà existant ? (si il y en a un bien-sur)

Voici un essai :

Sub SaveCSV()

dim dossier$, fichier$, chemin$

with Application.FileDialog(msoFileDialogFolderPicker)
    if .Show <> 0 Then dossier = .SelectedItems(1) & "\" else exit sub
end with

Fichier = range("A1").value & " " & Format(Now, "yyyymmdd")
chemin = dossier & fichier
if dir(chemin) <> "" then
    if msgbox("Le fichier existe déjà ! Voulez-vous le remplacer ?", vbyesno + vbexclamation, "Demande de confirmation") <> vbyes then exit sub
end if

Application.ScreenUpdating = False
Application.DisplayAlerts = False
ThisWorkbook.Worksheets("Feuil1").Copy
ActiveWorkbook.SaveAs Filename:=Chemin, FileFormat:=xlCSV, Local:=True
ActiveWorkbook.Close
Application.DisplayAlerts = True
application.screenupdating = true
MsgBox "Votre fichier a été exporté", , "Export DOE"

End Sub

Je viens d'éditer le code (j'ai remplacé le signe = par <> ) !

Cdlt,

Merci 3GB,

Mais je viens d'essayer le code, même si le fichier existe déjà, je n'ai pas le message si je veux le remplacer et il remplace automatiquement...

Oui, j'ai fait une petite faute de signe. J'ai édité mon code entre temps mais tu as dû partir sur le précédent. Réessayes maintenant, ça devrait être bon.

Du coup j'ai réessayé, mais toujours pas ..

Par contre, j'ai remplacé cette ligne :

if dir(chemin) <> "" then

Par :

if dir(chemin) <> range("A1").value & " " & Format(Now, "yyyymmdd") then

Et c'est nickel !

Merci pour ton aide !

Pas besoin normalement... Le problème, c'est que j'avais mis "=". Mais la fonction Dir(cheminfichier) renvoie le nom du fichier dont le chemin complet est "cheminfichier". S'il n'est pas trouvé, elle renvoie une chaine vide.

Rechercher des sujets similaires à "macro exporter onglet csv vba"