IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Concaténation de plusieurs fichiers txt dans un nouveau


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Profil pro
    Consultant finance
    Inscrit en
    Mars 2009
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant finance

    Informations forums :
    Inscription : Mars 2009
    Messages : 165
    Points : 75
    Points
    75
    Par défaut Concaténation de plusieurs fichiers txt dans un nouveau
    Bonjour,

    J'ai une dizaine de fichiers texte dans mon dossier que j'aimerais regrouper dans un nouveau avec :
    - dans le nouveau une ligne d'entête (texte libre)
    - à partir des anciens pouvoir coller dans le nouveau de la ligne 2 à la dernière.

    J'ai déjà une boucle Dir() qui me permet de trouver tous mes fichiers.

    Merci pour votre aide.

  2. #2
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 914
    Points : 5 121
    Points
    5 121
    Par défaut
    Bonjour
    voir avec powerquery, efficace, simple et sans aucun codage
    Powerquery / nouvelle source de données / texte / choisir ton fichier
    et ainsi de suite pour toutes les fichiers
    Puis onglet combiner / ajouter des requetes / ajouter les requetes comme étant nouvelle /
    --------------------------------------------------------------*****----------------------------------------------------------------------------
    Bonne Continuation & Plein Succès
    Notre seul pouvoir véritable consiste à aider autrui avec modestie
    ______________________________________________________
    Pour dire merci, cliquer sur et quand la discussion est résolue, penser à cliquer sur le bouton

  3. #3
    Membre régulier
    Profil pro
    Consultant finance
    Inscrit en
    Mars 2009
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant finance

    Informations forums :
    Inscription : Mars 2009
    Messages : 165
    Points : 75
    Points
    75
    Par défaut
    Merci pour ta réponse,
    Mais y a-t-il un moyen d'automatiser cette tâche ? Car les fichiers ont des noms différents chaque mois et leur nombre peut varier.
    Je pensais plus à une boucle (avec mon Dir()) et ensuite manipuler des fichiers texte avec des For Append, Input ou je ne sais plus trop quoi.

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 773
    Points : 28 637
    Points
    28 637
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Mais y a-t-il un moyen d'automatiser cette tâche ? Car les fichiers ont des noms différents chaque mois et leur nombre peut varier.
    Power Query est conçu pour charger et transformer des données et les déposer ensuite dans Excel

    Choisir Dossier comme illustré ci-dessous, ensuite sélectionner le dossier en question et puis cliquer sur le bouton Combiner et transformer les données
    Et chaque mois, semaine ou jour pour recharger les données, il suffit de faire un clic droit et actualiser

    Nom : 231206 PowerQuery Dossier.png
