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 :

Macro concaténation de fichiers


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 21
    Points : 6
    Points
    6
    Par défaut Macro concaténation de fichiers
    Salut à tous et à toutes !

    Je vous expose mon problème : J'ai une multitude de fichiers .csv (un peu plus de 2500), et ils sont nommés de la manière suivante (sur 3 années différentes):
    Tss_data0102130800
    Tss_data0102130856
    Tss_data0506131625
    Les 6 premiers chiffres déterminent la date (JJMMAA) et les 4 derniers l'heure.
    Voilà, ce que je voudrais c'est de trouver une solution afin de concaténer par jour. C'est à dire qu'au lieu d'avoir 3-4 fichiers par jour, je n'en ai plus qu'un seul. J'ai pensé à une macro qui pourrait, par exemple, ne prendre en compte que les 14 premiers caractères des noms de fichiers, et concaténer les fichiers identiques. Néanmoins, je n'ai aucune idée de comment réaliser cette macro.

    Merci d'avance pour votre aide et conseil.
    Bonne journée à tous et à toutes !

  2. #2
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274
    Par défaut
    Salut, à adapter à ton contexte, fusionne les XLS ou les CSV
    Fichiers attachés Fichiers attachés

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 21
    Points : 6
    Points
    6
    Par défaut
    Merci pour votre réponse rapide. Je regarde ça et je reviens vers vous pour vous dire où ca en est.

    EDIT: Après avoir essayer de comprendre la macro, je ne vois pas comment l'adapter à mon problème. J'entends bien que ce que vous m'avez envoyé sert à fusioner des fichier .csv néanmoins, je ne vois pas où ces derniers sont sauvegardé, ni comment lui dire qu'il ne doit prendre en compte que les 14 premiers caractères pour pouvoir les fusioner par jours. Je suis débutant dans le monde des macros, et j'aimerais en connaitre d'avantage étant donné que ces dernière sont très utiles et permettent de gagner un maximum de temps.

    Merci d'avance, je retourne à mes recherches !

  4. #4
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274
    Par défaut
    Salut, via les Options et Checkboxes tu sélectionnes qqs paramètres.
    "Sélection Dossier" permet de sélectionner le dossier racine ( et sous dossiers si recherche récursive cochée ) concerné par l'import.

    cet import et fusion des csv se fait dans la feuille Datas_xxx, xxx s'incrémente si limite du nombre de lignes dépassé. il faut sauver ces Datas_xxx via "Save Datas_xxx".

    Dans un premier temps qqch comme ceci devrait fonctionner, avant de faire 3 boucles imbriquées une sur les années, une sur 12 mois et une autre sur 31 jours.

    dans la procédure ListeFichiersDossier(sChemin As String, bInclureSousDossiers As Boolean) faire l'ajout : And sFichier Like "Tss_data010213*"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    .....
    	If sFichier <> ThisWorkbook.Name And UCase$(TypeFichier) = UCase(FSO.GetExtensionName(sFichier)) And _
             sFichier Like "Tss_data010213*" Then
    .....

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 21
    Points : 6
    Points
    6
    Par défaut
    Merci pour l'astuce, je vais l'essayer aujourd'hui, et revenir vers vous pour vous dire où cela en est.

    EDIT à 9:26
    Lorsque je fais l'ajout de <<And sFichier Like "Tss_data010213*">> dans ListeFichiersDossier, ma macro ne trouve plus les fichiers .csv (une fenêtre info s'ouvre me disant qu'il n'y en a pas dans le dossier). J'ai cherché d'où l'erreur pouvait venir, j'ai essayé de trouvé par moi même (en recherchant des infos sur l'outil like notamment) mais je n'ai pas trouvé.
    Désolez si mes problèmes semblent idiot, mais j'aimerais comprendre pourquoi cela ne marche pas, est- ce un problème avec mes fichiers .csv ? La macro ?

    Encore merci

  6. #6
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274
    Par défaut
    Salut, le message est suffisamment explicite, je pense, il n'y a pas de fichiers de la forme Tss_data010213* dans le dossier racine concerné.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 21
    Points : 6
    Points
    6
    Par défaut
    Salut, j'étais justement en train d'écrire un message afin de signaler qu'après vérification j'ai tout simplement corrigé le problème en ajoutant "And sFichier Like "Tss_data*". J'ai toujours une erreur mais cette fois ci, c'est à la fin. J'ai une erreur dîtes "Erreur d'exécution '13' incompatibilité du type" sur cette ligne (en rouge):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub MepFeuilles()
    Dim Ws As Worksheet
        For Each Ws In ThisWorkbook.Worksheets
            If (Ws.Name <> ShParam.Name) And (Ws.Name Like sNomFeuillesDatas & "*") Then
                With Ws
                    .Activate
                    .Tab.ColorIndex = 19
                    .Columns("A:" & LettreColMax).Columns.AutoFit
                   .Range("A1").Select
                End With
            End If
        Next Ws
    End Sub
    Ce doit être un problème de variable dans la macro. Je continue à chercher de mon côté.

    Cordialement,
    Madjid

  8. #8
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut

    Faire du Cross Posting n'est pas vraiment « chercher de son côté » !
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 21
    Points : 6
    Points
    6
    Par défaut
    Si j'ai fais du Cross Posting, c'est justement parce que je n'ai rien trouvé depuis hier après midi de mon côté...
    Néanmoins, le fait d'enlever un columns et d'inverser les lignes 5 et 6 ne règlent malheureusement pas le problème.

    Merci quand même.

  10. #10
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274
    Par défaut
    Salut, tu vas où là ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Option Explicit
     
    Dim LettreColMax As String
    ......
     
    Sub SaveDatas(Optional Dummy As String)
    	.....
    	LettreColMax = NumCol2Lettre(Application.Columns.Count)
    	.....
    End Sub

  11. #11
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut

    En fait je n'ai pas cherché à régler le problème vu qu'il n'y en a pas …
    … en attendant la réponse à la question pourtant posée par deux fois ‼

    Certes il y a bien eu une réponse mais totalement à côté …

    Mes remarques servent juste à améliorer la logique du code …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 21
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par kiki29 Voir le message
    Salut, tu vas où là ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Option Explicit
     
    Dim LettreColMax As String
    ......
     
    Sub SaveDatas(Optional Dummy As String)
    	.....
    	LettreColMax = NumCol2Lettre(Application.Columns.Count)
    	.....
    End Sub
    Salut kiki29,
    Qu'entends tu par "tu vas où là?"
    Vraiment désolez mais ce n'est que la 3eme macro que je traite, et les 2 précédentes étaient simpliste. Celle ci est nettement plus compliqué (pour moi), je ne saisi pas complètement toute les lignes du code.

    Cordialement

  13. #13
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 21
    Points : 6
    Points
    6
    Par défaut
    Salut, voilà j'ai réussis (en partie) ce que je souhaitais réaliser à la base. Avec cette macro, je peux concaténer tout les fichiers .csv d'un dossier en un seul fichier .csv .
    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
    Sub importDonnees()
        Dim principal As ThisWorkbook
        Dim repertoire As String, Fichier$
        Application.ScreenUpdating = False
        Set principal = ThisWorkbook
        repertoire = "C:\Documents and Settings\...\Bureau\Test_Macro\"
        Fichier = Dir(repertoire & "*.csv")
        Do While Fichier <> ""
            Workbooks.Open (repertoire & Fichier)
            If Fichier Like "Tss_data*" Then
            ActiveSheet.UsedRange.Copy Destination:=principal.Sheets(1).Range("a" & Rows.Count).End(xlUp).Offset(1)
            ActiveWorkbook.Close
            Fichier = Dir
            End If
        Loop
        ChDir "C:\Documents and Settings\...\Bureau\Test_Macro\Nouveau\"
    ActiveWorkbook.SaveAs Filename:= _
    "C:\Documents and Settings\...\Bureau\Test_Macro\Nouveau\Finale.csv" _
    , FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
    ReadOnlyRecommended:=False, CreateBackup:=True
    End Sub
    Néanmoins je ne trouve pas le moyen de "dire" à la macro :
    -Va dans le dossier;
    -Prends les fichiers de nom identiques (les 14 premieres caractères surtout : Tss_dataJJMMAA);
    -Fusionne les;
    -Enregistre le en .csv;
    -Réitère l'opération pour tout les fichiers.

    Je sais pas trop si vous voyais ce que je souhaite réaliser.
    Merci d'avance pour vos aide et conseil,
    Bonne journée.

  14. #14
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 21
    Points : 6
    Points
    6
    Par défaut
    Petite mise à jour, si je trouve un jour ça pourra surement servir à quelqu'un d'autre. Après avoir fait pas mal de recherches (Sans poster sur d'autre forum ou je ne sais quoi), j'ai opté pour une solution.
    Mon idée est la suivante:
    Etant donnée que tout les noms de fichiers ont la même structure, et que ce qui m'intéresse est la date, j'ai décidé de prendre le milieu du nom de fichier et de les comparer entre eux.
    Pour ce faire, j'ai écris le code suivant :
    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
    Sub importDonnees()
        Dim principal As ThisWorkbook
        Dim repertoire As String
        Dim NomFichierActif As String
        Dim DateActiveP As String
        Dim DateActive As String
        Dim Init As Boolean
        
        Application.ScreenUpdating = False
        Set principal = ThisWorkbook
        repertoire = "C:\Documents and Settings\9403095F\Bureau\Test_Macro\"
        NomFichierActif = Dir(repertoire & "*.csv")
        Init = True
        Do While NomFichierActif <> ""
            DateActive = Mid(NomFichierActif, 9, 6) ' Prendre la date 1 sur le nom d'un fichier
                     
                If DateActiveP = DateActive Then ' Comparer date 1 et date 2
       
                    Workbooks.Open (repertoire & NomFichierActif) ' copie
                    ActiveSheet.UsedRange.Copy Destination:=principal.Sheets(1).Range("a" & Rows.Count).End(xlUp).Offset(1) ' copie
                    ActiveWorkbook.Close True
                    NomFichierActif = Dir
                    DateActiveP = DateActive ' mettre la date 1 dans la date 2
                    Init = False
                    ChDir "C:\Documents and Settings\9403095F\Bureau\Test_Macro\Nouveau\"
                
            End If
        Loop
    End Sub
    Néanmoins, le programme ne fonctionne pas. Il semblerait qu'il bloque au lignes suivante (en gras dans le programme) :
    Workbooks.Open (repertoire & NomFichierActif) ' copie ActiveSheet.UsedRange.Copy Destination:=principal.Sheets(1).Range("a" & Rows.Count).End(xlUp).Offset(1) ' copie

    En espérant optenir une réponse ou un petit conseil d'une ame charitable ,
    Bonne journée !

  15. #15
    Nouveau Candidat au Club
    Femme Profil pro
    Chef de projet en SSII
    Inscrit en
    Mars 2015
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2015
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par Msisou Voir le message
    Salut, j'étais justement en train d'écrire un message afin de signaler qu'après vérification j'ai tout simplement corrigé le problème en ajoutant "And sFichier Like "Tss_data*". J'ai toujours une erreur mais cette fois ci, c'est à la fin. J'ai une erreur dîtes "Erreur d'exécution '13' incompatibilité du type" sur cette ligne (en rouge):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub MepFeuilles()
    Dim Ws As Worksheet
        For Each Ws In ThisWorkbook.Worksheets
            If (Ws.Name <> ShParam.Name) And (Ws.Name Like sNomFeuillesDatas & "*") Then
                With Ws
                    .Activate
                    .Tab.ColorIndex = 19
                    .Columns("A:" & LettreColMax).Columns.AutoFit
                   .Range("A1").Select
                End With
            End If
        Next Ws
    End Sub
    Ce doit être un problème de variable dans la macro. Je continue à chercher de mon côté.

    Cordialement,
    Madjid

    Bonjour,

    après avoir testé cette superbe macro (merci kiki), j'ai effectivement le même message d'erreur. Mais ce message d'erreur n'empêche en rien la macro de fonctionner et de fournir les résultats attendus... Néanmoins, cette erreur me taribiscottait. Avant tout, je précise que je débute dans les macro. J'ai commencé par regarder les valeurs prises par la variable LettreColMax. C'est un string qui prend, suite à une boucle, toujours la valeur XFD.

    Ne comprenant pas ce que faisait cette fonction et surtout ce que cela apportait, j'ai enlevé la ligne n° 8 et "oh miracle" tout fonctionne parfaitement bien. Test effectué sur différents types de fichiers et avec plus ou moins de colonnes...


    Si l'auteur peut m'indiquer ce qu'il avait en tête à la création de cette macro, je suis très intéressé de le savoir. (peut être avec un peu plus de commentaires dans le code aurait permis de comprendre le pourquoi du comment et cela est très utile aux débutants comme moi)

    Merci,
    Samuel

Discussions similaires

  1. Macro concaténation de fichiers
    Par info009 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 13/06/2014, 22h26
  2. Macros sur Plusieurs fichiers Excel
    Par Echizen1 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 15/06/2006, 11h21
  3. concaténation de fichiers
    Par donmamio dans le forum Langage
    Réponses: 5
    Dernier message: 26/04/2006, 12h49
  4. [debutant] concaténation de fichiers
    Par Spyco dans le forum Entrée/Sortie
    Réponses: 7
    Dernier message: 13/07/2005, 10h52
  5. Comment concaténer plusieurs fichiers en un ?
    Par souch dans le forum Langage
    Réponses: 16
    Dernier message: 14/12/2004, 18h58

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