XL 2013 Pouvez vous m'aider à ajouter la sélection de la racine à la macro d'examen d'arborescence

fb62840

XLDnaute Impliqué
Bonjour,

La macro suivant permet d'éditer l'arborescence d'un dossier.

Pouvez-vous me donner la modification qui permettrait :
- de permettre à l'utilisateur de sélectionner le dossier racine initial
- de créer une feuille portant le nom de ce dossier racine
- d'exécuter la macro sur cette nouvelle feuille

Merci beaucoup pour votre aide

VB:
Sub fonctionAlancer()
Dim oFSO As Object
Dim oDossier As Object
Dim oFichier As Object
Dim i As Integer

Set oFSO = CreateObject("Scripting.FileSystemObject")
Set oDossier = oFSO.GetFolder("C:\") ' <<< changer le chemin ici en le faisant préciser par l'utilisateur

Application.ScreenUpdating = False

For Each oFichier In oDossier.SubFolders
Cells(i + 1, 1) = oFichier.Name
i = i + 1
i = Boucle(i, 2, "C:\" & oFichier.Name) '<<< il faudrait ici changer "C:\" par la racine précisée par l'utilisateur

Next oFichier
Application.ScreenUpdating = True

End Sub

Function Boucle(i As Integer, col As Integer, chemin As String) As Integer

Dim oFSO As Object
Dim oDossier As Object
Dim oFichier As Object

Set oFSO = CreateObject("Scripting.FileSystemObject")
Set oDossier = oFSO.GetFolder(chemin)

For Each oFichier In oDossier.SubFolders
Cells(i + 1, col) = oFichier.Name
i = i + 1
i = Boucle(i, col + 1, chemin & "\" & oFichier.Name)
Next oFichier

Boucle = i

End Function
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour FB,
En PJ un essai, mais les fichiers sont listés en Feuil1 car :
- de créer une feuille portant le nom de ce dossier racine
Le caractère "\" est interdit dans un nom de feuille.
Le nombre max de caractères pour un nom d'onglets est de 31. Et si on tronque à 31 il y a de fortes chances que deux onglets portent le même nom, qui serait le début de la racine.
VB:
Sub FilesList()
    Dim objShell As Object, objFolder As Object, oFolderItem As Object, CheminDossier$
    [A:B].ClearContents
    Set objShell = CreateObject("Shell.Application")
    Set objFolder = objShell.BrowseForFolder(&H0&, "Choisir un répertoire", &H1&)
    On Error Resume Next
    Set oFolderItem = objFolder.Items.Item
    CheminDossier = oFolderItem.Path & "\"
    If Len(CheminDossier) > 0 Then
        i = 0
        Fichier = Dir(CheminDossier)
        Do While Fichier <> ""
            i = i + 1
            Sheets("Feuil1").Cells(i, "A") = Fichier
            Fichier = Dir
        Loop
    End If
End Sub
 

Pièces jointes

  • ListeFichiers.xlsm
    15.7 KB · Affichages: 2

fb62840

XLDnaute Impliqué
Bonjour FB,
En PJ un essai, mais les fichiers sont listés en Feuil1 car :

Le caractère "\" est interdit dans un nom de feuille.
Le nombre max de caractères pour un nom d'onglets est de 31. Et si on tronque à 31 il y a de fortes chances que deux onglets portent le même nom, qui serait le début de la racine.
VB:
Sub FilesList()
    Dim objShell As Object, objFolder As Object, oFolderItem As Object, CheminDossier$
    [A:B].ClearContents
    Set objShell = CreateObject("Shell.Application")
    Set objFolder = objShell.BrowseForFolder(&H0&, "Choisir un répertoire", &H1&)
    On Error Resume Next
    Set oFolderItem = objFolder.Items.Item
    CheminDossier = oFolderItem.Path & "\"
    If Len(CheminDossier) > 0 Then
        i = 0
        Fichier = Dir(CheminDossier)
        Do While Fichier <> ""
            i = i + 1
            Sheets("Feuil1").Cells(i, "A") = Fichier
            Fichier = Dir
        Loop
    End If
End Sub
Bonjour,

Merci de vous pencher sur mon sujet.

En fait votre macro édite la liste des fichiers, hors, j'ai besoin de l'arborescence des dossiers
avec en colonne A le dossier racine, en colonne B les sous-dossiers contenus dans le dossier racine (par exemple s'il y a 2 dossiers, DossierNOM1, DossierNom2, en colonne C Les noms des dossiers contenus dans le Dossier Nom1, puis en dessous le nom des dossiers de DossierNom2 etc si les autres dossiers contiennent eux aussi des dossiers.
EN fait à chaque niveau de dossier enfant on passe à la colonne suivante.

Merci
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
Mon fichier n'avait d'autre ambition que de fixer le dossier à traiter.
Il suffisait d'y intégrer votre macro.
Et éventuellement de vous positionner sur mon interrogation :
Le caractère "\" est interdit dans un nom de feuille.
Le nombre max de caractères pour un nom d'onglets est de 31. Et si on tronque à 31 il y a de fortes chances que deux onglets portent le même nom, qui serait le début de la racine.
 

Pièces jointes

  • ListeFichiers (V2).xlsm
    16.9 KB · Affichages: 4

fb62840

XLDnaute Impliqué
Re,
Mon fichier n'avait d'autre ambition que de fixer le dossier à traiter.
Il suffisait d'y intégrer votre macro.
Et éventuellement de vous positionner sur mon interrogation :
Merci beaucoup, pourriez-vous me dire alors (puisque je ne peux avoir que 3 lettres de lecteur concernés) comment faire pour créer une feuille nommée C, D, E (C si le chemin d'accès est sur le C, D si le chemin d'accès est sur le D et E si le chemin d'accès est sur le E ?

Je vous remercie sincèrement
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
puisque je ne peux avoir que 3 lettres de lecteur concernés
31 et non 3.
Le problème est que vous aurez très vite les mêmes racines il y aura des soucis de noms.
En PJ un essai. Je nomme les onglets avec les 25 derniers caractères de l'arborescence, supprime les "\" et rajoute le N° d'onglets, ainsi deux onglets ne porteront jamais le même nom.
A bricoler à votre goût bien sur.
 

Pièces jointes

  • ListeFichiers (V3).xlsm
    17.3 KB · Affichages: 2

fb62840

XLDnaute Impliqué
Re,
En PJ avec en première feuille un sommaire résumant les noms d'onglets ainsi que le chemin complet car les noms d'onglets ainsi nommés pourront paraitre abscons.
Bonjour,

Merci,
A l'exécution, en lançant sur le C dossier Documents (ou sur un autre dossier) par exemple tout se passe correctement.
Par contre ensuite lorsque j'exécute le code pour un lecteur différent du C la feuille n'est pas nommée (et pourtant avec une vérification par msgbox NomOnglet le nom qu'elle devrait porter est correct.
C'est étrange
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Le caractère "\" est interdit dans un nom de feuille.
Il y en a d'autres ( *,$,:...)
Et si on utilise un autre lecteur que C: alors le chemin est par ex N:/.... donc le nom feuille sera N:_.... et le ":" plante car interdit.
En PJ j''ai rajouté :
VB:
NomOnglet = Replace(NomOnglet, ":", "_")
Testez pour voir.
 

Pièces jointes

  • ListeFichiers (V5).xlsm
    19.7 KB · Affichages: 1

Discussions similaires

Statistiques des forums

Discussions
312 206
Messages
2 086 220
Membres
103 158
dernier inscrit
laufin