Utilisation de BrowseForFolder dans une macro de listage de dos

Fermé
Licorne rose Messages postés 997 Date d'inscription mardi 10 juillet 2007 Statut Membre Dernière intervention 18 janvier 2024 - Modifié par pijaku le 19/05/2015 à 14:35
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 - 20 mai 2015 à 08:02
Bonjour,

Je souhaite réaliser une macro permettant de lister les fichiers contenus dans un dossier. Je ne cherche pas à lister les sous-dossiers. Pour cela je me sers de celle-ci, que j'ai trouvée sur Internet :

Sub Lister()
    repertoire = "C:\Users\MH\Videos\Toto"
 i = 2
 nf = Dir(repertoire & "\*.*")
 Do While nf <> ""
 Cells(i, 1) = nf
 nf = Dir '
 i = i + 1
 Loop
End Sub


Elle fonctionne.

Seulement je ne veux pas que le nom du dossier soit écrit en dur dans le code, je veux qu'il soit saisi par l'utilisateur à l'aide de la commande BrowseForFolder et je me sers de ce bot de code que j'ai trouvé sur Internet

 Application.ScreenUpdating = False
Dim myPath As String, myFile As String

Dim objShell As Object, objFolder As Object, oFolderItem As Object
    Dim Chemin As String
 
    Set objShell = CreateObject("Shell.Application")
    Set objFolder = objShell.BrowseForFolder(&H0&, "Choisir un répertoire", &H1&)
 
    On Error Resume Next
    Set oFolderItem = objFolder.Items.Item
    Chemin = oFolderItem.Path
MsgBox Chemin


Je crée donc la macro :

Sub Lister()

 Application.ScreenUpdating = False
 Dim myPath As String, myFile As String
 Dim objShell As Object, objFolder As Object, oFolderItem As Object
 Dim Chemin As String
 
     Set objShell = CreateObject("Shell.Application")
     Set objFolder = objShell.BrowseForFolder(&H0&, "Choisir un répertoire", &H1&)
 
     On Error Resume Next
     Set oFolderItem = objFolder.Items.Item
     repertoire = oFolderItem.Path

  i = 2      'jusqu'ici c'est bon
  nf = Dir(repertoire & "\*.*") 'ici ça foire car nf est vide
 MsgBox (nf)
  Do While nf <> ""
  Cells(i, 1) = nf
  nf = Dir '
  i = i + 1
  Loop
End Sub


E mettant des MsgBox à différents endroits, je me suis rendu compte que repertoire prenait la bpnne valeur mais que nf était vide dès la première occurrence et que donc le listage ne pouvait fonctionner.

Quelqu'un voit-il ce qui cloche ?

Merci et bon dimanche.


A voir également:

15 réponses

f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 702
17 mai 2015 à 09:38
Bonjour,

rien ne cloche, fichier avec votre code, seule modif, le nom du repertoire en A1: https://www.cjoint.com/c/EErj1PorDt9
0
Licorne rose Messages postés 997 Date d'inscription mardi 10 juillet 2007 Statut Membre Dernière intervention 18 janvier 2024 227
17 mai 2015 à 14:16
Bonjour f894009,

Merci beaucoup de t'être penché sur mon cas.
Effectivement ça marche !!!
Mais je suis perplexe, c'est parce que tu as ajouté la ligne
Cells(1, 1) = repertoire
que ça marche ???
0
Bonjour

je prefere comme ca

Sub ListerRep()
Application.ScreenUpdating = False
Dim objShell As Object, objFolder As Object, oFolderItem As Object
Dim Chemin As String

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

   If Not objFolder Is Nothing Then
         Lister objFolder.Items.Item.Path
      Else
         Exit Sub
   End If
End Sub

Sub Lister(Repertoire)
I = 2
Nf = Dir(Repertoire & "\*.*")
   Do While Nf <> ""
      Cells(I, 1) = Nf
      Nf = Dir
      I = I + 1
   Loop
End Sub


A+
Maurice
0
Licorne rose Messages postés 997 Date d'inscription mardi 10 juillet 2007 Statut Membre Dernière intervention 18 janvier 2024 227
17 mai 2015 à 14:34
Eh bien je dois dire que ça marche, merci beaucoup Maurice.

Une chose me chiffonne : à quoi sert le &H0& ?

