[résolu] Corriger ma macro de listage de sous-dossiers

Prisme

XLDnaute Nouveau
Bonjour,

J'utilise Excel 2013 sur Windows 8.

Je viens d'écrire une macro dont le but est de lister les fichiers contenus dans un dossier et dans ces sous-dossiers.
Je n'ai pas voulu écrire le nom du dossier en question en dur dans le code. À la place j'ai utilisé la commande
BrowseForFolder
qui demande à l'utilisateur de quel dossier il veut lister le contenu.
Cette partie fonctionne.
Ensuite je liste les fichiers contenus dans le dossier saisi.
Cela fonctionne s'il n'y a pas de sous-dossier.
Mais s'il y a des sous-dossiers alors ma macro ne les voit pas.
Quelqu'un pourrait-il avoir l'obligeance de me dire où je me suis planté ?
Merci,

Voici le texte de ma macro (indentation n'est pas bien reproduite) :

Sub Lister()

Application.ScreenUpdating = False
Dim MonDossier As String, MonFichier As String
Dim objShell As Object, objFichier As Object, objFichierItem As Object
Dim Chemin As String

Set objShell = CreateObject("Shell.Application")
Set objFichier = objShell.BrowseForFolder(&H0&, "Choisir un répertoire", &H1&)

On Error Resume Next
Set objFichierItem = objFichier.Items.Item
MonDossier = objFichierItem.Path
Cells(1, 1) = repertoire

MonFichier = Dir(MonDossier & "\*", vbDirectory)
i = 2
Do While MonDossier <> ""
if GetAttr(MonDossier & "\" & MonDossier) = vbDirectory Then
Cells(i, 1) = MonDossier
i = i + 1
End If
MonDossier = Dir()
Loop
End Sub
 
Dernière édition:

herve62

XLDnaute Barbatruc
Supporter XLD
Re : Corriger ma macro de listage de sous-dossiers

Bonjour , Bienvenue dans notre "cercle"
1er conseil : fouiner un peu avant de poster donc regarde cela
HTML:
http://www.excel-downloads.com/forum/126930-vba-liste-dossiers-et-sous-dossiers-dun-dosssier.html
je pense qu'en adaptant ça devrait le faire
 

Staple1600

XLDnaute Barbatruc
Re : Corriger ma macro de listage de sous-dossiers

Bonsoir à tous

Je plussoie au conseil d'hervé62

Néanmoins je propose ce one-liner rendu possible par les petits plus qu'offre les OS récents ;)
Code:
Sub ListeFichiers()
Dim Ret
Ret = Shell("powershell.exe get-childitem C:\temp -recurse | select-object DirectoryName,Name | where { $_.DirectoryName -ne $NULL } | Export-CSV C:\temp\ListFichiers.csv", vbHide)
End Sub

Ensuite on peaufinera avec un petit Données/Convertir pour mettre en forme.

NB: Je vous conseille de découvrir la puissance qu'offre l'utilisation de Powershell.
 

gilbert_RGI

XLDnaute Barbatruc
Re : Corriger ma macro de listage de sous-dossiers

la sécurité des macro est comment ?

normalement tu devrais obtenir un truc de ce genre

resultat.jpg
 

Pièces jointes

  • resultat.jpg
    resultat.jpg
    82.3 KB · Affichages: 38
  • resultat.jpg
    resultat.jpg
    82.3 KB · Affichages: 35
Dernière édition:

Roland_M

XLDnaute Barbatruc
Re : Corriger ma macro de listage de sous-dossiers

bonjour,

pour les sous dossiers des sous dossiers il faut utiliser la méthode récursive !

voir cet exemple simple !
plus un autre avec fichiers
puis un autre avec arborescence plus complet ! (le menu est dans l'onglet "compléments")
 

Pièces jointes

  • ListRepFichArborescence2.xlsm
    78.3 KB · Affichages: 30
  • ListRepFich.xlsm
    41.3 KB · Affichages: 17
  • ListRepSousRep.xls
    38 KB · Affichages: 21
  • ListRepFich.xlsm
    41.3 KB · Affichages: 19
  • ListRepFich.xlsm
    41.3 KB · Affichages: 21
Dernière édition:

Prisme

XLDnaute Nouveau
Re : Corriger ma macro de listage de sous-dossiers

OK, merci beaucoup à vous tous,

J'ai recopié les trois fichiers ainsi que les urls.

Je dois faire d'autres choses maintenant et, de plus, j'ai la tête comme une pastèque, moins le jus.

Je lirai vos fichiers et vos liens cette semaine.
Ca ma l'air dur mais très intéressant. On a rien sans rien.

Bonne semaine à vous tous.

Si j'ai d'autres questions j'ouvrirai un autre fil, je clos celui-ci.
 

Staple1600

XLDnaute Barbatruc
Re : Corriger ma macro de listage de sous-dossiers

Bonsoir à tous

Petite rectification ;)
Ma Macro de Staple ne fait rien.
Prisme
Ma macro fait ce qu'elle doit faire (je le sais, j'ai testé avant de la poster... ;):rolleyes:)
En l’occurrence, lister tous les fichiers du répertoire C:\temp (dossier qui existe sur mon PC)
Donc il fallait adapter le chemin du dossier sur ton PC en modifiant la macro en conséquence

Pour prouver que ma macro fonctionne très bien, voici la version paramétrée (plus simple d'usage normalement)
(Voir les commentaires en vert dans les code)
VB:
Sub ListerContenuDossierVersCSV()
'version macro avec paramètres
'1) on indique le chemin du dossier à lister
'2) on indique le nom du fichier de sorti
'Exemple ci-dessous : lister tous les fichiers du répertoire C:\temp et de ses sous-répertoires
'dans un fichier nommé listeALL.csv
ListeFichiers "c:\temp", "listeALL.csv"
End Sub
VB:
Private Sub ListeFichiers(sRep$, ListeFic$)
Dim Ret
Ret = Shell("powershell.exe Write-Host (get-childitem " & sRep & " -recurse | select-object DirectoryName,Name | where { $_.DirectoryName -ne $NULL } | Export-CSV " & sRep & "\" & ListeFic & ")", vbHide)
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 244
Messages
2 086 554
Membres
103 246
dernier inscrit
blablasss