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 :

fusion de fichiers texte avec macro VBa


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Novembre 2009
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 2
    Points : 1
    Points
    1
    Par défaut fusion de fichiers texte avec macro VBa
    Bonjour à tous,

    voici mon priblème :

    Chaque jour, j'ai un nombre aléatoire de fichiers textes structuré toujours de la même manière mais avec un nombre de lignes différents dans chaque fichier.

    J'ai besoin à l'aide d'une macro de pouvoir les fusionner dans une même feuille excel dans Excel et ensuite que ce fichier fusionné soit enregistré au même emplacement et portant le nom du repertoire dans lequel il se trouve.

    Quelqu'un pourrait-il m'aider pour la conception de cette macro car cela dépasse mes comptrétences ?

    Merci d'avance et à bientôt j'éspère

    Xak28

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Bonjour Xak, bienvenue sur le forum
    Avec XP tu peux utiliser le pseudo dos
    Adapte ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub test()
    Shell "cmd /c Copy C:\txt\Classeur1.txt /A + C:\txt\Classeur3.txt /A D:\fichierstxt\Classeur2.txt"
    End Sub
    Sinon tu as la méthode consistant à ouvrir les deux fichiers, le premier en écriture, le second en lecture et d'écrire les lignes les unes après les autres.
    Ou encore, d'ouvrir les deux fichiers dans Excel en tant que txt et de copier l'un à la suite de l'autre puis d'enregistrer le résultat en tant que txt
    Ou encore, avec la même méthode, d'enregistrer en tant que csv
    Après, je te laisse imaginer une autre méthode
    Bonne journée

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Novembre 2009
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Merci pour ta réponse mais si je comprend bien, il n'existe pas un moyen de récupérer tous les fichiers texte d'un même répertoire et de les fusionner en automatique dans un même classeur ?

    Les fichiers portent des noms différents sans logique particulères et je souhaiterait ne pas avoir à les ouvrir manuellement.

    Je sais que des logiciels le font très bien mais je préfererai auromatiser cela dans Excel uniquement en une seule macro.

    Est-ce envisageable ?

    xak28

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Les différentes méthodes que je t'ai indiquées sont réalisables par macro. Jète un oeil ici, tu as une méthode qui permet d'ajouter le contenu de feuilles de calculs de différents classeurs les uns à la suite des autres dans une même feuille.
    Pour des txt, c'est pareil sauf qu'au lieu d'ouvrir un xls, tu ouvres un txt en tant que classeur ne contenant qu'une feuille de calculs.
    Commence par enregistrer l'ouverture d'un txt depuis Excel, après il te restera juste à voir la copie des données dans le classeur principal.
    Creuse un peu
    Bonne soirée

  5. #5
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 926
    Points
    55 926
    Billets dans le blog
    131
    Par défaut
    Bonjour et bienvenue sur nos forums

    Comme toujours, c'est d'abord un problème de découpage des actions et de mise en place, avant d'être un problème de code VBA


    Citation Envoyé par xak28 Voir le message
    ...j'ai un nombre aléatoire de fichiers textes
    Où sont-ils? Dans un même dossier? La macro doit-elle les rechercher? Comment indiquer à la macro quels fichiers chercher?


    Citation Envoyé par xak28 Voir le message
    ...
    structuré toujours de la même manière mais avec un nombre de lignes différents dans chaque fichier.
    Je suppose que chaque ligne représente un enregistrement. Y-a-t-il une ligne d'entête à supprimer lors de l'import? Quel est le séparateur de champ?


    Citation Envoyé par xak28 Voir le message
    J'ai besoin à l'aide d'une macro de pouvoir les fusionner dans une même feuille excel dans Excel et ensuite que ce fichier fusionné soit enregistré au même emplacement et portant le nom du repertoire dans lequel il se trouve.
    Après avoir répondu à ces questions, j'envisage les actions suivantes:
    1. On boucle sur tous les fichiers texte d'un dossier
    2. Chaque fichier est ouvert dans Excel
    3. On convertit la plage en fonction du séparateur de données
    4. On se positionne sur la première cellule libre en A dans le fichier de destination, sur la feuille idoine (dans mon exemple, la feuille "Consolidation")
    5. On copie-colle la plage du fichier d'origine
    6. On ferme le fichier d'origine sans enregistrer
    7. On boucle tant qu'il y a des fichiers
    8. On récupère le nom du dossier
    9. On enregistre le fichier Excel


    Le code ci-dessous réalise cela. Je l'ai découpé en deux procédures:
    - La procédure ExtraireFichiersTexte qui boucle sur les TXT d'un dossier, et qui réalise les points 1, 7, 8 et 9. C'est cette procédure qui doit être lancée.
    - La procédure ExtraireDonnees qui réalise les points 2 à 6.

    Présupposé:
    • Le classeur contenant le code sera placé dans le dossier des TXT
    • Ce classeur contient une feuille Consolidation et les entêtes en ligne 1 de cette feuille correspondent à la structure des fichiers TXT
    • Les fichiers TXT se trouvant dans le dossier doivent tous être copiés dans le classeur

    En fin de procédure, ce classeur sera renommé du nom du dossier qui le contient.

    Code : 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
    Sub ExtraireFichiersTexte()
        'Boucle sur les fichiers texte du dossier
        ' dans lequel se trouve le fichier Excel
     
        Dim NomFichierTexte As String
        Dim NomFichierFinal As String
        Application.ScreenUpdating = False '
     
        NomFichierTexte = Dir(ThisWorkbook.Path & "\*.txt")
        Do While NomFichierTexte <> ""
            ExtraireDonnees NomFichierTexte
            NomFichierTexte = Dir()
        Loop
     
        NomFichierFinal = StrReverse(Left(StrReverse(ThisWorkbook.Path), _
            InStr(1, StrReverse(ThisWorkbook.Path), "\") - 1))
        ThisWorkbook.SaveAs NomFichierFinal
     
        Application.ScreenUpdating = True
    End Sub
     
    Sub ExtraireDonnees(ByVal NomFichier As String)
        ' Extrait les données du fichier
     
        Dim Classeur As Workbook
        Dim Plage As Range
        Dim Feuille As Worksheet
        Dim CelluleCible As Range
     
        Set Classeur = Workbooks.Open(NomFichier)
        Set Feuille = Classeur.Worksheets(1)
        Set CelluleCible = ThisWorkbook.Worksheets("Consolidation").Range("a" & ThisWorkbook.Worksheets("Consolidation").Rows.Count).End(xlUp)(2)
     
        Set Plage = Feuille.UsedRange
        Feuille.UsedRange.TextToColumns Destination:=Range("a1"), _
            DataType:=xlDelimited, other:=True, otherchar:=";"
        Set Plage = Range(Feuille.Range("a2"), Feuille.Cells.SpecialCells(xlCellTypeLastCell))
        Plage.Copy Destination:=CelluleCible
        Classeur.Close savechanges:=False
    End Sub


    A toi d'adapter en fonction de tes besoins, de l'automatisation pouvant être placée si plusieurs dossiers doivent être traités, par exemple.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

Discussions similaires

  1. [AC-2007] Changer un fichier excel en fichier texte avec VBA
    Par fofomama dans le forum VBA Access
    Réponses: 5
    Dernier message: 26/04/2010, 10h57
  2. Possibilité de compilation de fichiers texte avec une macro
    Par Tinien dans le forum Macros et VBA Excel
    Réponses: 27
    Dernier message: 27/10/2008, 22h15
  3. Ouverture fichier openoffice avec macro VBA
    Par Christian Lo dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 26/08/2008, 05h48
  4. Réponses: 6
    Dernier message: 25/08/2008, 13h36
  5. Réponses: 1
    Dernier message: 25/08/2008, 11h57

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