Optimiser un remplacement de caractères spéciaux dans un fichier csv

[size=85]Bonjour à tous,

J'ai plusieurs fichiers csv brutes que j'éxtrait d'un système de gestion. cependant il comporte plusieurs caractères spéciaux que je dois changer. J'ai déjà le code pour mais il n'est pas optimale parce qu'il procède ligne par ligne et j'ai beaucoup de fichiers à nettoyer.

Auriez vous une idée de comment je pourrais l'optimiser :

' Premier fichier :

' Création des V2 & Suppression des caractères spéciaux

Adresse_fichier = Worksheets("Repertoire IMPORT").Range("C5") & "\NL"

Set Fso = CreateObject("Scripting.FileSystemObject")

For Each f In Fso.GetFolder(Adresse_fichier).Files

If (Left(f.Name, 18) = "REP" Or Left(f.Name, 18) = "REP") Then

Adresse = Adresse_fichier & "\" & f.Name

'nom_fichier_new = Replace(f.Name, ".csv", "_V2.csv")

'Adresse_new = Adresse_fichier & nom_fichier_new

sFileName = Adresse

iFileNum = FreeFile

Open sFileName For Binary As iFileNum

sBuf = Input(LOF(iFileNum), 1)

Close #iFileNum

sBuf = Replace(sBuf, "->", "")

iFileNum = FreeFile

'sFileName = Adresse_new

Open sFileName For Output As #iFileNum

Print #iFileNum, sBuf

Close #iFileNum

End If

Next

'Deuxième fichier

' Création des V2 & Suppression des caractères spéciaux

Adresse_fichier = Worksheets("Repertoire IMPORT").Range("C5") & "\PD"

Set Fso = CreateObject("Scripting.FileSystemObject")

For Each f In Fso.GetFolder(Adresse_fichier).Files

Adresse = Adresse_fichier & "\" & f.Name

'nom_fichier_new = Replace(f.Name, ".csv", "_V2.csv")

'Adresse_new = Adresse_fichier & nom_fichier_new

'Programme Marion

sFileName = Adresse

iFileNum = FreeFile

Open sFileName For Binary As iFileNum

sBuf = Input(LOF(iFileNum), 1)

Close #iFileNum

sBuf = Replace(sBuf, "", "")

iFileNum = FreeFile

'sFileName = Adresse_new

Open sFileName For Output As #iFileNum

Print #iFileNum, sBuf

Close #iFileNum

Next

Je répète ce code pour plusieurs fichiers .

Je vous remercie d'avance pour votre retour .

cdt,

Lily Dev

Bonjour

sans modèle on peux rien faire

car tu remplace sBuf = Replace(sBuf, "->", "") la ca doit être bon

et la sBuf = Replace(sBuf, "", "") tu remplace rien ?

A+

Maurice

Merci beaucoup pour votre retour rapide Maurice.

Sinon, je me suis juste tomper en recopiant le code sinon je vais aussi un remplacement la sBuf = Replace(sBuf, " ->", "") pour le deuxième fichier .

Ci joint le modèle.

A votre dispo pour échanger.

34macro-extract.xlsm (32.12 Ko)

Bonjour

merci pour le fichier

mes la je ne voie pas le fichier.CSV

A+

Maurice

19fichier-b.zip (2.22 Ko)
19fichier-a.zip (2.53 Ko)

Les exemples de fichiers csv.

Merci d'avance

Bonjour

a tester sur le fichier Fichier A.csv a voir

car le B a pas le même format

A+

Maurice

25importcsv1.zip (16.76 Ko)

Bonjour Maurice,

merci pour ton message, mais je ne trouve pas de macro.( je pense que tu m'a envoyé un mauvais fichier).

L'Idée serait d'importer les fichiers csv en utilisant la macro que j'ai envoyé.

Mon probleme aujourd'hui est que la macro n'est pas optimale parce qu'elle prend beaucoup de temps et que je dois traiter plusieurs fichiers CSV.

Merci.

Cdt,

Liliane

Je m'excuse en me relisant. C'est moi qui a lu le mauvais fichier.

Merci pour votre aide .

Je vais lire votre code .

Bonjour,

en utilisant les methodes de filesystem object, 40 x plus rapide.

'Premier fichier:
' Création des V2 & Suppression des caractères spéciaux

    Adresse_fichier = Worksheets("Repertoire IMPORT").Range("C5") & "\NL"
    Set fso = CreateObject("Scripting.FileSystemObject")
    For Each f In fso.GetFolder(Adresse_fichier).Files
        If (Left(f.Name, 18) = "REP" Or Left(f.Name, 18) = "REP") Then
            Adresse = Adresse_fichier & "\" & f.Name
            'nom_fichier_new = Replace(f.Name, ".csv", "_V2.csv")
            'Adresse_new = Adresse_fichier & nom_fichier_new

            Sfilename = Adresse
            iFileNum = FreeFile
            Set ts = fso.OpenTextfile(Sfilename)
            sbuf = ts.readall
            ts.Close
            sbuf = Replace(sbuf, "->", "")
            iFileNum = FreeFile
            'sFileName = Adresse_new
            Set ts = fso.createTextfile(Sfilename, True)
            ts.write newr
            ts.Close
        End If
    Next

    'Deuxième fichier
    ' Création des V2 & Suppression des caractères spéciaux
    Adresse_fichier = Worksheets("Repertoire IMPORT").Range("C5") & "\PD"
    For Each f In fso.GetFolder(Adresse_fichier).Files
        Adresse = Adresse_fichier & "\" & f.Name
        'nom_fichier_new = Replace(f.Name, ".csv", "_V2.csv")
        'Adresse_new = Adresse_fichier & nom_fichier_new
        'Programme Marion
        Sfilename = Adresse
        iFileNum = FreeFile
        Set ts = fso.OpenTextfile(Sfilename)
        sbuf = ts.readall
        ts.Close
        sbuf = Replace(sbuf, "", "")
        iFileNum = FreeFile
        'sFileName = Adresse_new
        Set ts = fso.createTextfile(Sfilename, True)
        ts.write sbuf
        ts.Close
    Next

Merci pour le retour.

Je pense que le code de filesystm devrait mieux marcher.

Sauf que je reçois un message d'erreur "L'entrée dépasse la fin du fichier " à la ligne "sBuf = ts.ReadAll ".

En cherchant sur le net, j'ai eu comme solution qu'il fallait l'ouvrir en binaire , ce qui me ramène à mon ancient code.

Si vous avez une meilleure solution, je suis preneuse parce que le Binaire est trop lent.

Merci d'avance .

Rechercher des sujets similaires à "optimiser remplacement caracteres speciaux fichier csv"