Bonjour,

j'ai un fichier Excel de 32 colonne et de plus de 4000 ligne. les ligne sont variable. J'ai trouver plusieurs solution pour exporter ce fichier en fichier texte. Cependant les séparateur ne me convienne pas.

Ma première manière d'exporter est rapide et performante mais ce n'est pas les bon séparateurs: (Je ne veux pas aller dans les paramètre Windows pour les changer.)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
 
Sub export_bas()
    Application.ScreenUpdating = False 'désactive les actualisation d'écrans
    Application.Calculation = xlCalculationManual 'désactive les calcule dans excel
    Dim data As Worksheet
    Dim NvWkb As Workbook
        Nom_Dos = "\Base_txt\" 'le nom du dossier Nom_Dos prend comme valeur "\Base_txt\"
        rep_out = Suivi_FT.Path & Nom_Dos ' Rep_Out prend la valeur de l'emplacement du fichier excel + Nom_Dos
        fic_bd = "DataBase.txt" 'Le fichier base de données en txt prend le nom de "DataBase.txt"
    nBval = Application.WorksheetFunction.CountA([A:A]) 'NBval prend le du nombre de ligne dans le tableau
    NBC = Application.WorksheetFunction.CountA([1:1]) 'nbc prend le nombre le colonne dans une tableau
    If Dir(rep_out) = "" Then 'Si Le dossier dans le qu'elle on stock le fichier txt n'existe pas alors
        MkDir (rep_out) 'on créé ce fichier
    End If 'fin de si
 
Set data = Worksheets("Base de données") 'Attribution de la feuille à copier à une variable
'Copie et création du nouveau classeur avec la feuille Data
    data.Copy
    'Attribution du nouveau classeur (donc actif) à une variable (pour gérer notre classeur facilement)
    Set NvWkb = ActiveWorkbook
 
Application.DisplayAlerts = False 'désactive les boite de dialogue
ActiveWorkbook.SaveAs Filename:=rep_out & fic_bd, FileFormat:=xlCSV, local:=True, CreateBackup:=False ' enregistre sous en format txt associer au cvs qui permet de mettre automatiquement des séparateur ";"
    'Fermeture du nouveau classeur
    NvWkb.Close Savechanges:=False
Application.DisplayAlerts = True 'Remettre absolument ensuite
Application.Calculation = xlCalculationAutomatic 'réactive le calcule automatique dans excel
Application.ScreenUpdating = True 'reactive les actualisation d'écrans
End Sub
On a donc un fichier qui s'exporte super rapidement mais qui a comme s'séparateur des ";" il y a possibilité d'exporter avec des "," comme séparateur. Cependant cela ne m'intéresse pas je voudrais plutôt des "|" comme séparateur.
J'ai donc penser à une autre macro :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
 
Sub Ecrire_CSV()
 
Dim Rng As Range, Ligne As Range, Cel As Range
 
Dim sStr As String, sNomFichier As String
 
Dim NumFichier As Integer
 
Dim sSep As String
 
 
 
    sSep = "|"
 
    Nomfichier = ThisWorkbook.Path & "\nomfich.txt"
    nBval = Application.WorksheetFunction.CountA(Suivi_FT.Worksheets("Base de données").[A:A]) 'NBval prend le du nombre de ligne dans le tableau
    NBC = Application.WorksheetFunction.CountA(Suivi_FT.Worksheets("Base de données").[1:1]) 'nbc prend le nombre le colonne dans une tableau
    Set Rng = ThisWorkbook.Worksheets(1).Range(Cells(2, 1), Cells(nBval, NBC))
 
 
 
    Close
 
    NumFichier = FreeFile
 
 
 
    Open sNomFichier For Output As #NumFichier
 
        For Each Ligne In Rng.Rows
 
            sStr = ""
 
            For Each Cel In Ligne.Cells
 
                sStr = sStr & Cel.Text & sSep
 
            Next Cel
             sStr = Left(sStr, (Len(sStr) - 1))
            Print #NumFichier, sStr
 
        Next Ligne
 
    Close #NumFichier
 
End Sub
Cependant cette méthode prend trop de temps, j'ai donc un fichier avec un séparateur "|" comme je le veux mais l'exportation prend trop de temps..
Est t'il possible de reduir ce temps ?

J'ai donc penser de stocker dans ne variable l'intégralité des mes lignes tableaux et d'après print cette variable directement en fichier texte.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
 
Sub Ecrire_CSV()
 
Dim Rng As Range, Ligne As Range, Cel As Range
 
Dim sStr As String, sNomFichier As String
 
Dim NumFichier As Integer
 
Dim sSep As String
Dim nBval As Integer
Dim NBC As Integer
 
 
    sSep = "|"
 
    sNomFichier = ThisWorkbook.Path & "\nomfich.txt"
    nBval = Application.WorksheetFunction.CountA(Suivi_FT.Worksheets("Base de données").[A:A]) 'NBval prend le du nombre de ligne dans le tableau
    NBC = Application.WorksheetFunction.CountA(Suivi_FT.Worksheets("Base de données").[1:1]) 'nbc prend le nombre le colonne dans une tableau
    Set Rng = ThisWorkbook.Worksheets(1).Range(Cells(2, 1), Cells(nBval, NBC))
 
 
 ReDim Tableau(1 To nBval)
    Close
 
    NumFichier = FreeFile
 
 i = 1
 
    Open sNomFichier For Output As #NumFichier
 
        For Each Ligne In Rng.Rows
 
            sStr = ""
 
            For Each Cel In Ligne.Cells
 
                sStr = sStr & Cel.Text & sSep
 
            Next Cel
 
            Tableau(i) = Left(sStr, (Len(sStr) - 1))
 
 
 
            i = i + 1
        Next Ligne
        Print #NumFichier, Tableau
 
    '_______________ou encore___________________
    Const ForReading = 1, ForWriting = 2, ForAppending = 3
 Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0
 
 
    ts.Write Tableau
     ts.Close
 
'__________________________________________________________
 
End Sub
Cependant cela ne fonctionne pas.
Je veux donc trouvez un moyen rapide d'exporter une nombre important de ligne avec comme séparateur le "|".

Avez vous des piste ou des solutions pour moi ?
Cordialement,
Passepartout007