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 :

Correction boucle Do While Loop pour consolider plusieurs fichiers excel dans un fichier du même répertoire [XL-2016]


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Femme Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Juin 2021
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel

    Informations forums :
    Inscription : Juin 2021
    Messages : 2
    Points : 4
    Points
    4
    Par défaut Correction boucle Do While Loop pour consolider plusieurs fichiers excel dans un fichier du même répertoire
    Bonjour à tous,


    Je suis nouvelle sur le forum et novice en VBA...ça fait beaucoup , alors d'avance 1000 excuses pour les énormités que vous allez voir.

    Objectif : dans un dossier, j'ai plusieurs fichiers excel nommés de la même façon (rootWbName = Reception_*.xlsm), seule la date change. Je cherche à ouvrir ces fichiers les uns après les autres, mettre en forme et copier les valeurs de l'onglet 1 pour les coller dans l'onglet 1 d'un fichier de synthèse (targetWb = Synthese_*.xlsx).

    Problématique : Le premier passage dans la boucle fonctionne, en revanche je n'arrive pas à accéder au second fichier rootWbName. Il me faudrait une correction si possible.

    Code : Ci-dessous le code que j'ai réussi à produire en fouillant sur le net. Il se trouve dans le module d'un autre fichier excel.
    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
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
     
    Sub MacroReception()
     
    '****************************************************************************************************************************************************************************
    ' Macro créée par  le 03/03/21
    ' Permet de mettre à jour les fichiers qui se trouvent dans le même répertoire que la présente macro
    ' Insert la date fichier en colonne P
    ' Supprime les données non essentielles de l'onglet FLUX TOTAL
    ' Agrège les données de chaque classeur quotidien dans un classeur de synthèse qui se trouve dans le même répertoire
    '****************************************************************************************************************************************************************************
     
    '*********************************************************************
    ' Etape 1 : Déclaration des variables
    '*********************************************************************
    Dim targetWb As Workbook 'déclare la variable targetWb (Classeur Cible = Synthse_*.xlsx)
    Dim targetWs As Worksheet 'déclare la variable targetWs actif (Onglet Cible=Feuil1)
    Dim rootPath As String 'déclare la variable rootPath (Chemin d'Accès aux classeurs quotidiens et au classeur de synthèse)
    Dim rootWbName As String 'déclare la variable rootWbName (nom des fichiers sources = Reception_*.xlsm)
    Dim rootWb As Workbook 'déclare la variable rootWb (Classeur Source = classeur quotidien)
    Dim rootWs As Worksheet 'déclare la variable rootWs (onglet source = FLUX TOTAL)
     
    Dim targetFile As String 'déclare la variable targetFile (Fichier Cible=classeur de synthèse)
    Dim NomFichier, SplitNomFichier, DateFichier, DateFormatee, fichieDeplace, FichierOriginal As String
    Dim i As Integer, DerniereLigne As Integer
     
    '*********************************************************************
    ' Etape 2 : Définir le chemin, les fichiers et onglets
    '*********************************************************************
    rootPath = "P:\Mes documents\06-Qlik_BI\02-Reception\RECEPTION 2021\" 'définit le chemin d'accès rootPath
    rootWbName = Dir(rootPath & "\Reception_*.xlsm") 'indique le répertoire et le type de fichiers à rechercher : Reception_* du dossier ayant rootPath comme chemin d'accès (extension à adapter !)
    targetFile = Dir(rootPath & "\Synthese_*.xlsx") 'définit le classeur destination targetFile
     
     
    Set targetWb = Application.Workbooks.Open(rootPath & targetFile) 'définit le classeur ouvert targetWb (en l'ouvrant)
    Set targetWs = targetWb.Sheets("synthese")  'définit l'onglet actif targetWs
     
     
    '*********************************************************************
    ' Etape 3 : Parcourir tous les fichiers du dossier courant "Reception"
    '*********************************************************************
    'Application.ScreenUpdating = False 'Désactiver le rafraîchissement de l'écran avant la macro
    Do While rootWbName <> "" ' on boucle pour chercher tous les fichiers rootWbName
     'Do While Len(rootWbName) > 0
     
            ' Afficher le nom du fichier en cours d'execution
            'MsgBox ActiveWorkbook.Name
     
            '**********************************************************
            ' Etape 4 : ouvrir/activer le classeur source quotiden
            '**********************************************************
            Workbooks.Open (rootPath & rootWbName)
            Set rootWb = ActiveWorkbook
            Set rootWs = rootWb.Sheets("FLUX TOTAL")
     
            '**********************************************************
            ' Etape 5 : Mise en forme du classeur quotidien
            '**********************************************************
            'copier/coller les valeurs de l'onglet
            Cells.Select
            Selection.Copy
            Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
     
            ' supprimer la 1ere ligne
            Rows("1:1").Select
            Selection.Delete Shift:=xlUp
     
            ' boucle pour supprimmer les lignes vides
            lastRow = Range("A" & Rows.Count).End(xlUp).Row
            For i = lastRow To 1 Step -1
                If Worksheets("FLUX TOTAL").Cells(i, 1).Value = "" Then
                Worksheets("FLUX TOTAL").Rows(i).Delete
                End If
            Next i
     
            'Nommer la colonne P "date"
            Range("P1").Value = "Date"
     
            ' Recupérer la date qui se trouve dans le nom du fichier et la placer en P2
            NomFichier = ActiveWorkbook.Name
            SplitNomFichier = Split(NomFichier, "_")(1)
            DateFichier = Left(SplitNomFichier, 10)
            'DateFormatee = Replace(DateFichier, ".", "/")
            [P2] = DateFichier
            Selection.NumberFormat = "dd/mm/yy;@"
     
            ' Coller la date sur chaque ligne du tableau
            Range("P2").Select
            Selection.Copy
            Range(Selection, Selection.End(xlDown)).Select
            ActiveSheet.Paste
     
            'Supprimer le contenu de la colonne Q
            Columns("Q:Q").Select
            Selection.ClearContents
     
            'Selectionner la plage de données hors en-tête et copier
            Range("A1").Select
            lastCol = ActiveSheet.Range("a1").End(xlToRight).Column
            lastRow = ActiveSheet.Cells(ActiveSheet.Rows.Count, lastCol).End(xlUp).Row
            ActiveSheet.Range("a2", ActiveSheet.Cells(lastRow, lastCol)).Copy
     
            '*********************************************************************
            ' Etape 6 : Consolider dans le fichier de synthèse
            '*********************************************************************
            With targetWs
                Windows(targetFile).Activate
                Workbooks(targetFile).Activate
                Set targetWb = ActiveWorkbook 'définit le classeur de synthèse cible targetWb comme actif
     
                'Sélection de la cellule vide au bas d’une colonne de données contiguës
                ActiveSheet.Range("a1").End(xlDown).Offset(1, 0).Select
     
                'Copier la plage de données
                Debug.Print ActiveWorkbook.Name
                Debug.Print ActiveSheet.Name
                ActiveSheet.Paste
     
                'Désactiver les messages d'alerte à la fermeture
                Application.DisplayAlerts = False
            End With
     
            'Ferme le classeur quotidien ouvert en enregistrant les changements
            rootWb.Close SaveChanges:=False
     
        rootWbName = Dir()   'classeur quotidien suivant du dossier ayant rootPath comme chemin d'accès
     
    Loop 'boucle
     
    'Ferme le classeur de synthèse ouvert en enregistrant les changements
    targetWb.Close SaveChanges:=True
    'Application.ScreenUpdating = True
     
     
    MsgBox "La macro a fini de bosser"
     
     
    End Sub
    J'ai tester la boucle et de cette manière, cela fonctionne
    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
     
    Sub TestBoucleFichiers()
        Dim chemin As String, Fichier As String
     
        'Définit le répertoire contenant les fichiers
        chemin = "P:\Mes documents\06-Qlik_BI\02-Reception\RECEPTION 2021\"
     
        'Boucle sur tous les fichiers xls du répertoire.
        Fichier = Dir(chemin & "Reception_*.xlsm")
        'Utilisez la syntaxe suivante pour boucler sur tous les types de fichiers :
        'Fichier = Dir(Chemin & "*.*")
     
        Do While Fichier <> ""
            'écrit le résultat dans la fenêtre d'exécution (Ctrl+G).
            ' Debug.Print chemin & Fichier
            MsgBox Fichier
            Fichier = Dir()
        Loop
    End Sub
    Donc je suppose que c'est en passant des fichiers sources à la synthèse que mon code ne va pas. Mais où???
    Si quelqu'un a un peu de temps je l'en remercie.

  2. #2
    Membre confirmé Avatar de Nicolas MENDEZ
    Homme Profil pro
    Consultant - Formateur - Datanaute & Power BI addict
    Inscrit en
    Mai 2021
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant - Formateur - Datanaute & Power BI addict

    Informations forums :
    Inscription : Mai 2021
    Messages : 273
    Points : 558
    Points
    558
    Par défaut
    Hello,

    J'ai une option sans code... C'est Power Query qui est capable d'empiler tous les fichiers contenus dans un même dossier.

    Nom : Animation.gif
