Bonjour à tous,

Je suis actuellement en train de travailler sur un VBS pour concaténer plusieurs fichiers csv en un unique fichier.

Les points d'attention sont les suivants :
- Il y a 6 fichiers UTF-8 à concaténer et chaque fichier fait environ 70 000 lignes
- Les 20 premières lignes de chaque fichier sont à ignorer sauf pour le premier car la 20ème contient les entêtes de ligne

Mon problème actuellement est la performance du code utilisé. Il fonctionne correctement mais prend plus d'une heure pour traiter les 20 000 premières lignes et le temps de traitement par ligne augmente au fur et à mesure. Ce code devant tourner tous les jours, un temps de traitement supérieur à 24h n'est évidemment pas acceptable.

Après plusieurs tests, la partie qui pose problème est l'écriture des fichiers (leur lecture ne prend que quelques minutes).

Le code pour écrire dans mon nouveau fichier cible est le suivant :

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
Sub ECRIRE_FICHIER(MON_FICHIER_TGT, ByRef MON_FICHIER_LU, FILE_TYPE_NAME, DELIMETER)
	Dim FileText
	Dim i,j, BufferLine
 
	Select Case FILE_TYPE_NAME
		Case "UTF-8"	
			BufferLine = ""
			For i=0 to Ubound(MON_FICHIER_LU)-2
				end if
				BufferLine = BufferLine & MON_FICHIER_LU(i)(0)
				For j=0 to UBound(MON_FICHIER_LU(i))
					BufferLine = BufferLine & DELIMETER & MON_FICHIER_LU(i)(j)
				Next
				BufferLine = BufferLine & vbCrLf
			Next
			Set FileText = CreateObject("ADODB.Stream")
				With FileText		
					.CharSet = "utf-8"
					.Mode = 3			
					.Open
					.Type = 2
					.Position = 0			
					.WriteText(BufferLine)
				End With
			FileText.SaveToFile(MON_FICHIER_TGT)
			Set FileText = Nothing
		Case "ANSI"
			Set FileText = CreateObject("Scripting.FileSystemObject").OpenTextFile(MON_FICHIER_TGT,2,True,0)
			For i=0 to Ubound(MON_FICHIER_LU)
				BufferLine = BufferLine & MON_FICHIER_LU(i)(0)
				For j=0 to UBound(MON_FICHIER_LU(i))
					BufferLine = BufferLine & DELIMETER & MON_FICHIER_LU(i)(j)
				Next
				FileText.WriteLine(BufferLine)
				BufferLine = ""
			Next		
			FileText.Close
			Set FileText = Nothing			
	End Select
End Sub
Si quelqu'un a une idée pour optimiser la partie UTF-8, cela me sera d'une grande aide !

Wombowser