VBA ACCESS récupérer données dans un .txt
Résolu
tomasbruk
-
tomasbruk -
tomasbruk -
Bonjour à tous,
Afin de réaliser une mise à jour je recois un dossier composé d'une centaine de petits fichiers .txt. Chaques fichiers faisant références à un groupe (nom de fichier = nom d'un groupe).
De plus chacun de ses fichiers .txt contient les utlisateurs concernés (1 ligne du fichier .txt = 1 utilisateur).
Donc j'arrive à recuperer les noms de chaque fichier .txt afin de les mettre dans une colonne au sein d'un fichier excel ou csv.
code:
Mais je souhaiterais également récuperer chaque lignes contenus dans ses fichiers.
J'arrive à récupérer les lignes d'un fichier, mais je voudrais le faire pour tous les fichiers du dossier (sachant que les noms des fichiers peuvent etre différent d'une MAJ à l'autre).
Voici comment je procede pour 1 fichier:
Un petit coup main me ferais du bien, car je n'y arrive pas.
Merci !
Afin de réaliser une mise à jour je recois un dossier composé d'une centaine de petits fichiers .txt. Chaques fichiers faisant références à un groupe (nom de fichier = nom d'un groupe).
De plus chacun de ses fichiers .txt contient les utlisateurs concernés (1 ligne du fichier .txt = 1 utilisateur).
Donc j'arrive à recuperer les noms de chaque fichier .txt afin de les mettre dans une colonne au sein d'un fichier excel ou csv.
code:
Set objFSO = CreateObject("Scripting.FileSystemObject") Repertoire = "C:\Documents and Settings\chemin" 'Accède au dossier If objFSO.FolderExists(Repertoire) Then Set oFld = objFSO.GetFolder(Repertoire) MsgBox "Dossier trouvé" Else MsgBox "Ce dossier n'existe pas" End If ' extraction de la liste des groupes - utlisateurs Const ctePourLecture = 1 Const ctePourEcrire = 2 Const ctePourAjouter = 8 On Error Resume Next NomFichierTxt = "Resultat.csv" Set objDossier = objFSO.GetFolder(Repertoire) Set objResultat = objFSO.CreateTextFile((Repertoire & "\" & NomFichierTxt), ctePourEcrire) If (objDossier.Files.Count > 0) Then For Each objFichier In objDossier.Files If (InStr(1, objFichier.Name, ".txt", 1) > 0) Then objResultat.WriteLine objFichier.Name End If Next End If objResultat.Close Set objResultat = Nothing Set objDossier = Nothing Set objFSO = Nothing
Mais je souhaiterais également récuperer chaque lignes contenus dans ses fichiers.
J'arrive à récupérer les lignes d'un fichier, mais je voudrais le faire pour tous les fichiers du dossier (sachant que les noms des fichiers peuvent etre différent d'une MAJ à l'autre).
Voici comment je procede pour 1 fichier:
Const ctePourLecture = 1 Const ctePourEcrire = 2 Const ctePourAjouter = 8 Dim intFic As Integer Dim strLigne As String Dim objFSO, objResultat Dim Repertoire, NomFichierTxt Set objFSO = CreateObject("Scripting.FileSystemObject") NomFichierTxt = "Resultat2.csv" Repertoire = "C:\Documents and Settings\chemin" Repertoire2 = "C:\Documents and Settings\chemin du fichier" intFic = FreeFile Open (Repertoire2) For Input As intFic Set objResultat = objFSO.CreateTextFile((Repertoire & "\" & NomFichierTxt), ctePourEcrire) While Not EOF(intFic) Line Input #intFic, strLigne MsgBox strLigne objResultat.WriteLine strLigne Wend Close intFic
Un petit coup main me ferais du bien, car je n'y arrive pas.
Merci !
A voir également:
- VBA ACCESS récupérer données dans un .txt
- Fuite données maif - Guide
- Comment recuperer un message supprimé sur whatsapp - Guide
- Comment récupérer un document dans le presse-papier samsung - Guide
- Comment récupérer un compte facebook piraté - Guide
- Récupérer mon compte facebook désactivé - Guide
3 réponses
Bonjour,
Si j'ai bien compris ton problème, cette procédure devrait t'aider
Si j'ai bien compris ton problème, cette procédure devrait t'aider
Sub Collecter_Donnees() Dim strLigne As String Dim Repertoire, NomFichierTxt_Out, NomFichierTxt_Inp, NomFichierTxt_Dat Repertoire = "C:\Documents and Settings\chemin\" 'Repertoire de travail NomFichierTxt_Out = Repertoire & "Resultat2.csv" 'Fichier à créer NomFichierTxt_Inp = Repertoire & "Resultat.csv" 'Fichier avec les Noms des Fichiers txt Close 'Fermer tous les fichiers Open NomFichierTxt_Out For Output As #1 'création du fichier Resultat2.csv Open NomFichierTxt_Inp For Input As #2 'lecture du fichier Resultat.csv While Not EOF(2) Line Input #2, strLigne 'Lecture de la ligne NomFichierTxt_Dat = Repertoire & strLigne 'Nom du fichier de données Open NomFichierTxt_Dat For Input As #3 'Lecture du fichier de données While Not EOF(3) Line Input #3, strLigne 'Lecture ligne de donnée Print #1, strLigne 'Transfert dans le fichier Resultat2.csv Wend Close #3 'Fermer Fichier de données Wend Close 'Fermer tous les fichiers End Sub
Bonjour Yoda,
Je pense que tu as compris ce que je voulais mais malheureusement, ton code ne créé pas le fichier Resultat.csv, j' ai une erreur 53 - fichier introuvable sur la ligne :
S'en ca si je créé moi même le fichier resultat.csv je n'ai plus d'erreur mais mes 2 fichiers resultat sont vides !
Je pense que tu as compris ce que je voulais mais malheureusement, ton code ne créé pas le fichier Resultat.csv, j' ai une erreur 53 - fichier introuvable sur la ligne :
Open NomFichierTxt_Inp For Input As #2 'lecture du fichier Resultat.csv
S'en ca si je créé moi même le fichier resultat.csv je n'ai plus d'erreur mais mes 2 fichiers resultat sont vides !
Bonjour,
Fichier intouvable, c'est qu'il n'existe pas ou alors il n'est pas dans le répertoire indiqué
Le fichier "Resultat.csv" est bien celui que tu as déjà créé et qui contient la liste des fichiers txt à fusionner?
Vérifie la valeur de Repertoire et NomFichierTxt_Inp
rajoute ça:
'....
NomFichierTxt_Inp = Repertoire & "Resultat.csv" 'Fichier avec les Noms des Fichiers txt
MsgBox NomFichierTxt_Inp
Exit Sub
Close 'Fermer tous les fichiers
Quand tu auras réglé le problème mets ces deux lignes en commentaire
Ouvrir avec Bloc Notes le fichier Resultat.csv et regardes s'il contient bien les noms des fichiers txt à fusionner.
Fichier intouvable, c'est qu'il n'existe pas ou alors il n'est pas dans le répertoire indiqué
Le fichier "Resultat.csv" est bien celui que tu as déjà créé et qui contient la liste des fichiers txt à fusionner?
Vérifie la valeur de Repertoire et NomFichierTxt_Inp
rajoute ça:
'....
NomFichierTxt_Inp = Repertoire & "Resultat.csv" 'Fichier avec les Noms des Fichiers txt
MsgBox NomFichierTxt_Inp
Exit Sub
Close 'Fermer tous les fichiers
Quand tu auras réglé le problème mets ces deux lignes en commentaire
Ouvrir avec Bloc Notes le fichier Resultat.csv et regardes s'il contient bien les noms des fichiers txt à fusionner.
Re,
D'abord merci encore pour ton aide Yoda.
On se rapproche du but final ! mais c'est pas tout a fait.
Effectivement ton code etait correcte c'est moi qui n'ai pas verifier que mon fichier Resultat.csv contenait bien la liste.
A présent c'est le cas, je récupère bien le contenu de tout mes fichiers txt, seul souci c'est que les données se mettent dans une seul colonne du fichier Resultat2.csv ! alors que moi je souhaiterais que le 1er fichier soit mis dans la colonne 1, le fichier 2 va dans la colonne 2, et ainsi de suite....
S'en ca j'avais réussi a avoir le meme resultat que toi, mais mon code était différent, voici ce que j'avais mis (au cas ou) :
Ah oui j'oubliais, autre différence du code, c'est que la, les données etaient mise directement dans une table.
Mais bon si déjà j'arrive à créer mon fichier resultat2.csv avec un fichier par colonne cela sera deja formidable !
D'abord merci encore pour ton aide Yoda.
On se rapproche du but final ! mais c'est pas tout a fait.
Effectivement ton code etait correcte c'est moi qui n'ai pas verifier que mon fichier Resultat.csv contenait bien la liste.
A présent c'est le cas, je récupère bien le contenu de tout mes fichiers txt, seul souci c'est que les données se mettent dans une seul colonne du fichier Resultat2.csv ! alors que moi je souhaiterais que le 1er fichier soit mis dans la colonne 1, le fichier 2 va dans la colonne 2, et ainsi de suite....
S'en ca j'avais réussi a avoir le meme resultat que toi, mais mon code était différent, voici ce que j'avais mis (au cas ou) :
Dim Fic As String Fic = Dir("C:\chemin_du_dossier\*.txt") Do While Fic <> "" DoCmd.TransferText acImportDelim, , "group_user", "C:\chemin_du_dossier" & Fic Fic = Dir Loop
Ah oui j'oubliais, autre différence du code, c'est que la, les données etaient mise directement dans une table.
Mais bon si déjà j'arrive à créer mon fichier resultat2.csv avec un fichier par colonne cela sera deja formidable !
Aïe, ça se complique.
Pour faire ça dans un fichier, il faut lire tous les txt, les mettre en tableau, et tout retranscrire ligne par ligne.
Est-ce que tous les fichiers ont le même nombre le lignes? Combien de lignes? Seulement du texte ou aussi des nombres?
Combien de fichiers txt (conbien de colonnes)?
Tu pourrais faire plus simple en important chaque fichier txt dans une table différente.
Ou encore partir d'une table vide et ajouter un champ pour chaque fichier txt à importer.
A+.
Pour faire ça dans un fichier, il faut lire tous les txt, les mettre en tableau, et tout retranscrire ligne par ligne.
Est-ce que tous les fichiers ont le même nombre le lignes? Combien de lignes? Seulement du texte ou aussi des nombres?
Combien de fichiers txt (conbien de colonnes)?
Tu pourrais faire plus simple en important chaque fichier txt dans une table différente.
Ou encore partir d'une table vide et ajouter un champ pour chaque fichier txt à importer.
A+.
Ils n'ont pas tous le meme nombre de lignes, c'est aléatoire ! Au maximum y'a pas plus de 50 lignes dans les fichiers et certains sont vides.
Les lignes des fichiers txt sont comme ceux-ci :
- "CN=FR03949,OU=?????,DC=??????,DC=?????,DC=fr"
- "CN=FR03852OU=?????,DC=??????,DC=?????,DC=fr"
- "CN=FR03759,OU=?????,DC=??????,DC=?????,DC=fr"
Ensuite je selectionne toute la feuille et je remplace ca : ,OU=?????,DC=??????,DC=?????,DC=fr" par rien et idem pour ca : "CN=
Donc de la il ne reste plus que mon code utilisateur, car c'est ce code que je doit récuperer.
Il y a 131 fichiers txt dans mon répertoire.
Les lignes des fichiers txt sont comme ceux-ci :
- "CN=FR03949,OU=?????,DC=??????,DC=?????,DC=fr"
- "CN=FR03852OU=?????,DC=??????,DC=?????,DC=fr"
- "CN=FR03759,OU=?????,DC=??????,DC=?????,DC=fr"
Ensuite je selectionne toute la feuille et je remplace ca : ,OU=?????,DC=??????,DC=?????,DC=fr" par rien et idem pour ca : "CN=
Donc de la il ne reste plus que mon code utilisateur, car c'est ce code que je doit récuperer.
Il y a 131 fichiers txt dans mon répertoire.