Dir

cs_Liro Messages postés 159 Date d'inscription jeudi 7 septembre 2006 Statut Membre Dernière intervention 30 septembre 2011 - 27 juil. 2008 à 11:44
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 - 27 juil. 2008 à 15:46
Bonjour,

Je souhaiterai depuis un fichier excel lancer une macro qui parcour un dossier et tous ses sous-dossiers afin d'y trouver des fichiers excel.
Voici un exemple d'arborescence.
A
    A1
    A2
B
    B1
    B2
    B3
etc.

Même si A1 contient un dossier je ne veux pas continuer mon opération dans ce dossier

Une fois ces fichiers trouvés je voudrais y lire la valeur de 3 cellules (C3, D13 et D15).
En d'autres mots je voudrais lire la valeur de 3 cellules pour tous les fichiers excel ce trouvant dans A, B etc et A1, A2, B1, B2, B3 etc.

A partir de l'aide VBA et de quelques recherches sur internet j'ai pu réussir le faire pour les dossier A, B etc.
Comment l'adapter pour le faire dans leur sous dossiers?
Merci

Voici mon code:

[code]
   sOwnFile = ActiveWorkbook.Name
    iCnt = 0
    r = 2
   
    If Right(sPath, 1) <> "" Then sPath = sPath & ""
    If (GetAttr(sPath) And vbDirectory) <> vbDirectory Then Exit Function
   
    ' get first file in directory
    sFile = Dir(sPath & "*.xls", vbDirectory)
    Do Until Len(sFile) = 0
        ' If Len(sFile) > 4 Then
            ' If Right(sFile, 4) = ".xls" And ((GetAttr(Path & curr) And vbDirectory) <> vbDirectory) Then
            If ((GetAttr(sPath & sFile) And vbDirectory) <> vbDirectory) Then
                ' it is a Excel file...
                If sFile <> sOwnFile Then
                Workbooks.Open Filename:=sPath & sFile, UpdateLinks:=0
                Workbooks(sOwnFile).Worksheets(1).Cells(r, 1).Value = sFile
                Workbooks(sOwnFile).Worksheets(1).Cells(r, 4).Value = Workbooks(sFile).Sheets("Prices").Range("C3").Value
                Workbooks(sOwnFile).ActiveSheet.Cells(r, 5).Value = Workbooks(sFile).Sheets("Prices").Range("D13").Value
                Workbooks(sOwnFile).ActiveSheet.Cells(r, 6).Value = Workbooks(sFile).Sheets("Prices").Range("D15").Value
                Application.DisplayAlerts = False
                Workbooks(sFile).Close
                Application.DisplayAlerts = True
                   
                    iCnt = iCnt + 1
                    r = r + 1
                End If
            End If
            ' End If
        ' End If
       
        ' read next file in directory
        sFile = Dir()
    Loop
[code/]

3 réponses

us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
27 juil. 2008 à 14:40
Bonjour,

=

Perso, je décomposerai ton problème en éléments élémentaires séparés, comme suit :

1/ Appel à une fonction pour demander le répertoire à triater
2/ Recherche de tous les fichiers en extension ".XLS"

3/ Ouverture de chaque fichier par une boucle
3a/ Extraction des cellules et enregistrement dans le classeur initial
3b/ Fermeture fichier et bouclage (au point 3)

=

Pour 1/
regarde le snippets : http://www.codyx.org/snippet_boite-dialogue-pour-choisir-repertoire_512.aspx (code VBA)

Pour 2/
regarde le snippets : http://www.codyx.org/snippet_lister-tous-fichiers-repertoire_198.aspx (code de PCPT)

Pour 3/
et ben... ton code apparement est juste...

Amicalement,
Us.
0
cs_Liro Messages postés 159 Date d'inscription jeudi 7 septembre 2006 Statut Membre Dernière intervention 30 septembre 2011
27 juil. 2008 à 15:17
Merci Us.

Pour le point 1 le lien vers le dossier est indiqué dans une cellule donc pas besoin de ce snippet.

Pour le point 2, c'est ça sauf que je voudrais me limiter à tousles sous dossier à partir du dossier principal (et pas les sous dossiers des sous dossiers) or ce snippet liste tous les fichiers de tous les sous dossiers.
Comment faire?

Merci d'avance
0
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
27 juil. 2008 à 15:46
Pour simplement un seule niveau de recherche... j'ai vu aussi un Snippet faisant cela... Je te laisse le retrouver. Utilise directement la rubrique "Fichier"...

Amicalement,
Us.
0
Rejoignez-nous