Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Parcours de dossiers en VBA

mentos64

XLDnaute Nouveau
Bonjour,
Je voulais savoir s'il était possible en VBA de parcourir un dossier contenant plusieurs sous dossiers contenant chacun aucune ou plusieurs feuille EXCEL.

Merci d'avance
 

mentos64

XLDnaute Nouveau
Re : Parcours de dossiers en VBA

Bonjour à tous,
J'ai réalisé une macro qui plante afin de parcourir plusieurs répertoires et sous-répertoires ainsi que les classeurs puis feuilles excel.
Comme je n'ai absolument pas les compétences à ce niveau là, pourrait-on me dire svp comment résoudre ce pb sur lequel je suis depuis 2 semaines...
Merci

Voici ma macro :
Option Explicit
Sub Parcours_Plusieurs_Dossiers()

Dim Fichier As String
'Dim Chemin As String
Dim nom_rep As String
Dim nom_ssrep As String

Dim Classeur1 As Workbook
Dim Classeur2 As Workbook

Set Classeur1 = Workbooks("leaks index.xls")

Dim Feuille As Worksheet
Dim F1 As Worksheet

Set F1 = Classeur1.Worksheets("all_type")

Dim lig As Integer
Dim col As Integer
Dim colonneDesign As Integer
Dim ligneDesign As Integer
Dim lig1 As Integer
Dim ln1 As Integer
Dim i As Integer

ln1 = 1


nom_rep = "U:\PersonalData\PM\Méthode leak index\calcul_compare+_Nederland"
If Right(nom_rep, 1) <> "\" Then nom_rep = nom_rep & "\"
nom_ssrep = Dir(nom_rep, vbDirectory)

encor:
If nom_ssrep <> "" Then

Fichier = Dir(nom_ssrep & "*.xls")

Do While Fichier <> ""

Set Classeur2 = Workbooks.Open(nom_ssrep & Fichier)

For Each Feuille In Classeur2.Worksheets

colonneDesign = 0
ligneDesign = 0

Feuille.Activate

'détection de la colonne contenant les intitulés des systèmes
For lig = 1 To 10
For col = 1 To 10

If TypeName(Feuille.Cells(lig, col).Value) = "String" Then

If InStr(Feuille.Cells(lig, col).Value, "Designation") <> 0 Then
colonneDesign = col
ligneDesign = lig + 2
End If

End If

Next col
Next lig

' si on se trouve dans une feuille sur laquelle la comparaison va se faire
If colonneDesign <> 0 And ligneDesign <> 0 Then

'détection des systèmes manquant dans leaks index

For i = ligneDesign To 200

For lig1 = 7 To 185

If Feuille.Cells(i, colonneDesign).Value = F1.Cells(lig1, 2).Value Then
Exit For
End If

If lig1 = 185 Then
F1.Cells(ln1, 6).Value = Feuille.Cells(i, colonneDesign).Value
ln1 = ln1 + 1
End If

Next lig1

Next i

End If

Next Feuille

Classeur2.Close True
Set Classeur2 = Nothing
Fichier = Dir

Loop

nom_ssrep = Dir(nom_rep, vbDirectory)

GoTo encor

End If

End Sub
 

mentos64

XLDnaute Nouveau
Re : Parcours de dossiers en VBA

Bonjour Pierrot93,

Merci une fois de plus pour ton aide.
En fait dès que je mets

encor :
.
.
.

GoTo encor


ça plante... mais si je les mets en commentaires alors rien ne se passe...

c'est vraiment au delà de mes compétences...je manque trop de pratique VB...

Merci
 

Pierrot93

XLDnaute Barbatruc
Re : Parcours de dossiers en VBA

Bonjour Mentos

que veux tu faire avec ton "goto encor", a priori il n'est pas conditionné, donc tu risque de boucler indefiniment.

bonne journée
@+
 

mentos64

XLDnaute Nouveau
Re : Parcours de dossiers en VBA

Je voulais que cette boucle soit parcourue tant qu'il y avait des sous-répertoires jusqu'à atteindre les classeurs excel où je fais ma comparaison de colonnes pr chaque feuille excel.
Y aurait-il une autre solution plus rigoureuse que celle-ci ?
J'ai vu que je pouvais utiliser Application.FileSearch mais cela ne concerne que les fichiers et non les répertoires....je suis désespérée de ne pas réussir à parcourir les sous-répertoires d'un répertoire...

Merci
 

Pierrot93

XLDnaute Barbatruc
Re : Parcours de dossiers en VBA

Re

regarde la macro ci dessous, te liste les fichiers et sous dossiers d'un dossier, si ca peut t'aider :

Code:
Public Const MonRepertoire = "C:\Documents and Settings\Nom_Utilisateur\Mes documents\"
Sub ListeFichiersRepert()
'activer la reference Microsoft scripting Runtime
Dim fso As Scripting.FileSystemObject
Dim Source As String, f As File, x As Integer
Dim f1 As Folder, f2 As File

Set fso = CreateObject("Scripting.FileSystemObject")
Source = MonRepertoire
x = 1
For Each f In fso.GetFolder(MonRepertoire).Files
    Cells(x, 1).Value = f.Name
    Cells(x, 2).Value = f.Size
    x = x + 1
Next f
For Each f1 In fso.GetFolder(MonRepertoire).SubFolders
    Cells(x, 1).Value = f1.Name
    Cells(x, 2).Value = f1.Size
    x = x + 1
    For Each f2 In f1.Files
        Cells(x - 1, 3).Value = f2.Name
        Cells(x - 1, 4).Value = f2.Size
        x = x + 1
    Next f2
    x = x - 1
Next f1
End Sub

bon courage
@+
 

Discussions similaires

Réponses
11
Affichages
327
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…