Autre chose : que faut-il changer pour que les fichiers des sous-dossiers soient listés aussi (avec l'indication du nom de sous-dossier) ?

C'est peut-être trop demander...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Bonjour
pour faire un cumul peus etre conne ca
Sub Lister(Repertoire)
' I = 2
I = Range("A" & Rows.Count).End(xlUp).Row + 1
Nf = Dir(Repertoire & "\*.*")
   Do While Nf <> ""
      Cells(I, 1) = Nf
      Nf = Dir
      I = I + 1
   Loop
End Sub

A+
Maurice
0
Licorne rose Messages postés 997 Date d'inscription mardi 10 juillet 2007 Statut Membre Dernière intervention 18 janvier 2024 227
17 mai 2015 à 15:08
Bof, là non, ça ne marche pas mais merci beaucoup pour la première macro, je suis content de l'avoir.
0
Licorne rose Messages postés 997 Date d'inscription mardi 10 juillet 2007 Statut Membre Dernière intervention 18 janvier 2024 227
17 mai 2015 à 15:30
Rebonjour f894009 et Maurice,

Vos deux macros marchent bien.
Auriez-vous des idées pour les faire fonctionner avec les sous-dossiers ?
C'est peut-être nettement plus compliqué ?
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 702
17 mai 2015 à 17:38
Re,

Mais je suis perplexe, c'est parce que tu as ajouté la ligne
Non, comme ecrit: rien ne cloche.
Dossiers et sous-dossiers:
https://www.commentcamarche.net/faq/28049-vba-vb6-lire-tous-les-fichiers-repertoires-et-sous-rep
0
Licorne rose Messages postés 997 Date d'inscription mardi 10 juillet 2007 Statut Membre Dernière intervention 18 janvier 2024 227
17 mai 2015 à 18:55
Rebonjour f894009,

J'ai beau essayer, ta (ma) macro marche quand il n'y a pas de sous-dossier mais quand il y en a elle ne marche pas, elle ne voit pas les sous-dossier.

Par ailleurs, j'ai suivi ton lien qui donne sur une belle macro, je l'ai recopiée chez moi mais je n'arrive pas à la lancer. Elle ne comporte qu'une Function, il ne faudrait pas mettre une Sub quelque part ? Tu pourrais me dire où, stp. Excuse-moi, je suis débutant...
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 702
18 mai 2015 à 08:44
Bonjour,

ta (ma) macro marche quand il n'y a pas de sous-dossier
Ah que si (meme si ce n'est pas "ma" macro), avec adaptation a votre contexte:

exemple de listage d'un repertoire et sous repertoire en partant de votre demande de depart, une partie du code de Maurice 17 mai 2015 à 14:25 (pour eviter les erreurs si pas de choix): extensions retenues xls et csv, vous mettrez les votres:

https://www.cjoint.com/c/EEsi6lVW57L

A+
0
Licorne rose Messages postés 997 Date d'inscription mardi 10 juillet 2007 Statut Membre Dernière intervention 18 janvier 2024 227
19 mai 2015 à 09:28
Bonjour F,

(Tu permets que je t'appelle F en abrégé ?)

Effectivement la macro marche mais que veulent dire les 29696 Bi ou 1905 Bi en fin de colonne ?

Et y a-t-il un moyen de modifier la macro pour qu'elle donne les les résultats sur ne même colonne comme ceci :
C:\toto\toto1.docx
C:\toto\toto2.docx
C:\tata\tata1.docx
c:\tata\tata2.docx

...

Merci à toi et bonne semaine.
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 702
19 mai 2015 à 10:03
Bonjour,

Tu permets que je t'appelle F en abrégé ? Oui, un bonjour tout court me va aussi

que veulent dire les 29696 Bi Taille en byte des fichiers

Et y a-t-il un moyen de modifier la macro Bien sur, je vous fait ceci avant midi

A+
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 702
19 mai 2015 à 12:22
Re,

Sub ListerRep()

a la fin a la place de la ligne avec application.transpose

   With Worksheets("feuil2")
.Cells.ClearContents
NBdata = NBdata - 1
For point = 0 To NBdata
.Range("A" & point + 1) = Data(1, point)
Next point
End With
0
Licorne rose Messages postés 997 Date d'inscription mardi 10 juillet 2007 Statut Membre Dernière intervention 18 janvier 2024 227
19 mai 2015 à 16:09
Bonjour f,

Je me suis emmêlé les pédales car j'ai travaillé sur trop de macros à la fois. J'ai fait le ménage mais il m'en manque deux, les tiennes (dont tu dis gentiment qu'elles sont un peut les miennes.

En plus je suis obligé de me servir de mon ordi pour d'autres choses que des macros à partir de cette fin d'après-midi et pour un temps incertain.

Pourrais-tu avoir l'obligeance de me réécrire d'un coup la macro qui liste les fichiers avec une colonne par dossier puis celle qui les liste en les mettant touts à la suite, mille mercis...
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 702
19 mai 2015 à 16:50
Re,

Des que possible, ci-joint en vrac apparemment
0
Licorne rose Messages postés 997 Date d'inscription mardi 10 juillet 2007 Statut Membre Dernière intervention 18 janvier 2024 227
19 mai 2015 à 20:31
Heuh, je ne comprends pas bien ta réponse... :
"Dès que possible, ci-joint en vrac apparemment"

En tout cas bonne soirée, ne te casse pas la tête pour moi à cette heure...
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 702
20 mai 2015 à 08:02
Bonjour,

Heuh, je ne comprends pas bien ta réponse... : Hier, le site de ci-joint.com etait un derange et pas possible d'envoyer fichier

fichier avec les trois affichages: https://www.cjoint.com/c/EEuiaof5liD
0