Importation de fichiers .txt

Imer2007

XLDnaute Occasionnel
Bonjour à tous,

On m'a récemment donné une mission à effectuer et je sens que je vais avoir besoin de vos lumières car je ne sais pas comment procéder.

J'ai plusieurs fichiers texte (.txt) que je dois importer dans un fichier Excel.
Les fichiers sont de la forme suivante:
cmr23-fmess-nok(date AAMMJJ).txt
fano-ddif(date AAMMJJ).txt (exemple fano-ddif080923.txt)
fdece(date AAMMJJ).txt
fdiff(date AAMMJJ).txt
finco(date AAMMJJ).txt
fliste(date AAMMJJ).txt
fratt(date AAMMJJ).txt
frejet(date AAMMJJ).txt
fs58rsi(date AAMMJJ).txt
spoc90(date AAMMJJ).txt

Ces fichiers arrivent quotidiennement dans un dossier de notre serveur, et contiennent chacun plusieurs lignes de données, chaque donnée étant séparée par des points virgules.

Le principe est que je souhaite importer via macro les données de ces fichiers
dans un fichier excel et qu'une fois le traitement effectué ces fichiers texte se déplacent dans un dossier (genre "tâches effectuées").

Pourriez-vous m'aiguiller ?

Merci d'avance !:)
 

Imer2007

XLDnaute Occasionnel
Re : Importation de fichiers .txt

Tototiti,

Je reçois toujours la meme erreur meme en ayant fait la modif.
Je vous envoie ci joint un fichier épuré au maximum (contient le fichier excel et certains fichiers txt "fdece").

Si ca peut vous aider.
 

Pièces jointes

  • XL.zip
    24.7 KB · Affichages: 60
  • XL.zip
    24.7 KB · Affichages: 45
  • XL.zip
    24.7 KB · Affichages: 54

tototiti2008

XLDnaute Barbatruc
Re : Importation de fichiers .txt

une petite modif du code :

Code:
Sub texte()
    Dim SourceWkb As Workbook, NbLignes As Long, NbColonnes As Long
    Workbooks.OpenText Filename:="Z:\fdece050521.txt", Origin:= _
        xlMSDOS, StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote _
        , ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=True, Comma:= _
        False, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), Array(2, 1) _
        , Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1), Array(9, 1), _
        Array(10, 1), Array(11, 1), Array(12, 1), Array(13, 1), Array(14, 1), Array(15, 1), Array( _
        16, 1), Array(17, 1), Array(18, 1), Array(19, 1), Array(20, 1), Array(21, 1)), _
        TrailingMinusNumbers:=True
    Set SourceWkb = ActiveWorkbook
    NbColonnes = SourceWkb.ActiveSheet.Range("IV1").End(xlToLeft).Column
    NbLignes = SourceWkb.ActiveSheet.Range("A65536").End(xlUp).Row
    With SourceWkb.ActiveSheet
        .Range(.Cells(2, 1), .Cells(NbLignes, NbColonnes)).Copy Destination:=ThisWorkbook.Worksheets("fdece").Range("A65536").End(xlUp).Offset(1, 0)
    End With
    SourceWkb.Close False
End Sub
 

tototiti2008

XLDnaute Barbatruc
Re : Importation de fichiers .txt

ça devrait marcher :

Code:
Sub texte()
    Dim SourceWkb As Workbook, NbLignes As Long, NbColonnes As Long, FS As FileSearch
    Set FS = Application.FileSearch
    With FS
        .LookIn = "Z:\"
        .Filename = "fdece*.txt"
        If .Execute(msoSortByLastModified, msoSortOrderAscending) > 0 Then
            For i = 1 To .FoundFiles.Count
                Workbooks.OpenText Filename:=.FoundFiles(i), Origin:= _
                    xlMSDOS, StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote _
                    , ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=True, Comma:= _
                    False, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), Array(2, 1) _
                    , Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1), Array(9, 1), _
                    Array(10, 1), Array(11, 1), Array(12, 1), Array(13, 1), Array(14, 1), Array(15, 1), Array( _
                    16, 1), Array(17, 1), Array(18, 1), Array(19, 1), Array(20, 1), Array(21, 1)), _
                    TrailingMinusNumbers:=True
                Set SourceWkb = ActiveWorkbook
                NbColonnes = SourceWkb.ActiveSheet.Range("IV1").End(xlToLeft).Column
                NbLignes = SourceWkb.ActiveSheet.Range("A65536").End(xlUp).Row
                With SourceWkb.ActiveSheet
                    .Range(.Cells(2, 1), .Cells(NbLignes, NbColonnes)).Copy Destination:=ThisWorkbook.Worksheets("fdece").Range("A65536").End(xlUp).Offset(1, 0)
                End With
                SourceWkb.Close False
            Next i
        End If
    End With
