Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 VBA EXPORT CSV

ZZ59264

XLDnaute Occasionnel
Bonjour à tous,

Suite à un code fournit sur le site (certainement par JOB75), je souhaiterai a partir de celui-ci exporter une partie du tableau EXEMPLE (sauF colonne ANNEE) les données filtrées, et non toutes les données du tableau en CSV.

L'onglet CSV souhaité montre ce que je souhaite alors que l'onglet CSV actuel montre le résultat de la macro,

Merci d'avance pour votre aide,

Cordialement,
 

Pièces jointes

  • Classeur1.xlsm
    21.6 KB · Affichages: 9
Solution
Bonjour à tous,

Puisqu'on ne crée qu'un fichier CSV on peut utiliser simplement :
VB:
Sub ExportCSV()
Dim fichier$, P As Range
fichier = ThisWorkbook.Path & "\ExportCSV.csv"
Set P = [EXEMPLE]
Application.ScreenUpdating = False
Application.DisplayAlerts = False
With Workbooks.Add(xlWBATWorksheet).Sheets(1)
    P.SpecialCells(xlCellTypeVisible).Copy .[A1]
    .Columns(1).Delete
    .SaveAs fichier, xlCSV, Local:=True
    .Parent.Close
End With
MsgBox "'" & fichier & "' a été créé"
End Sub
A+

wDog66

XLDnaute Occasionnel
Bonjour ZZ59264,

D'après ce que je vois, vous ne voulez pas la première colonne "Année"
Alors il faut juste modifier la ligne de "Tbl" de cette façon
VB:
Tbl = Range("EXEMPLE").Offset(0, 1).Value
A+
 

ZZ59264

XLDnaute Occasionnel
Bonjour wDog66,

Merci pour votre retour, qui corrige effectivement la problématique du nombre de colonnes en supprimant la première lors de la création du CSV,

Cependant, il me manque la partie ou l'on conserverai uniquement les lignes filtrées,

Merci d'avance,

Cordialement
 

Pièces jointes

  • Classeur1.xlsm
    22 KB · Affichages: 7

wDog66

XLDnaute Occasionnel
Re,

Désolé, ce n'est pas ce que j'avais vu dans votre exemple

Il ne faut donc pas travailler sur une variable tableau, mais directement sur le TS ou les cellules
par exemple
VB:
Sub ExportCSV()
  Dim Plage As Range
  Dim CheminNom As String, Derlig As Long
 
  CheminNom = ThisWorkbook.Path & "\" 'Fichier sur le même répertoire
  CheminNom = CheminNom & "Import_" & Sheets("TEST").Cells(2, 1) & Format(Date, "_YYYY_MM_DD") & "_" & Format(Time, "hhmmss") & ".csv"

  Derlig = Sheets("TEST").Range("A" & Rows.Count).End(xlUp).Row
  Set Plage = Sheets("TEST").Range("B5:D" & Derlig)
  Plage.SpecialCells(xlCellTypeVisible).Copy
  Application.ScreenUpdating = False
  Workbooks.Add
  ActiveSheet.Paste
  Application.CutCopyMode = False
  With ActiveWorkbook
    .SaveAs Filename:=CheminNom, FileFormat:=xlCSVUTF8, Local:=True, CreateBackup:=False
    .Close SaveChanges:=False
  End With
  Application.ScreenUpdating = True
 End Sub
 
Dernière édition:

cp4

XLDnaute Barbatruc
Bonsoir,

Un essai
VB:
Option Explicit

Sub ExportCSV()

   Dim Tbl As Variant, TblTemp As Variant, FileNumber&, i&, j&, chemin$
   Dim d As Object, Code As String, Tbl1(), Tbl2()
   FileNumber = FreeFile

   chemin = ThisWorkbook.Path & "\"   'Fichier sur le même répertoire

   chemin = chemin & "Import_" & Sheets("TEST").Cells(2, 1) & Format(Date, "_YYYY_MM_DD") & "_" & Format(Time, "hhmmss") & ".csv"

   Tbl = Range("EXEMPLE").Value
   '''''''''''''''''''''''''''''''''''''''''''''''
   Code = "C"
   Set d = CreateObject("scripting.dictionary")
   For i = 1 To UBound(Tbl)
      If Tbl(i, 3) = Code Then d(i) = ""   ' on stocke les nos de ligne
   Next i

   Tbl1 = Application.Index(Tbl, Application.Transpose(d.keys), Array(2, 3, 4))   'extract Array

   ReDim TblTemp(LBound(Tbl1, 2) To UBound(Tbl1, 2))

   Open chemin For Output As #FileNumber

   For i = LBound(Tbl1, 1) To UBound(Tbl1, 1)
      For j = 1 To UBound(Tbl1, 2)
         TblTemp(j) = Tbl1(i, j)
      Next j
      Print #FileNumber, Join(TblTemp, ";")
   Next i
   Close #FileNumber

   MsgBox "Terminé!"
End Sub

Bonne soirée.
 

patricktoulon

XLDnaute Barbatruc
pour le fun
une petite bidouillette

il va de soit que le filtre est respecté bien entendu
VB:
Sub test()
    CopyFilterTable [A1:C12], Environ("userprofile") & "\desktop\output.csv"
End Sub

Sub CopyFilterTable(rng As Range, lPath)
    Dim X&
    rng.SpecialCells(xlCellTypeVisible).Copy
    With CreateObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
        .GetFromClipboard
        X = FreeFile: Open lPath For Output As #X: Print #X, Replace(.GetText(), vbTab, ";") & vbCrLf & "bidule"
        Close #X
        Application.CutCopyMode = False
    End With
    MsgBox "votre fichier a été sauvegardé dans" & vbCrLf & lPath
End Sub
 
Réactions: cp4

job75

XLDnaute Barbatruc
Bonjour à tous,

Puisqu'on ne crée qu'un fichier CSV on peut utiliser simplement :
VB:
Sub ExportCSV()
Dim fichier$, P As Range
fichier = ThisWorkbook.Path & "\ExportCSV.csv"
Set P = [EXEMPLE]
Application.ScreenUpdating = False
Application.DisplayAlerts = False
With Workbooks.Add(xlWBATWorksheet).Sheets(1)
    P.SpecialCells(xlCellTypeVisible).Copy .[A1]
    .Columns(1).Delete
    .SaveAs fichier, xlCSV, Local:=True
    .Parent.Close
End With
MsgBox "'" & fichier & "' a été créé"
End Sub
A+
 

Pièces jointes

  • Classeur1.xlsm
    23.3 KB · Affichages: 0

Discussions similaires

Réponses
2
Affichages
435
Réponses
4
Affichages
441
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…