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.)
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.
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
J'ai donc penser à une autre macro :
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..
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
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.
Cependant cela ne fonctionne pas.
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
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
Partager