End Sub
 

Imer2007

XLDnaute Occasionnel
Re : Importation de fichiers .txt

Bonjour,

J'ai pu adapter le code aux autres fichiers txt et ca me les a bien importer. Jusque là, pas de problème...
Cependant, je me suis rendu compte en le faisant que j'ai 2 types de fichiers txt qui ne possèdent pas de ";". Par conséquent, Excel me les importe dans une cellule uniquement.
Un exemple de ces fichiers txt:

Fichier spoc90
23110123456789123462590 DUPONT GERARD 123456789123456080915T023 8260
Alors voilà comment les décomposer :
23 110 123456789123462 590 DUPONT GERARD 123456789123456 080915 T023 (ou W119) 8260 (les 4 derniers chiffres peuvent etre différents).

Fichier fs58rsi
23110123456789123456458001234567891234123456R84GERARD 12345678912341100123456123456030231100640037 7103

Pour obtenir :
23 110 1234567891234 45 800 1234567891234 123456 r84 GERARD 1234567891234 110 0 123456 123456 0 30 23 110 0 640 0 37 7103

Quelqu'un saurait m'aider pour la mise en forme ?
 

Pièces jointes

  • spoc90051022.zip
    199 bytes · Affichages: 29

tototiti2008

XLDnaute Barbatruc
Re : Importation de fichiers .txt

Bonjour Imer,

Je te conseilles de commencer comme auparavant :

tu enregistres une macro où tu :
ouvres le fichier texte depuis excel
fais les réglages dans l'assistant (largeur fixe....) pour décomposer tes champs.
arrêtes l'enregistreur
En récupérant la ligne OpenText, ça devrait fonctionner...
 

Imer2007

XLDnaute Occasionnel
Re : Importation de fichiers .txt

Bon, ca fonctionne effectivement.

Sauf que je viens de m'apercevoir d'un truc... c'est que à chaque fois que je clique sur mon bouton de macro pour importer un fichier txt, ca l'importe à chaque fois, or moi je souhaiterais qu'une fois que le fichier est importé, que si je reclique sur mon bouton d'importation, qu'il ne soit pas recopié.

Exemple, j'ai un fichier texte cmr23-fmess-nok du 01 janvier 2008 (cmr23-fmess-nok010108.txt) avec 3 lignes de données A, B, C.
Je clique sur mon bouton pour importer ce fichier. J'ai donc ma feuille avec les 3 lignes de données.
A l'heure actuelle, si je reclique sur mon bouton de commande, ca me copie à nouveau les données, ce qui veut dire que je me retrouve avec 6 lignes : A, B, C, A, B, C. Or je ne souhaite pas avoir ce doublon.

Comment faire pour éviter ca ?
 

tototiti2008

XLDnaute Barbatruc
Re : Importation de fichiers .txt

je vois 2 possibilités :

avant importation, on efface toutes les données (c'est le plus simple)
ou
on essaye d'identifier la date des données présentes pour ne pas réimporter ces données là, et là ça peut se compliquer...
 

Imer2007

XLDnaute Occasionnel
Re : Importation de fichiers .txt

Vu avec mon boss, la personne qui va traiter ces données sur Excel va surement modifier les données... ce qui veut dire que je ne vois que la deuxième possibilité...

Voilà comment je vois la marche à suivre : on intègre une colonne qui récupère la date du fichier (date qui est dans le titre du fichier) pour chaque donnée.
Exemple : fichier cmr23-fmess-nok010108.txt avec 3 lignes de données A,B,C.
On récupère le "010108" et on l'intègre dans les colonnes pour A, B, C.
L'importation se fait en comparant la colonne date et la date du fichier.
Si la date existe, on n'importe pas...

Maintenant à voir si ca fonctionne... ou pas.
 

Statistiques des forums

Discussions
312 164
Messages
2 085 870
Membres
103 007
dernier inscrit
salma_hayek