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 :

Excel VBA -- Ouvrir plusieurs dossiers dans des répertoires différents - Boucles


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 21
    Par défaut Excel VBA -- Ouvrir plusieurs dossiers dans des répertoires différents - Boucles
    Bonjour à tous,

    Tout d'abord merci pour votre présence et votre aide. Je bloque depuis plusieurs jours sur un code VBA qui pourrait me faire gagner un temps vraiment appréciable et fiabiliser la consolidation de mes données.

    Je m'explique:

    Je suis en charge de compiler dans un tableau de suivi plusieurs informations contenues dans des fichiers Excel possédant tous la même trame.

    Je souhaiterai pouvoir Ouvrir, copier les informations souhaitées et Fermer chaque fichier Excel.

    Mon tableau de suivi est à la racine: D:\RECENSEMENT_ECOLE\TABLEAU_SUIVI_EFFECTIF et ensuite je voudrais créer une boucle qui ouvre tous les dossiers présents dans ce répertoire et viennent ouvrir tous les fichiers Excel dont le nom commence par RECENSEMENT_CLASSE_CPxx

    La boucle ferait ainsi cette routine:
    D:\RECENSEMENT_ECOLE\TABLEAU_SUIVI_EFFECTIF\RECENSEMENT_CLASSE_CPxx
    D:\RECENSEMENT_ECOLE\TABLEAU_SUIVI_EFFECTIF\RECENSEMENT_CLASSE_CE1
    ect...

    J'ai commencé un début de code mais je n'arrive pas à incrémenter les sous dossiers


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub CONSO_CLASSE()
     
    ' Mise à jour
     
    Dim Fichier As String, Chemin As String
    Dim Wb As Workbook
    Chemin1 = ThisWorkbook.Path & "\"    
    MsgBox Chemin1
    Fichier = Dir(Chemin1 & "*.xls")
    Ce bout de code balayera bien tous les fichiers Excel présents dans le Chemin mais je souhaiterai intégrer une sélection sous tous les sous dossiers présents dans le dossier ou est présent le fichier de consolidation.


    Je vous remercie pour votre aide et j'espere avoir été assez clair,

  2. #2
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Bonjour Oulol et bienvenu sur le Forum,

    S'il te plait, utilise les balises [# pour reporter ton code. Il n'en sera que plus lisible.

    Tu devrais trouver une aide efficace sur la FAQ, précieux espace documentaire.

  3. #3
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Dans les sources et la FAQ, il y a de nombreux exemples sur le bouclage des fichiers d'un répertoire.
    Entre autres, cet exemple très simple : https://excel.developpez.com/faq/?pa...BoucleFichiers

  4. #4
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    C'est bien ce que j'ai écrit, non?

  5. #5
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Bonjour le fil, bonjour le forum

    Peut-être comme ça :

    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
    Sub Macro1()
    Dim CD As Workbook 'déclare la variable CD (Classeur Destination)
    Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
    Dim DD As String 'déclare la variable DD (Dossier de Départ)
    Dim EF As Object 'déclare la variable EF (Explorateur de Fichiers)
    Dim DS As Object 'déclare la variable DS (Dossier Source)
    Dim SD As Object 'déclare la variable SD (Sous-Dossiers)
    Dim D As Object 'déclare la variable D (Dossier)
    Dim CA As String 'déclare la variable CA (Chemin d'Accès)
    Dim F As String 'déclare la variable F (Fichier)
    Dim CS As Workbook 'déclare la variable CS (Classeur Source)
    Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
    Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)
     
    Set CD = ThisWorkbook 'définit le classeur source CS
    Set OS = CD.Worksheets(1) 'définit l'onglet source OS (à adapter à ton cas)
    DD = ThisWorkbook.Path 'définit le dossier de départ DD
    Set EF = CreateObject("Scripting.FileSystemObject") 'définit l'explorateur de fichiers EF
    Set DS = EF.GetFolder(DD) 'définit le dossier de départ
    Set SD = DS.Subfolders 'définit l'ensemble des sous dossiers SD du dossier de départ DD
    For Each D In SD 'boucle sur tous les dossiers D de SD
        CA = D.Name & "\" 'définit le chemin d'accès CA
        F = Dir(CA & "*.xls") 'définit le premier fichier avec l'extension xls ayant CA comme chemin d'accès
        Do While F <> "" 'boucle tant qu'il existe des fichiers
            Set CS = Workbooks.Open(CA & F) 'définit le classeur source CS en l'ouvrant
            Set OS = CS.Worksheets(1) 'définit l'onglet source OS (à adapter à ton cas)
            Set DEST = OD.Cells(Application.Rows.Count, "A").End(xlUp).Offset(1, 0) 'définit la cellule de destination DEST (première cellule vide de la colonne A de l'onglet OD) à adapter à ton cas
            OS.Range("A1").CurrentRegion.Copy DEST 'copy le tableau à partir de A1 et le colle dans DEST (à adapter à ton cas)
            CS.Close False 'ferme le classeur source CS sans enregistrer
            F = Dir 'définit le prochain fichier avec l'extension xls ayant CA comme chemin d'accès
        Loop 'boucle
    Next D 'prochain dossier de la boucle
    End Sub

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 21
    Par défaut
    Merci MarcelG,

    Tout d'abord, Excuse moi de ne pas avoir intégré les balises, je m'en souviendrai la prochaine fois, c'est noté :-)

    J'ai bien lu la FAQ mais j'ai trouvé comment faire des boucles sur plusieurs fichiers au sein d'un même dossier, mais j'aimerais essayer de boucler également sur plusieurs sous dossiers dont chacun contiennent des fichiers Excel avec une même mise en forme et le fichier de consolidation se trouve à la racine.

    Exemple:

    Mon fichier de consolidation se trouve dans le dossier: D:\RECENSEMENT_ECOLE\ et j'ai créé un sous dossier pour chaque classe de l'établissement.
    Chaque sous dossier contient des informations sur chacune des classes.

    D:\RECENSEMENT_ECOLE\TABLEAU_SUIVI_EFFECTIF\RECENSEMENT_CLASSE_CPxx
    D:\RECENSEMENT_ECOLE\TABLEAU_SUIVI_EFFECTIF\RECENSEMENT_CLASSE_CE1
    D:\RECENSEMENT_ECOLE\TABLEAU_SUIVI_EFFECTIF\RECENSEMENT_CLASSE_CE2

    Peut-on prévoir une boucle en gérant l'ouverture de chaque sous dossier.

    En reprenant le code:
    DD = ThisWorkbook.Path 'définit le dossier de départ C'est à dire D:\RECENSEMENT_ECOLE\TABLEAU_SUIVI_EFFECTIF\
    et je souhaiterai intégrer dans la boucle ThisWorkbook.Path + RECENSEMENT_CLASSE_CPxx
    ThisWorkbook.Path + RECENSEMENT_CLASSE_CE1..

    et ainsi balayer tous les sous dossiers de manière automatique. La liste des sous dossiers peuvent évoluer.Vous en remerciant par avance,


    Merci encore pour votre aide,

  7. #7
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Salut,

    Dans la FAQ, est indiquée une procédure qui liste les fichiers des répertoires et des sous-répertoires.
    Plutôt qu'une liste, tu peux donc ouvrir les fichiers en question.

    Nota.
    Je sais que ce processus est concevable. Au demeurant, je ne travaille jamais sur des fichiers fermés sans les ouvrir .

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 21
    Par défaut
    Super merci pour ce code très utile. Je viens de le tester super :-)

    Je suis un peu novice en VBA comment pourrais-je uniquement lister les fichiers Excel commençant par ECOLE_ et exclure les autres.
    Merci pour ton aide

  9. #9
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Salut,

    Tu testes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If left(FileItem.Name,6) ="Ecole_"

Discussions similaires

  1. [AC-2007] Ouvrir plusieurs images dans des fenêtres distinctes
    Par al_bert dans le forum VBA Access
    Réponses: 2
    Dernier message: 05/08/2009, 16h28
  2. [VxiR2] Création de plusieurs requêtes dans des rapports différents
    Par bauduin-o dans le forum Webi
    Réponses: 2
    Dernier message: 13/07/2009, 09h27
  3. Scripter IE7 pour ouvrir plusieurs url dans des onglets
    Par Ttienne dans le forum VBScript
    Réponses: 13
    Dernier message: 02/04/2008, 23h34
  4. Réponses: 0
    Dernier message: 02/11/2007, 15h02
  5. Réponses: 2
    Dernier message: 07/07/2007, 14h24

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