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 :

Regrouper des données à partir de plusieurs fichiers


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Assistant commercial
    Inscrit en
    Mars 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Assistant commercial
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mars 2018
    Messages : 3
    Points : 4
    Points
    4
    Par défaut Regrouper des données à partir de plusieurs fichiers
    Bonjour tout le monde,

    Je cherche en fait, à regrouper des données de mes clients dans un seul fichier Excel récapitulatif.
    Les fichiers source sont organisés comme cela : j'ai un dossier export, dans lequel j'ai un dossier par pays avec différents fichiers dont le fichier Excel avec les données des clients de ce pays.

    Voilà une photo pour que ce soit plus clair :
    Nom : Export.png
Affichages : 898
Taille : 76,3 Ko

    (Je précise que n'est pas possible pour moi de regrouper tous les fichiers Excel dans un seul dossier)

    Mes connaissances en VBA sont très limitées mais j'ai réussi à trouver ce code qui me permet de faire l'extraction des données mais seulement pays par pays:

    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
    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
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    Sub Regroupement_de_donnees()
        Dim MyPath As String, FilesInPath As String
        Dim MyFiles() As String
        Dim SourceRcount As Long, FNum As Long
        Dim mybook As Workbook, BaseWks As Worksheet
        Dim sourceRange As Range, destrange As Range
        Dim rnum As Long, CalcMode As Long
     
        ' Change this to the path\folder location of your files.
        MyPath = "P:\Export\Afrique"
     
        ' Add a slash at the end of the path if needed.
        If Right(MyPath, 1) <> "\" Then
            MyPath = MyPath & "\"
        End If
     
        ' If there are no Excel files in the folder, exit.
        FilesInPath = Dir(MyPath & "*.xl*")
        If FilesInPath = "" Then
            MsgBox "No files found"
            Exit Sub
        End If
     
        ' Fill the myFiles array with the list of Excel files
        ' in the search folder.
        FNum = 0
        Do While FilesInPath <> ""
            FNum = FNum + 1
            ReDim Preserve MyFiles(1 To FNum)
            MyFiles(FNum) = FilesInPath
            FilesInPath = Dir()
        Loop
     
        ' Set various application properties.
        With Application
            CalcMode = .Calculation
            .Calculation = xlCalculationManual
            .ScreenUpdating = False
            .EnableEvents = False
        End With
     
        ' Add a new workbook with one sheet.
        Set BaseWks = Workbooks.Add(xlWBATWorksheet).Worksheets(1)
        rnum = 1
     
        ' Loop through all files in the myFiles array.
        If FNum > 0 Then
            For FNum = LBound(MyFiles) To UBound(MyFiles)
                Set mybook = Nothing
                On Error Resume Next
                Set mybook = Workbooks.Open(MyPath & MyFiles(FNum))
                On Error GoTo 0
     
                If Not mybook Is Nothing Then
                    On Error Resume Next
     
                    ' Change this range to fit your own needs.
                    With mybook.Worksheets("Clients")
                        Set sourceRange = .Range("A1:Q1000")
                    End With
     
                    If Err.Number > 0 Then
                        Err.Clear
                        Set sourceRange = Nothing
                    Else
                        ' If source range uses all columns then
                        ' skip this file.
                        If sourceRange.Columns.Count >= BaseWks.Columns.Count Then
                            Set sourceRange = Nothing
                        End If
                    End If
                    On Error GoTo 0
     
                    If Not sourceRange Is Nothing Then
     
                        SourceRcount = sourceRange.Rows.Count
     
                        If rnum + SourceRcount >= BaseWks.Rows.Count Then
                            MsgBox "There are not enough rows in the target worksheet."
                            BaseWks.Columns.AutoFit
                            mybook.Close savechanges:=False
                            GoTo ExitTheSub
                        Else
     
                            ' Copy the file name in column A.
                            With sourceRange
                                BaseWks.Cells(rnum, "A"). _
                                        Resize(.Rows.Count).Value = MyFiles(FNum)
                            End With
     
                            ' Set the destination range.
                            Set destrange = BaseWks.Range("B" & rnum)
     
                            ' Copy the values from the source range
                            ' to the destination range.
                            With sourceRange
                                Set destrange = destrange. _
                                                Resize(.Rows.Count, .Columns.Count)
                            End With
                            destrange.Value = sourceRange.Value
     
                            rnum = rnum + SourceRcount
                        End If
                    End If
                    mybook.Close savechanges:=False
                End If
     
            Next FNum
            BaseWks.Columns.AutoFit
        End If
     
    ExitTheSub:
        ' Restore the application properties.
        With Application
            .ScreenUpdating = True
            .EnableEvents = True
            .Calculation = CalcMode
        End With
    End Sub
    Ce code fonctionne très bien mais que pour un seul pays. Je sais que ce code cherche dans tous les classeurs Excel du fichier source les données de la feuille nommée "Clients". Mais du coup j'aimerais en fait en une seule Macro pouvoir extraire les données de tous mes fichiers Pays en une seule fois. Est-ce que c'est possible ??

    Dites-moi si ça vous paraît clair, pour moi ça l'est mais ce n'est pas forcément évident.

    Merci d'avance et bonne journée !!

  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, voir avec Fusion de fichiers Excel XLS (2) et adapter si besoin à ton contexte.
    Il y a une version plus "rustique" ici : Fusion de fichiers Excel

  3. #3
    Candidat au Club
    Homme Profil pro
    Assistant commercial
    Inscrit en
    Mars 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Assistant commercial
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mars 2018
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Merci beaucoup pour ta réponse, mais je ne comprends pas vraiment ce que je dois faire.
    C'est une macro ? Je suis désolé ce n'est pas très clair pour moi.

  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,

    Nom Dossier Fusion sera le dossier de sauvegarde, créé automatiquement, de la fusion et se trouvera au même niveau que l'appli.
    Nom Fichier Fusion sera le nom donné à ce fichier de fusion.

    1. Cliquer Liste fichiers pour sélectionner le dossier racine avec recherche récursive cochée ( recherche dans le dossier racine et tous les sous dossiers s'y trouvant )
      Le dossier racine étant celui contenant l'ensemble des sous dossiers à traiter
      La colonne B se remplit
    2. Nb Lignes / Entête à remplir : si rien mettre 0
    3. Cocher Entête si Nb Lignes / Entête > 0
    4. Nom Feuille à Fusionner à remplir
    5. Sélectionner par un x dans la colonne A les fichiers à traiter, sinon message d'erreur explicite quand on lance la Fusion.
    6. Cliquer sur Fusion Fichiers

    Si la Feuille à Fusionner n'existe pas dans le fichier sélectionné, cette sélection est invalidée et le contenu de la cellule correspondante dans la colonne A est effacé ( le x disparait ).
    Si la Feuille à Fusionner dans le fichier sélectionné est vide de contenu, cette sélection est invalidée et la cellule correspondante de la colonne A est marquée par un "o".

    Si "Vider Dossier avant Fusion" n'est pas cochée et que l'on désire y conserver les fichiers précédemment générés on devra cocher "Doublons Fichiers Fusion"
    Ce qui se traduira par des fichiers sauvés sous "Nom Fichier Fusion.xls" "Nom Fichier Fusion(001).xls" "Nom Fichier Fusion(002).xls" etc.

    Il ne te reste plus qu'a expérimenter.
    Images attachées Images attachées   

  5. #5
    Candidat au Club
    Homme Profil pro
    Assistant commercial
    Inscrit en
    Mars 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Assistant commercial
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mars 2018
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Salut,

    Merci beaucoup pour toutes ces précisions, je ne risque pas de me perdre !
    Je teste tout ça la semaine prochaine au boulot et je donnerai des nouvelles de comment ça a fonctionné.

    Merci encore

  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
    Re, une autre version ici qu'il te faudra adapter à ton contexte.

Discussions similaires

  1. Réponses: 1
    Dernier message: 10/06/2009, 11h01
  2. Réponses: 2
    Dernier message: 26/01/2007, 14h58
  3. Réponses: 8
    Dernier message: 22/08/2006, 12h51
  4. [C#] creer un dataset a partir de plusieurs fichiers XML
    Par ager1912 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 16/05/2006, 18h17
  5. Réponses: 4
    Dernier message: 19/03/2006, 15h20

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