Affichages : 112
Taille : 59,9 Ko
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Membre régulier
    Profil pro
    Consultant finance
    Inscrit en
    Mars 2009
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant finance

    Informations forums :
    Inscription : Mars 2009
    Messages : 165
    Points : 75
    Points
    75
    Par défaut
    Justement, je n'ai pas besoin de les avoir dans EXCEL. Sinon je les aurais importés (je n'aurais pas eu l'idée de powerquery, certes)
    Là c'est juste 10 fichier txt que je veux regrouper dans un seul.

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 773
    Points : 28 637
    Points
    28 637
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Alors personnellement. J'utiliserais Power Query pour la transformation de l'ensemble des fichiers texte pour terminer avec VBA pour copier la feuille excel dans un nouveau classeur et le sauver en fichier texte
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  7. #7
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 914
    Points : 5 121
    Points
    5 121
    Par défaut
    bonjour
    si non il y a un petit astuce pour ceux qui ne maîtrise ni VBA ni PowerQuery :
    Ouvrir un répertoire avec tous les fichiers .txt à fusionner
    ouvrir un nouveau fichier texte et écrire :
    for /r "D:\logs\" %%i in (*.txt) do for /f "delims=" %%j in ('type "%%i"') do echo %%j>> resultat.txt
    remplace D:\logs\ par le vrai chemin d'accès de ton répertoire
    Change l’extension de ton fichier de .txt à .bat
    clic ce nv fichier .bat et tu aura un fichier fusionné avec les données de tous les fichiers sous ce répertoire
    --------------------------------------------------------------*****----------------------------------------------------------------------------
    Bonne Continuation & Plein Succès
    Notre seul pouvoir véritable consiste à aider autrui avec modestie
    ______________________________________________________
    Pour dire merci, cliquer sur et quand la discussion est résolue, penser à cliquer sur le bouton

  8. #8
    Membre régulier
    Profil pro
    Consultant finance
    Inscrit en
    Mars 2009
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant finance

    Informations forums :
    Inscription : Mars 2009
    Messages : 165
    Points : 75
    Points
    75
    Par défaut
    Citation Envoyé par BENNASR Voir le message
    bonjour
    si non il y a un petit astuce pour ceux qui ne maîtrise ni VBA ni PowerQuery :
    Ouvrir un répertoire avec tous les fichiers .txt à fusionner
    ouvrir un nouveau fichier texte et écrire :

    remplace D:\logs\ par le vrai chemin d'accès de ton répertoire
    Change l’extension de ton fichier de .txt à .bat
    clic ce nv fichier .bat et tu aura un fichier fusionné avec les données de tous les fichiers sous ce répertoire
    Bonjour et meilleurs vœux,

    Je reviens sur cette astuce un peu tard (désolé).
    Est-ce possible que je puisse remplacer D:\logs\ par le répertoire courant ? (Celui où se trouvera le .bat).

    Merci encore pour votre aide.

  9. #9
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 118
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 118
    Points : 1 641
    Points
    1 641
    Par défaut
    Salut,

    Si tu ne précises pas de chemins absolu, les chemins seront relatif au dossier courant.
    Et donc, si tu ne précises pas de dossier, le dossier courant sera choisit.

  10. #10
    Membre régulier
    Profil pro
    Consultant finance
    Inscrit en
    Mars 2009
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant finance

    Informations forums :
    Inscription : Mars 2009
    Messages : 165
    Points : 75
    Points
    75
    Par défaut
    Dernière petite question : qu'est-ce que je dois enlever pour que la fenêtre de commande ne s'affiche pas ?
    J'ai essayé "do echo", mais ça ne fait plus rien.

    merci encore

  11. #11
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 118
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 118
    Points : 1 641
    Points
    1 641
    Par défaut
    La fenêtre, c'est le contexte d'exécution du script (une session d'invite de commandes) créé par l'OS.
    Le script lui même ne peut rien y changer.

  12. #12
    Membre confirmé Avatar de Valtrase
    Homme Profil pro
    Jeune retraité...
    Inscrit en
    Janvier 2016
    Messages
    361
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Jeune retraité...
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Janvier 2016
    Messages : 361
    Points : 643
    Points
    643
    Par défaut
    Salut,
    Tu crée un fichier Bath qui lance ton script :
    Voir exemple sur cette discussion: Utilisez « cmd /c » mais masquez la fenêtre de la console - Stack Overflow

    Et un petit éditeur de script gratuit : http://www.vbsedit.com
    Jean-Paul sous Office 365 et Windows 10/11 (Intel I7 16Go)

    Si vous avez trouvé réponse à votre question penser à la passer en Vous avez aimé la discussion alors un fait toujours plaisir.
    Le savoir n'a de valeur que s'il est partagé.
    La vérité de demain se nourrit de l'erreur d'hier. Antoine de Saint-Exupéry

  13. #13
    Membre régulier
    Profil pro
    Consultant finance
    Inscrit en
    Mars 2009
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant finance

    Informations forums :
    Inscription : Mars 2009
    Messages : 165
    Points : 75
    Points
    75
    Par défaut
    c'est qu'en fait, je trouvais ça un peu long et j'ai pensé que c'était à cause de l'affichage de la fenêtre de commande et le défilement de toutes les lignes.
    Il n'y aurait pas plutôt un moyen de copier un fichier dans un autre plutôt que de boucler ligne par ligne ?
    Parce qu'en tout je vais en avoir plusieurs dizaines de milliers chaque mois

  14. #14
    Rédacteur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2013
    Messages
    947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Août 2013
    Messages : 947
    Points : 4 058
    Points
    4 058
    Par défaut
    Bonjour,
    Je vous invite à tester le code ci-dessous, qui travaille par flux de données, avec (comme demandé dans votre premier message) :
    - Création d'un "nouveau" fichier et sa ligne d'entête personnalisée.
    - Ajout des fichiers à la suite sans leur première ligne.

    La fonction "Exemple" est à adapter à votre besoin (vous avez déjà la liste des fichiers à fisioner).

    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    'http://www.trucsweb.com/tutoriels/asp/adodbstream/
    'http://roger.neel.free.fr/langages/cours_htm/coursado/objet_stream.html
     
    '------------------------------------------------------------------------------------------------
    Sub Exemple()
    '------------------------------------------------------------------------------------------------
    ' Création de l'entête personnalisée dans le fichier "Test.txt":
    Call CreationEnTete("C:\Users\ott_l\Downloads\Test.txt", "Mon entête personnelle au format UTF_8")
     
    ' Fusion de plusieurs fichiers à ce fichier:
    Call FusionTxt("C:\Users\ott_l\Downloads\Test.txt", "C:\Users\ott_l\Downloads\Fichier_A.txt")
    Call FusionTxt("C:\Users\ott_l\Downloads\Test.txt", "C:\Users\ott_l\Downloads\Fichier_B.txt")
     
    End Sub
     
    '------------------------------------------------------------------------------------------------
    Sub CreationEnTete(NouveauFichier As String, Entete As String)
    '------------------------------------------------------------------------------------------------
    Dim oStream As Object
    Set oStream = CreateObject("ADODB.Stream")
    With oStream
        .Charset = "UTF-8"
        .Open
        .Type = 2 ' 1 = Binaire, 2 = Texte (valeur par défaut)
        .WriteText Entete ' Ecriture de l'entête.
        .SaveToFile NouveauFichier, 2  ' 1 = no overwrite, 2 = overwrite
        .Close
    End With
     
    End Sub
     
    '------------------------------------------------------------------------------------------------
    Sub FusionTxt(NouveauFichier As String, FichierAjouter As String)
    '------------------------------------------------------------------------------------------------
    Dim oStream As Object, sTexte
    Dim i As Integer
     
    ' Lecture du texte dans le fichier à ajouter:
    Set oStream = CreateObject("ADODB.Stream")
    With oStream
        .Charset = "UTF-8"
        .Open
        .Type = 2           ' Pour information : 1 = Binaire, 2 = Texte (valeur par défaut)
        .LineSeparator = -1 ' Pour information : Caractère séparateur de ligne, -1 = retour charriot et saut de ligne (par défaut)
        .LoadFromFile FichierAjouter ' Charge le fichier a ajouter.
        sTexte = .ReadText()         ' Mémorise son contenu.
        .Close
    End With
     
    ' Recherche la première ligne (qui finit par retour charriot et saut de ligne)
    ' et saute cette première ligne:
    i = InStr(1, sTexte, vbCrLf, vbBinaryCompare)
    sTexte = Mid(sTexte, i + 2)
     
    ' Ouvre le nouveau fichier et ajoute ce texte à la suite du nouveau fichier:
    Set oStream = CreateObject("ADODB.Stream")
    With oStream
        .Charset = "UTF-8"
        .Open
        .Type = 2           ' Pour information : 1 = Binaire, 2 = Texte (valeur par défaut)
        .LineSeparator = -1 ' Pour information : Caractère séparateur de ligne, -1 = retour charriot et saut de ligne (par défaut)
        .LoadFromFile NouveauFichier ' Charge le fichier.
        sTexte = .ReadText() & vbCrLf & sTexte ' Ajoute à l'origine le texte du fichier a ajouter.
        .Close ' Ferme le fichier, puis...
        .Open  ' l'ouvre à nouveau pour être au début du fichier.
        .WriteText sTexte  ' Ecrit le texte fusionné.
        .SaveToFile NouveauFichier, 2 ' Sauvegarde en écrasant l'ancien contenu.
        .Close
    End With
     
    End Sub
    '------------------------------------------------------------------------------------------------
    '------------------------------------------------------------------------------------------------

    Bonne continuation.

Discussions similaires

  1. Réponses: 1
    Dernier message: 26/03/2009, 16h56
  2. Copier plusieurs fichier txt dans un seul fichier
    Par vieri31 dans le forum C++Builder
    Réponses: 3
    Dernier message: 31/05/2008, 13h57
  3. Réponses: 2
    Dernier message: 26/01/2007, 14h58
  4. [Débutant] Lire plusieurs fichiers txt dans un répertoire
    Par leneuf dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 03/10/2006, 12h39
  5. Réponses: 28
    Dernier message: 22/05/2006, 16h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo