Exploration sous dossier

Bonjour,

J'utilise une macro avec une boucle pour récupérer des données dans des fichiers Excel, à partir d'un chemin d'accès défini. Je souhaiterai étendre la macro aux sous dossiers de ce chemin d'accès afin d'analyser l'ensemble des fichiers Excel, mais je ne sais pas comment l'intégrer dans la boucle.

Merci d'avance pour votre aide !

Bonne journée,

7test.xlsm (15.85 Ko)

bonjour,

une proposition à adapter,

Sub aargh()
    Dim fs As Object, wsh As Object

    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    Application.EnableEvents = False
    Set fs = CreateObject("scripting.filesystemobject")
    Set wsh = ActiveSheet
    chemin = wsh.Range("B1") & "\"
    i = 5
    traiterepertoire wsh, fs, chemin, i
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
    Application.EnableEvents = True
End Sub

Sub traiterepertoire(wsh_result As Object, fs As Object, chemin, ByRef i)
    Set rep = fs.getfolder(chemin)
    For Each Fichier In rep.Files
        If Fichier Like "*.xls*" Then ' fichier excel
            Set wkb_source = Workbooks.Open(Fichier)
            wsh_result.Cells(i, 1) = ActiveWorkbook.Name
            wsh_result.Cells(i, 2) = wkb_source.Sheets("feuil1").[K4]
            wsh_result.Cells(i, 3) = wkb_source.Sheets("feuil2").[K5]
            wsh_result.Cells(i, 4) = wkb_source.Sheets("feuil3").[D38]
            i = i + 1
            wkb_source.Close
        End If
    Next
    For Each sousrep In rep.subFolders
        traiterepertoire wsh_result, fs, sousrep, i
    Next
End Sub

Bonjour h2so4,

Merci pour ton retour.

J'ai cependant un message d'erreur lorsqu'il va dans le 1er sous dossier (en rouge le chemin du fichier) :

image

Si je vais dans débogage, j'ai ce point là qui est mis en avant :

image

Le fichier indiqué introuvable dans le message d'erreur est bien traité (je récupère les données qui sont dedans). Néanmoins la macro ne semble pas parcourir l'ensemble des sous-dossiers (je peux avoir des dossiers dans des dossiers, et je dois descendre à la dernière racine pour tout analyser).

J'espère que je suis clair dans mes explications.

Merci d'avance pour l'aide

Anthony

bonjour,

comme la macro proposée fonctionne telle quelle chez moi, soit tu l'as mal copiée/adaptée (ce que me laisse penser l'instruction fichier=dir(chemin & "*.xls") que je trouve dans ta copie d'écran), soit il y a une particularité dans ton fichier excel ou sur ton PC qui empêche la macro de fonctionner.

Pour essayer de trouver une piste, puis-je voir ton classeur qui contient la macro ?

Pardon, j'ai oublié de le joindre. Le voici :

8test.xlsm (20.06 Ko)

re-bonjour,

Cette macro s'exécute parfaitement chez moi. Une piste supplémentaire à examiner est le nom du fichier que la macro essaie d'ouvrir. Peux-tu reproduire l'erreur sur un répertoire de test avec des fichiers de tests ?

l'instruction Dir que tu as ajoutée est inutile mais n'empêche pas la macro de fonctionner.

Bonjour,

Il semblerait que ça ne fonctionne pas sur un répertoire réseau. En revanche, si je copie le répertoire sur mon PC (dans le disque C:) là la macro arrive à fonctionner...

Autre question/remarque : le msgbox apparaît à la fin de chaque sous dossier traiter. Comment l'intégrer de façon à ce qu'il apparaisse seulement quand l'ensemble des sous dossier à été traité ?

Merci d'avance pour l'aide !

bonjour,

Il semblerait que ça ne fonctionne pas sur un répertoire réseau

Cela devrait fonctionner aussi. Si ton chemin en B1, contient bien le séparateur final, essaie en modifiant cette instruction, (mais je doute que ce soit ça)

chemin = wsh.Range("B1") & "\"

en

chemin = wsh.Range("B1")

Autre question/remarque

Mets le MsgBox en fin de ta procédure test et non en fin de procédure traiterepertoire (raison pour laquelle tu as le message pour chaque répertoire)

Merci pour ton retour, le MsgBox fonctionne parfaitement !

Pour le problème de réseau, je crois avoir identifié le problème : Excel n'aime pas le format des crochets (l'adresse réseau est du type J:\ [A.B.C] drive partagé\etc).

Si jamais il y a une technique je suis preneur, mais sinon ça me dépanne déjà beaucoup ! Merci pour l'aide.

Bonne journée,

Rechercher des sujets similaires à "exploration dossier"