Importer des lignes précises dans Excel depuis un .TXT

Bonjour,

j'ai une centaines de fichiers TXT chaque jours qui arrivent dans le même dossier , ceux ci sont tous structurés de la même manière , premiere ligne le nom , deuxieme ligne prenom , troisieme ligne age , etc ...

Je cherche a récupérer à l'aide d'une macro le contenu des 6 premières lignes uniquement , chaque contenu de ligne sera copié dans une colonne différente .

premiere colone NOM , deuxieme colon PRENOM , troisime colone AGE , etc ...

auriez vous une proposition de Macro ?

merci

Bonjour,
Peux-tu joindre 1 ou 2 txt pour exemple ?
Cdlt.

Bonjour

Des fichiers qui arrivent chaque jour, on est sur un poste Windows et pas un serveur Unix?

Faut-il accéder à un répertoire serveur depuis un poste Windows?

Faut-il différencier les fichiers à importer sur une date ou sur un intervalle de date ou faire le choix dans un répertoire parmi tous les fichiers présents, ou encore détecter les fichiers déjà importés?

merci pour vos réponse, voici un fichier txt ( parmis les 100 recus chaque jour ) , les fichiers sont stockés dans un repertoire local de mon PC ( c:\import\ )

voici également ce que mon fichier Excel dois donner à l'arrivé

8import.xlsm (15.91 Ko)
10exemple.txt (102.00 Octets)

Scraper,

le fichier doit présenté un visuel en temps réel du contenu total de ce répertoire , donc à chaque lancement de la macro toutes les lignes seront effacés et recrée.

Les fichiers qui ne seront plus présents dans le repertoire ne seront alors plus présents dans le fichier Excel

en cours de test

Sub importe()
 Dim TextLine As String
 Dim Ligne As Long, Colonne As Long
 Dim Fichier As String, Chemin As String
 Dim Identifiant As String, Nom As String, Prenom As String, Adresse As String, CP As String, DateNaissance As String

 Chemin = "c:\import\"
 Fichier = Dir(Chemin & "*.txt")

 Do
  Open Chemin & Fichier For Input As #1
  'Ligne = Range("A" & Rows.Count).End(xlUp).Row
  'Colonne = 0
  Ligne = 2
    Line Input #1, Identifiant
    Range("D" & Ligne).Value = Identifiant
    Line Input #1, Nom
    Range("E" & Ligne).Value = Nom
    Line Input #1, Prenom
    Range("F" & Ligne).Value = Prenom
    Line Input #1, Adresse
    Range("G" & Ligne).Value = Adresse
    Line Input #1, Adresse  '2eme ligne de l'adresse non traitée
    Line Input #1, CP
    Range("H" & Ligne).Value = CP
    Line Input #1, DateNaissance
    Range("I" & Ligne).Value = DateNaissance

    Ligne = Ligne + 1
  Close #1
 Fichier = Dir
 Loop Until Fichier = ""
 End Sub
1import2.xlsm (25.29 Ko)

Bonjour,
Une proposition Power Query.
L'actualisation est réalisée à l'ouverture du fichier.
Cdlt.

4pim91120.zip (17.78 Ko)

Merci à tous pour vos réponses :-)

Scraper , lorsque j'execute ton script , il écrit dans la 4 eme colone la premiere info ( au lieu de commencer dans la premiere colone ) , ensuite il ecrit bien toutes les infos

Par contre il ne boucle pas dans le répertoire , il ne prend que le dernier fichier de la liste

Jean-Eric , Merci

J'essai mais pour l'instant j'ai un beau méssage d'erreur , je cherche pourquoi

image

Scraper,

le résultat de ton script ( mon dossier C:\IMPORT\ contient les 100 fichiers textes ) , il prend que le dernier, c'est un super bon début je trouve :-)

image

Bonjour,

quelqu'un aurait-il une idée ? :-)

merci

Bonjour,
Dans l'éditeur Power Query, il faut que tu modifies ton option de confidentialité.
Ruban, Fichier, Options et paramètres, Options de requête et Confidentialité.
Coche la dernière option comme dans l'image.
Cdlt.

capture d ecran 2021 09 24 140446

Un grand merci Jean-Eric , CA fonctionne, je vais pouvoir creuser un peu :-)

bon weekend

Jean-Eric, le fichier est top !! , afin que je sois autonome je cherche dans quelle ETAPE de la requête se situe la sélection des lignes , ainsi je pourrais enlever ou ajouter une info présente dans le fichier

saurais tu me renseigner ?

merci

Bonjour,
Il faut ouvrir l'éditeur Power Query.
Sélection fnImportTxt
Ruban, Accueil, Requête et Editeur avancé pour voir le détail de la fonction.

Table.FirstN(Source,6) correspond à :
Ruban, Accueil, Réduire les lignes,Conserver les premières lignes (nombre de lignes =6).

Cdlt.

(Filename)=>
let
    Source = Table.FromColumns({Lines.FromBinary(File.Contents(Filename), null, null, 1252)}),
    KeptFirstRows = Table.FirstN(Source,6),
    TransposedTable = Table.Transpose(KeptFirstRows),
    RenamedColumns = Table.RenameColumns
        (
            TransposedTable,
            {
                {"Column1", "Référence"},
                {"Column2", "Nom"},
                {"Column3", "Prénom"},
                {"Column4", "Adresse.1"},
                {"Column5", "Adresse.2"},
                {"Column6", "Code postal - Ville"}
            }
        )
in
    RenamedColumns

Merci Jean-Eric ca fonctione :-)

bonsoir,

un peut tard!

Type Masque
    Identifiant As String * 11
    Nom         As String * 9
    Prenom      As String * 7
    Adresse1    As String * 23
    Adresse2    As String * 1
    CP       As String * 12
    DateNaissance        As String * 11
End Type
Sub test()

  'Ligne = Range("A" & Rows.Count).End(xlUp).Row
  Dim Personne As Masque
  Open "C:\MyRep\exemple.txt" For Random As #1 Len = Len(Personne)
  Do While Not EOF(1)
  Get #1, , Personne
  Ligne = 2
       Range("D" & Ligne).Value = Personne.Identifiant
       Range("E" & Ligne).Value = Personne.Nom
       Range("F" & Ligne).Value = Personne.Prenom
       Range("G" & Ligne).Value = Personne.Adresse1
       Range("H" & Ligne).Value = Personne.CP
      Range("I" & Ligne).Value = Personne.DateNaissance
     Ligne = Ligne + 1
      Loop
  Close #1
End Sub
Rechercher des sujets similaires à "importer lignes precises txt"