Copie contenu de fichiers .txt sur des cellules d'un fichier Excel

Bonjour,

Je suis totalement novice sur Excel VBA (très vagues et lointaines notions de macro)...

Je souhaiterai copier le contenu brut d'une liste de fichiers TXT dans une colonne d'un fichier Excel positionné au même endroit que tous mes fichiers TXT (exemple sur les 2 premières lignes: fichiers TXT en colonne A et le contenu en colonne B).

2021 08 24 10h41 20

Le chemin de mes fichiers est le suivant: E:\MEDIA\AH4\MEDIA et mon fichier est le suivant: ARGU_210824.xlsx

Pourriez-vous m'aider s'il vous plait ?

Merci d'avance.

Fred

3argu-210824.zip (224.06 Ko)

Bonjour Fred_Rex,

Voici un code qui répond à ton besoin :

Sub fichierTxt()

Dim intFic As Integer, strLigne As String, Chemin As String, Fichier As String

    Chemin = "C:\Desktop\" 'chemin à adapter vers le dossier où sont contenus les fichiers .TXT

    DerniereLigneA = Range("A" & Rows.Count).End(xlUp).Row
    DerniereLigneB = Range("B" & Rows.Count).End(xlUp).Row

        For i = 2 To DerniereLigneA
        Fichier = Range("A" & i).Value

            intFic = FreeFile
                Open Chemin & Fichier For Input As intFic
                    While Not EOF(intFic)
                        Line Input #intFic, strLigne
                        Range("B" & i) = strLigne
                    Wend
                Close intFic
        Next

End Sub

Je n'ai pas gérer le fait que le fichier n'existe pas, puisqu'il semblerait que tu les récupères au préalable.

Je te joins également le fichier avec la macro contenu.

Dis moi si c'est ok

1argu-210824.zip (226.21 Ko)

Bonjour Redmine,

Au top !

Le seul truc que j'ai été obligé de faire avant de lancer la macro sinon elle bloquait, c'est de supprimer les lignes pour lesquelles le fichier TXT était introuvable (je ne les avais pas tous finalement...).

Sinon, c'est parfait !

Un grand merci pour ton efficacité.

Fred

Redmine,

En creusant, je m'aperçois qu'il y a des lignes vides alors que j'ai bien les TXT et le contenu correspondant.

Exemple en ligne 964 (je te joins le TXT correspondant et le fichier Excel).

Aurais-tu une explication ?

Fred

1argu-210824.zip (509.17 Ko)

Fred,

De but en blanc je dirai que le nom du fichier dans ta base de donnée est différente de celle du fichier .TXT :

capture

Ligne 964 = S03A117-SISIC1830H11_AusschreibungstextFRA.txt

Nom fichier = s03a117-sisic1830h11-ausschreibungstextfra.txt

La macro recherche dans le dossier un fichier qui porte EXACTEMENT le même nom, il est normal qu'il ne traite pas la ligne 964 et les autres si elles ne sont pas pareil que le nom du fichier.

Redmine,

Est-il possible de s'affranchir de la casse ?

Sinon, je vais corriger avec le nom exact.

Fred

Oui, on peut tout passer en majuscule ou tout en minuscule, à voir selon le cas, mais pour s'affranchir complément de la casse ça me semble compliqué.

Sinon, au lieu de travailler sur une liste dans un fichier Excel, pourquoi ne pas faire une boucle dans le dossier ou sont tous les fichiers .txt puis faire un compte-rendu avec une colonne A = nom du fichier et une colonne B = contenu du fichier ?

Cela nous permettrai de contourner le problème de la casse et des fichiers inexistants.

Partant ?

Of course !

Par contre, j'essaie de comprendre (c'est toujours bien...) ce qui se passe sur la ligne 964 et lorsque je regarde le nom exact du fichier, il semble pourtant être le même:

2021 08 24 13h53 42 2021 08 24 14h03 11

Fred,

En réponse pour le fichier qui a le même nom, le problème ne vient pas du nom, mais de son contenu, ce qui pose problème dans le fichier "s03a117-sisic1830h11-ausschreibungstextfra.txt", il y a un retour chariot qui fait du vide... donc il copie du vide.

La solution pour boucler dans le dossier et faire un compte-rendu des fichiers et de leur contenu :

Sub fichierTxt()

Application.ScreenUpdating = False
Application.DisplayAlerts = False

Dim intFic As Integer, strLigne As String, Chemin As String, Fichier As String

    Chemin = "E:\MEDIA\AH4\MEDIA\"
    Fichier = Dir(Chemin & "*.txt")

        Do While Len(Fichier) > 0

        DerniereLigneA = Range("A" & Rows.Count).End(xlUp).Row + 1
        DerniereLigneB = Range("B" & Rows.Count).End(xlUp).Row + 1

            intFic = FreeFile
                Open Chemin & Fichier For Input As intFic
                    While Not EOF(intFic)
                        Line Input #intFic, strLigne
                        Range("A" & DerniereLigneA) = Fichier
                        Range("B" & DerniereLigneB) = strLigne
                    Wend
                Close intFic

        Fichier = Dir()
        Loop

Application.ScreenUpdating = True
Application.DisplayAlerts = True

End Sub

Avec le fichier en pièce-jointe

Je retombe sur le même nombre de lignes vides à partir de la ligne 27174: 1188

Allé une V3 et après je retourne travailler

Méga top !

Trop content...

Merci beaucoup pour ton aide Redmine !

Fred

Crois-tu qu'il soit possible de faire la même chose avec des fichiers .DOCX en corrigeant la macro ?

La macro fonctionne mais le retour est mauvais (certainement dû au format des données Word).

Tant pis.

Bonjour Redmine,

J'ai essayé sur d'autres TXT comme ceux-ci, mais la macro remonte des données bizarres...

Saurais-tu me dire ce qui coince ?

Merci d'avance.

Fred

Rechercher des sujets similaires à "copie contenu fichiers txt fichier"