XL 2016 Automatiser l'enregistrement d un onglet au format txt separition tabulation

polyteis

XLDnaute Occasionnel
Bonjour,

Je dispose d'un classeur avec de nombreux onglets.
Certain de ces onglets me servent dans d'autres classeurs, en txt via un import en power query.
J aimerai donc disposer d une macro associee a un bouton pour enregistrer sur le disque dur l'onglet au format txt separation tabulation
Merci pour vos retours
 

cp4

XLDnaute Barbatruc
Bonjour,

il faudrait adapter le chemin et le nom du fichier.
VB:
Option Explicit

Sub FichierCSV()
  Dim Plage As Range, Fichier As String, Chaine As String
  Dim L As Long, f As Integer, c As Integer
  Fichier = ThisWorkbook.Path & "\" & "MonFichier.txt" 'chemin et nom fichier à adapter
  Application.ScreenUpdating = False
  With Feuil6 'feuille à adapter
    Set Plage = .UsedRange
    f = FreeFile()
    Open Fichier For Output As #f
    For L = 1 To Plage.Rows.Count
      Chaine = Plage.Cells(L, 1)
      For c = 1 To Plage.Columns.Count
        Chaine = Chaine & vbTab & Plage.Cells(L, c)
      Next c
      Print #f, Chaine
    Next L
    Close #f
  End With
MsgBox "Fichier texte créer avec succès!", vbInformation + vbOKOnly, "CREATION FICHIER TEXTE"
End Sub
 

fanch55

XLDnaute Barbatruc
Bonjour @polyteis ,
A tester aussi ( salut @cp4 ), compléter le Fname
VB:
Sub SaveTxt()
Application.DisplayAlerts = False
    ActiveSheet.Copy 'on copie l'onglet dans un nouveau fichier
    With ActiveWorkbook
        Fname = "D:\Users\.........\" & ActiveSheet.Name & ".txt"
        .SaveAs Fname, FileFormat:=xlText, CreateBackup:=False
        .Close False
    End With
    MsgBox "Export effectué en " & Fname, vbInformation
End Sub
 

fanch55

XLDnaute Barbatruc
Pour faire l'export pour certains onglets en automatique :
modifier le Array selon votre configuration
VB:
Sub ExportTab()
    For Each Onglet In Array("Bd", "Onglet1", "Onglet2", "etc...")
        If IsFeuille(Onglet) Then SaveTxt Worksheets(Onglet)
    Next
End Sub
Sub SaveTxt(Sh As Worksheet)
Application.DisplayAlerts = False
    Sh.Copy 'on copie l'onglet dans un nouveau fichier
    With ActiveWorkbook
        Fname = "D:\Users\.........\" & Sh.Name & ".txt"
        .SaveAs Fname, FileFormat:=xlText, CreateBackup:=False
        .Close False
    End With
    MsgBox "Export effectué en " & Fname, vbInformation
End Sub
Function IsFeuille(F) As Boolean
    On Error Resume Next: IsFeuille = Not Worksheets(F) Is Nothing
End Function
 

polyteis

XLDnaute Occasionnel
Pour faire l'export pour certains onglets en automatique :
modifier le Array selon votre configuration
VB:
Sub ExportTab()
    For Each Onglet In Array("Bd", "Onglet1", "Onglet2", "etc...")
        If IsFeuille(Onglet) Then SaveTxt Worksheets(Onglet)
    Next
End Sub
Sub SaveTxt(Sh As Worksheet)
Application.DisplayAlerts = False
    Sh.Copy 'on copie l'onglet dans un nouveau fichier
    With ActiveWorkbook
        Fname = "D:\Users\.........\" & Sh.Name & ".txt"
        .SaveAs Fname, FileFormat:=xlText, CreateBackup:=False
        .Close False
    End With
    MsgBox "Export effectué en " & Fname, vbInformation
End Sub
Function IsFeuille(F) As Boolean
    On Error Resume Next: IsFeuille = Not Worksheets(F) Is Nothing
End Function
Bonjour
Si je commrends bien
Avec la ligne de code contenant array j'indique le nom des onglets devant s'enregistrer en txt.
Merci
 

fanch55

XLDnaute Barbatruc
Hello,
Le code à l'air super.
Est-ce que l'on peut faire l'export mais en filtrant au préalable les datas en colonne B ?

Bonne journée
Pas du tout,
on ne fait que dupliquer une feuille puis on la sauvegarde en tant que fichier Txt,
donc tous les filtres excel sont inopérants .

Par contre, vous pouvez exporter une feuille avec les données filtrées en tant que pdf :
VB:
Sub ExportTab()
    Folder = ThisWorkbook.Path & "\"
    For Each Onglet In Array("Bd") ', "Onglet1", "Onglet2", "etc...")
        If IsFeuille(Onglet) Then
            Worksheets(Onglet).ExportAsFixedFormat Type:=xlTypePDF, _
                Filename:=Folder & Onglet & ".pdf"
        End If
    Next
End Sub
 
Dernière édition:

Statistiques des forums

Discussions
313 296
Messages
2 096 923
Membres
106 788
dernier inscrit
Pragmatis