Bonjour à tous,

Suite à mon message sur le traitement d'un fichier xml en vba ici que j'ai résolu, JP m'a conseillé de poster un nouveau message pour voir si il y aurait moyen d'améliorer mon code pour qui actuellement très lent.

Donc voilà en gros je dois parcourir un fichier texte pour rechercher des caractères spécifiques et les remplacer par d'autres.
Pour cela j'ai décidé d'tuliser les FSO pour ouvrir le fichier texte, lire une ligne, la modifiée le cas échéant et l'écrire dans un nouveau fichier texte. Je n'ai pas trouver de solution pour modifier à la volée un fichier, je suis obligé d'en créer un nouveau et de copier le premier dedans. Pour la lecture tout ce passe bien mais l'écriture par les FSO était très lente, je suis donc passer avec les fonctions directe ce qui m'a fait gagner un peu de temps d'éxécution.

Voici mon code :
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
Function XMLFilePreTreatment(ByVal InputFileName As String) As String
 
    Dim i As Long
    Dim Text As String
    Dim intFic As Integer
 
    Dim oFSO As Scripting.FileSystemObject
    Dim oTxtIn As Scripting.TextStream
    'Instanciation du FSO
    Set oFSO = New Scripting.FileSystemObject
    intFic = FreeFile
    XMLFilePreTreatment = (Split(InputFileName, ".")(0) & "_Corrected." & Split(InputFileName, ".")(1))
 
    'Ouverture des fichiers
    Set oTxtIn = oFSO.OpenTextFile(InputFileName, ForReading)
    Open XMLFilePreTreatment For Output As intFic
 
    'Traitement du fichier
    With oTxtIn
        Do While Not .AtEndOfStream
            Text = .ReadLine                    'Lecture de la ligne
            Text = Replace(Text, "&#", "##")    'Modification le cas échéant
            Print #intFic, Text                 'Ecriture dans un nouveau fichier
        Loop
    End With
 
    oTxtIn.Close
    Close intFic
 
End Function
A noter que ce code est long a éxécuter car les fichiers texte que je traite sont assez important, par exemple cela a pris 12 min sur un fichier 18,5Mo, 251 700 lignes et 18 906 486 caractères. Et ce fichier est plus petit que le standard. En standard je suis plutôt de l'ordre de 70Mo, 1 731 512 lignes ou encore 70 923 984 caratères.

Donc voilà mon code est quand même très simple mais peut être y a-t-il encore un moyen de l'optimiser pour réduire le temps d'éxécution. Si vous avez des idées .