Enregistrement en CSV avec nom du fichier = contenue cellule

eric57

XLDnaute Occasionnel
Bonjour le Forum

Je souhaite enregistrer une feuille excel ( uniquement les 4 premières colonnes, pas les autres) en csv séparé par des virgules.

J'ai trouvé ce code donné par Roland_M, et adapté a mes besoins (4 col) et qui fonctionne très bien :

Sub ExportFile()
Chemin$ = ThisWorkbook.Path: Fichier$ = "predads.txt"
CheminFichier$ = Chemin$ & "\" & Fichier$
With Sheets("ETABLISSEMENT").UsedRange: NoDernLig& = .Cells(.Rows.Count, .Columns.Count).Row: End With
With Sheets("ETABLISSEMENT")
Open CheminFichier$ For Output As #1
For L& = 1 To NoDernLig&
V$ = .Cells(L&, 1) & "," & .Cells(L&, 2) & "," & .Cells(L&, 3) & "," & .Cells(L&, 4)
Print #1, V$
'Print #1, Right(V$, Len(V$) - 1) ' voir si comme ceci est utile !? sinon , V$ ça suffit !
Next
End With
Close #1
End Sub

Mais je voudrais qu'il enregistre ce fichier d'après le contenue d'une cellule, j'ai donc essayé de modifier le code proposé par Job75 dans une autre discussion :

Ce code me plait bien car il contrôle le contenu de ma cellule avant l'enregistrement.

bSub Enregistrer()
Dim Nom As String
Nom = Range("J1") & ".csv"
If ThisWorkbook.Path = "" Then 'si le document n'a jamais été enregistré
SendKeys Nom
Application.Dialogs(xlDialogSaveAs).Show 'boîte de dialogue Enregistrer sous
Else
If Range("J1") = "" Then MsgBox "Entrez le nom du fichier en J1", 48: Range("J1").Select: Exit Sub
If MsgBox("Voulez-vous enregistrer le fichier sous le nom " & Nom & " ?", 4) = 6 Then
On Error Resume Next
ThisWorkbook.SaveAs ThisWorkbook.Path & "\" & Nom 'Enregistre dans le même dossier
If Err Then MsgBox "Le nom proposé contient des caractères interdits", 48: Range("J1").Select
End If
End If
End Sub

Peut-on faire une compil de ces 2 codes pour obtenir ce que j'ai besoin ?

Merci pour votre aide
 

cathodique

XLDnaute Barbatruc
Re : Enregistrement en CSV avec nom du fichier = contenue cellule

un petit fichier avec les 4 colonnes concernées. Pour le séparateur, il vaut mieux utiliser le point-virgule dans le cas où tu voudrais récupérer le csv dans un fichier xl.
 

eric57

XLDnaute Occasionnel
Re : Enregistrement en CSV avec nom du fichier = contenue cellule

Bonjour, merci pour votre réponse.

Pour la virgule, je n'ai pas le choix je suis obligé de l'avoir sous ce format pour mon export dans le logiciel prévu.

Voici un exemple de ma feuille excel
 

Pièces jointes

  • Prepa-csv.xlsm
    70.5 KB · Affichages: 38

cathodique

XLDnaute Barbatruc
Re : Enregistrement en CSV avec nom du fichier = contenue cellule

essai comme ceci
VB:
Sub ExportFile()
Chemin$ = ThisWorkbook.Path: Fichier$ = "Liste_amortisseur.csv" 'nom du fichier voir si automatisation possible par cellule
CheminFichier$ = Chemin$ & "\" & Fichier$
With Sheets("Export").UsedRange: NoDernLig& = .Cells(.Rows.Count, .Columns.Count).Row: End With
With Sheets("Export")
Open CheminFichier$ For Output As #1
 For L& = 1 To NoDernLig&
  V$ = .Cells(L&, 1) & "," & .Cells(L&, 3) & "," & .Cells(L&, 4) & "," & .Cells(L&, 5) 'je ne veux pas la colonne 2
  Print #1, Replace(V$, ",", ";")
  'Print #1, Right(V$, Len(V$) - 1) ' voir si comme ceci est utile !? sinon , V$ ça suffit !
 Next
End With
Close #1
End Sub
Les données seront mises par colonne
 

eric57

XLDnaute Occasionnel
Re : Enregistrement en CSV avec nom du fichier = contenue cellule

Merci pour ta réponse, mais pourquoi le nom correspondt au contenu de la dernière cellule ? Le nom du fichier une fois exporté doit se nommer comme le contenu de J1
 

cathodique

XLDnaute Barbatruc
Re : Enregistrement en CSV avec nom du fichier = contenue cellule

Je n'ai pas compris ta question, je te joins le fichier csv généré par le code de Roland_M, auquel je n'ai apporté qu'une petite modification. Le fichier créé est nommé par code "Liste_amortisseur.csv" en début de macro.

L'extension csv ne passe pas, alors je te joins un pdf.
 

Pièces jointes

  • Liste_amortisseur.pdf
    93.2 KB · Affichages: 30

Marc L

XLDnaute Occasionnel
Bonjour,

mettre à jour la procédure suivante dans le module de la feuille de calculs :

VB:
Sub ExportFile()
        Dim Rg As Range, F%
        If [J1].Value = "" Then Beep: Exit Sub
        F = FreeFile
        Open ThisWorkbook.Path & "\" & [J1].Value & " .csv" For Output As #F
    For Each Rg In Cells(1).CurrentRegion.Columns("A:D").Rows
        Print #F, Join$(Application.Index(Rg.Resize(2).Value, 1), ",")
    Next
        Close #F
End Sub
_______________________________________________________________________________
Merci de cliquer sur J'aime ce post en bas à gauche de chaque message ayant aidé …

_______________________________________________________________________________
Je suis Paris, Charlie, …
 

cathodique

XLDnaute Barbatruc
Re : Enregistrement en CSV avec nom du fichier = contenue cellule

Désolé, un peu dur à la détente, je viens juste de comprendre.
VB:
Sub ExportFichier()
chemin$ = ThisWorkbook.Path: Fichier$ = ActiveSheet.Range("J1") & ".csv" 'nom du fichier en cellule J1 
CheminFichier$ = chemin$ & "\" & Fichier$
With Sheets("Export").UsedRange: NoDernLig& = .Cells(.Rows.Count, .Columns.Count).Row: End With
With Sheets("Export")
Open CheminFichier$ For Output As #1
 For L& = 1 To NoDernLig&
  V$ = .Cells(L&, 1) & "," & .Cells(L&, 3) & "," & .Cells(L&, 4) & "," & .Cells(L&, 5) 'je ne veux pas la colonne 2
 Print #1, Replace(V$, ",", ";")
Next
End With
Close #1
End Sub
Le nom du fichier est en J1 de la feuille active, c'est bien ça? Voilà c'est fait.
 

Discussions similaires

Statistiques des forums

Discussions
312 167
Messages
2 085 894
Membres
103 021
dernier inscrit
Sergyl75