Affichages : 378
Taille : 178,2 Ko
    Enjoy !

    May the Power BI be with you !

    ---------------------------------------------
    Rejoignez le groupe dédié à la Microsoft Power Platform pour échanger autour de Power BI, Power Apps, Power Automate et Power Virtual Agents Acces ICI

  3. #3
    Membre confirmé
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mars 2021
    Messages
    334
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2021
    Messages : 334
    Points : 602
    Points
    602
    Par défaut
    Merci Power BI de nous simplifier autant la vie

  4. #4
    Candidat au Club
    Femme Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Juin 2021
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel

    Informations forums :
    Inscription : Juin 2021
    Messages : 2
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par Nicolas MENDEZ Voir le message
    Hello,

    J'ai une option sans code... C'est Power Query qui est capable d'empiler tous les fichiers contenus dans un même dossier.

    Nom : Animation.gif
Affichages : 378
Taille : 178,2 Ko
    Merci beaucoup. J'ai fait ça ce matin en un rien de temps!!!

  5. #5
    Membre confirmé Avatar de Nicolas MENDEZ
    Homme Profil pro
    Consultant - Formateur - Datanaute & Power BI addict
    Inscrit en
    Mai 2021
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant - Formateur - Datanaute & Power BI addict

    Informations forums :
    Inscription : Mai 2021
    Messages : 273
    Points : 558
    Points
    558
    Par défaut
    Cool !

    L'essayer c'est l'adopter....
    Enjoy !

    May the Power BI be with you !

    ---------------------------------------------
    Rejoignez le groupe dédié à la Microsoft Power Platform pour échanger autour de Power BI, Power Apps, Power Automate et Power Virtual Agents Acces ICI

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 07/02/2011, 17h34
  2. [Débutant] Boucle avec fopen pour ouvrir plusieurs fichiers
    Par black cat747 dans le forum MATLAB
    Réponses: 7
    Dernier message: 08/12/2010, 15h55
  3. [Débutant] Boucle pour renommer plusieurs fichiers aux noms DIFFERENTS
    Par Bulle_ dans le forum MATLAB
    Réponses: 2
    Dernier message: 27/03/2010, 20h04
  4. Réponses: 1
    Dernier message: 04/02/2010, 20h41
  5. Réponses: 13
    Dernier message: 20/03/2006, 16h26

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