Microsoft 365 Rendre une macro plus flexible

netparty

XLDnaute Occasionnel
Bonjour à tous

J'ai une macro qui me sert à exporter mon tableau vers un fichier CSV, mais j'aimerais la rendre plus flexible,
Pour l'instant la macro exporter les plages A2 à K mais mon tableau pourrais avoir moins de colonne ou plus de colonne du fait je dois modifier ma macro pour prendre en compte la bonne plage du tableau.

Est-il possible que la plage de départ soit toujours A2 mais que la plage de fin soit la dernier colonne.

VB:
Sub ExportCsv()
Dim Plage As Object, oL As Object, oC As Object
Dim Tmp$, Sep$
Dim Fichier$, Chemin$, CheminFiche$, Nlig&
   With Application
      .ScreenUpdating = False
      .EnableEvents = False
      .Calculation = xlManual
   End With
'Fichier = "Base" & ".csv"
Fichier = "Références matériels" & ".csv"

Chemin = ActiveWorkbook.Path & Application.PathSeparator
CheminFiche = Chemin & Fichier
Nlig = Cells(Rows.Count, 1).End(xlUp).Row
Sep = ","
   Set Plage = Range("A2:K" & Nlig)
      Open CheminFiche 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, Left(Tmp, Len(Tmp) - 1)
         Next
      Close
   Set Plage = Nothing
MsgBox "Export Base Terminer", vbInformation, "Admin"
    With Application
       .ScreenUpdating = True
       .Calculation = xlCalculationAutomatic
       .EnableEvents = True
       .Goto [A1], True
    End With
End Sub

Merci d'avance
 

Fred0o

XLDnaute Barbatruc
Bonjour Netparty

Petite adaptation en rajoutant une variable. A tester

VB:
Nlig = Cells(Rows.Count, 1).End(xlUp).Row
NCol = Cells(2, 255).End(xlToLeft).Column
Sep = ","
   Set Plage = Range(Cells(2, 1), Cells(Nlig, NCol)) 'Range("A2:K" & Nlig)
      Open CheminFiche For Output As #1
         For Each oL In Plage.Rows
 

netparty

XLDnaute Occasionnel
Bonjour Netparty

Petite adaptation en rajoutant une variable. A tester

VB:
Nlig = Cells(Rows.Count, 1).End(xlUp).Row
NCol = Cells(2, 255).End(xlToLeft).Column
Sep = ","
   Set Plage = Range(Cells(2, 1), Cells(Nlig, NCol)) 'Range("A2:K" & Nlig)
      Open CheminFiche For Output As #1
         For Each oL In Plage.Rows
Bonjour Fred0o

Merci je vais tester, combien de ligne il prend au maximum ?

Bonne journée
 

Fred0o

XLDnaute Barbatruc
Bonjour Netparty

En fait, je n'ai copie que la partie du code que j'ai modifiee. Selon le code en question, tu auras la totalite des lignes non vides de ta feuille

VB:
Nlig = Cells(Rows.Count, 1).End(xlUp).Row

et jusqu'a 255 colonnes. Mais si tu veux plus de colonnes, tu peux essayer ceci :
Code:
NCol = Cells(2, Columns.Count).End(xlToLeft).Column
 

netparty

XLDnaute Occasionnel
Bonjour Netparty

En fait, je n'ai copie que la partie du code que j'ai modifiee. Selon le code en question, tu auras la totalite des lignes non vides de ta feuille

VB:
Nlig = Cells(Rows.Count, 1).End(xlUp).Row

et jusqu'a 255 colonnes. Mais si tu veux plus de colonnes, tu peux essayer ceci :
Code:
NCol = Cells(2, Columns.Count).End(xlToLeft).Column
Re bonjour Fred0o

Encore une petite question,

Comment puis-je récupérer le nom du fichier pour remplacer cette partie de code :

VB:
Fichier = "Références matériels" & ".csv"

Merci
 

Fred0o

XLDnaute Barbatruc
Re-bonjour

Donc, je ne comprends pas ce que tu veux faire avec cette demande. Peux-tu preciser ?

1616156647893.png
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil

Pour faire un export CSV, je me contente de:
VB:
Sub Export_CSV_BIS()
Dim fCSV As Workbook, strFichier$
With ThisWorkbook
strFichier = .Path & "\Références matériels.csv"
End With
Application.ScreenUpdating = 0: Application.DisplayAlerts = 0
ActiveSheet.Copy: Set fCSV = ActiveWorkbook
With fCSV
.SaveAs Filename:=strFichier, FileFormat:=6, Local:=-1: .Close 0
End With
MsgBox "Export Base terminé", vbInformation, "Admin"
End Sub
 

Staple1600

XLDnaute Barbatruc
Re


Et la version pour baser le nom du CSV sur le nom du classeur
VB:
Sub Export_CSV_light()
Dim fCSV As Workbook, strFichier$
With ThisWorkbook
strFichier = .Path & "\" & Split(.Name, ".")(0) & ".csv"
End With
Application.ScreenUpdating = 0: Application.DisplayAlerts = 0
ActiveSheet.Copy: Set fCSV = ActiveWorkbook
With fCSV
.SaveAs Filename:=strFichier, FileFormat:=6, Local:=-1: .Close 0
End With
End Sub
 

netparty

XLDnaute Occasionnel
Re


Et la version pour baser le nom du CSV sur le nom du classeur
VB:
Sub Export_CSV_light()
Dim fCSV As Workbook, strFichier$
With ThisWorkbook
strFichier = .Path & "\" & Split(.Name, ".")(0) & ".csv"
End With
Application.ScreenUpdating = 0: Application.DisplayAlerts = 0
ActiveSheet.Copy: Set fCSV = ActiveWorkbook
With fCSV
.SaveAs Filename:=strFichier, FileFormat:=6, Local:=-1: .Close 0
End With
End Sub
Bonjour Stapple1600

Merci pour ton code.
Est-il possible de commencer la sélection du CSV a partir de la cellule A3 jusque la dernière colonne remplie?

Merci
 

Statistiques des forums

Discussions
315 135
Messages
2 116 627
Membres
112 816
dernier inscrit
Nounours_59