enregistrer sous format txt avec séparateur spécifique

Janus62

XLDnaute Nouveau
Bonjour à tous,

j'aimerais enregistrer un fichier excel comportant plusieurs colonne au format txt mais en utilisant des séparateurs |

comment procéder ?

merci d'avance
 

mromain

XLDnaute Barbatruc
Re : enregistrer sous format txt avec séparateur spécifique

Bonjour Janus62,

voici une macro qui peux répondre à ton PB :
Code:
'---------------------------------------------------------------------------------------
' Procedure : Procédure XlsToTxt
' Author    : mromain
' Date      : 10/06/2009
' Purpose   : exporte une feuille Excel dans un fichier texte
'               - l'attribut "sheetExport" représente la feuille source (pour l'export)
'               - si l'attribut "exportFileName" n'est pas précisé, une IHM demandera à l'utilisateur de sélectionner le fichier
'               - si l'attribut "csvDelimiter" n'est pas précisé, la valeur prise par défaut sera ";"
'---------------------------------------------------------------------------------------
'
Public Sub XlsToTxt(sheetExport As Worksheet, Optional exportFileName As String, Optional csvDelimiter As String = ";")
Dim myFso As Object, csvFile As Object, i As Integer, j As Integer, csvLine As String

' si le nom de fichier CSV destination n'a pas été précisé,
If exportFileName = Empty Then
    ' récupérer le nom du fichier à créer
    Do
        exportFileName = Application.GetSaveAsFilename(InitialFileName:=sheetExport.Name & ".csv", filefilter:="Fichier CSV, *.csv")
    Loop Until UCase(exportFileName) <> "FAUX"
End If

' créer le fichier
Set myFso = CreateObject("Scripting.FileSystemObject")
Set csvFile = myFso.CreateTextFile(Filename:=exportFileName, overwrite:=True)

With sheetExport
    ' boucler sur toutes les lignes
    For i = 1 To .Cells.SpecialCells(xlCellTypeLastCell).Row
        ' initialiser la ligne CSV
        csvLine = vbNullString
        ' boucler sur toutes les colonnes
        For j = 1 To .Cells.SpecialCells(xlCellTypeLastCell).Column
            ' créer la ligne
            csvLine = csvLine & .Cells(i, j).Text & csvDelimiter
        Next j
        csvLine = Left(csvLine, Len(csvLine) - Len(csvDelimiter))
        ' écrire la ligne dans le fichier
        csvFile.WriteLine csvLine
    Next i
End With

' fermer le fichier
csvFile.Close
Set csvFile = Nothing: Set myFso = Nothing
End Sub

et voilà comment l'utiliser :
Code:
XlsToTxt ThisWorkbook.Sheets("Feuille à exporter"), [COLOR=Red]"c:\resultat.csv"[/COLOR], "|"

si tu ne précise pas le fichier destination (en rouge), une boite de dialogue s'ouvre pour que l'utilisateur crée le fichier destination.


a+
 

Phil39

XLDnaute Occasionnel
Re : enregistrer sous format txt avec séparateur spécifique

Bonjour à tous,

j'aimerais enregistrer un fichier excel comportant plusieurs colonne au format txt mais en utilisant des séparateurs |

comment procéder ?

merci d'avance

donc un fichier .CSV avec | au lieu de ; ?

si c'est pour un "one-shoot", tu peux peut être changer le type de séparateur de listes dans les options régionales de Windows :

Démarrer / Panneau de configuration / Options régionales et linguistiques / onglet Options régionales / Personnaliser / zone Séparateur de listes.

EDIT : bon, je remballe mes billes avec le code de MRomain... :p
 

Catrice

XLDnaute Barbatruc
Re : enregistrer sous format txt avec séparateur spécifique

Bonjour à tous,

Ci-joint, une autre solution :
Code:
Sub Test()
Chemin = ThisWorkbook.Path
Fichier = "Test.txt"
Sep = "|"
'----------------------
Set fs = CreateObject("Scripting.FileSystemObject")
Set a = fs.CreateTextFile(Chemin & "\" & Fichier, True)
With Sheets("Feuil1")
    For Each X In .Range("A1:" & .Range("A65536").End(xlUp).Address)
        For Each Y In .Range(X, .Cells(X.Row, 256).End(xlToLeft))
            Var1 = Var1 & Sep & Y.Value
        Next
        a.WriteLine Right(Var1, Len(Var1) - 1): Var1 = ""
    Next
End With
a.Close
End Sub
... finalement basée sur le meme principe que celle de mromain
 

Pièces jointes

  • Classeur1.xls
    27.5 KB · Affichages: 242
  • Classeur1.xls
    27.5 KB · Affichages: 279
  • Classeur1.xls
    27.5 KB · Affichages: 283
Dernière édition:

Janus62

XLDnaute Nouveau
Re : enregistrer sous format txt avec séparateur spécifique

Un grand merci pour vos réponses,

j'essaye d'exploiter la solution de romain, mais je n'arrive pas à lancer la macro proposée bien que je l'ai collé dans mon fichier

Etant débutant, y a t-il une manipulation spécifique ?

merci
 
G

Guest

Guest
Re : enregistrer sous format txt avec séparateur spécifique

bonjour,

Pour appeler la macro de mromain:

Code:
Sub ExporterFeuille()
 XlsToTxt Sheets("NomDeLaFeuilleAExporter") , NomDeFichier, "|"
End Sub

Remplacer:
1 - NomDeLaFeuilleAExporter par le nom de ta feuille
2 - NomDeFichier par le nom complet du fichier final: "c:\fichier.csv" (avec le guillemets)

A+
 

Janus62

XLDnaute Nouveau
Re : enregistrer sous format txt avec séparateur spécifique

Merci Catrice,

j'ai repris ton exemple car celui de romain m'indiquait que je n'avais pas accès.

cela fonctionne impec, je n'ais plus qu'à modifier le nom du fichier et le chemin d'accès

encore un grand merci

:)
 

Statistiques des forums

Discussions
312 215
Messages
2 086 330
Membres
103 186
dernier inscrit
Eliyass