Macro pour création d'arborescence

Bonjour,

Je souhaite faire une macro pour créer une arborescence à partir d'un fichier Excel.

Le fichier comporte 2 colonnes :

  • Equipement industriel (la liste des dossiers)
  • Périodicité de maintenance (les sous-dossiers).

Le problème est que dans le vrai fichier il y a plus de 800 équipements industriels et donc autant de dossiers à créer manuellement et encore plus de sous-dossiers.

Est-ce que quelqu'un sait comment s'y prendre ?

Je vous ai joins le fichier de base.

D'avance, merci de votre aide.

Bonjour Kabel, bonjour le forum,

Le code ci-dessous va créer l'arborescence à partir du dossier qui contient le fichier de la macro :

Sub Macro1()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim D As Object 'déclare la variable D (Dictionnaire)
Dim I As Integer 'déclare la variable I (incrément)
Dim TMP As Variant 'déclare la variable TMP (tableau TeMPoraire)
Dim DR As String 'déclare la variable DR (Dossier Racine)
Dim J As Integer 'déclare la variable J (incrément)
Dim DP As String 'déclare la variable DP (Dossier Principal)

Set O = Worksheets("Feuil1") 'définit l'onglet O
TV = O.Range("A1").CurrentRegion 'définit le tableau des Valeurs TV
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
For I = 2 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeur (en partant de la seconde)
    D(TV(I, 1)) = "" 'alimente le dictionnaire avec les données de la colonne 1 du tableau des valeurs TV
Next I 'prochaine ligne de la boucle
TMP = D.keys 'récupère dans le tableau temporaire TMP la liste des éléments du dictionnaire D sans doublon
DR = ThisWorkbook.Path & "\" 'définit le dossier racine DR (ici le dossier où se trouve le fichier de la macro, à adapter)
For J = 0 To UBound(TMP) 'boucle 1 : sur tous les éléments du tableau temporaire TMP
    For I = 2 To UBound(TV, 1) 'boucle 2 : sur toutes les lignes I du tableau des valeur (en partant de la seconde)
        On Error Resume Next 'gestion des erreurs (en cas d'erreur passe à la ligne suivante)
        ChDir DR & TMP(J) 'définit le répertoire courant (génère une erreur si il n'existe pas)
        If Err > 0 Then 'condition : si une erreur a été générée
            MkDir DR & TMP(J) 'crée un dossier
            DP = DR & TMP(J) 'définit le dossier principal DP
        End If 'fin de la condition
        ChDir DP & TV(I, 2) 'redéfinit le répertoire courant (génère une erreur si il n'existe pas)
        If Err > 0 Then MkDir DP & "\" & TV(I, 2) 'condition : si une erreur a été générée, crée un dossier
        On Error GoTo 0 'annule la gestion eds erreurs
    Next I 'prochaine ligne de la boucle 2
Next J 'prochaine élément de la boucle 1
End Sub

Bonjour ThauThème,

Merci beaucoup pour ce travail.

En revanche, serait-il possible que l'arborescence se crée dans un dossier qui lui-même se trouve dans le même fichier que la Macro ?

D'avance, merci.

Re,

En revanche, serait-il possible que l'arborescence se crée dans un dossier qui lui-même se trouve dans le même fichier que la Macro ?

C'est confus ! Un dossier ne se crée pas dans un fichier mais un dossier ou à la racine. Ensuite, c'est exactement ce que fait la macro !... L'arborescence se crée à partir du dossier qui contient le fichier de la macro.

Par contre, si tu as oublié le mot autre (dossier), il te suffit de définir à ta guise le dossier racine avec la variable DR...

Désolé .

Par contre, si tu as oublié le mot autre (dossier), il te suffit de définir à ta guise le dossier racine avec la variable DR...

En effet, c'est bien ça, dans la précipitation, j'ai fait une faute de frappe.

Donc si je souhaite que l'arborescence se crée dans le dossier "Feuilles de travail", je dois écrire :

DR = ThisWorkbook.Path & "\Feuilles de travail\"

C'est bien ça ?

Re,

Là, tu indiques que se sera dans le dossier Feuilles du Travail du dossier contenant le fichier de la macro.

Si c'est fixe, je te conseille d'écrire le chemin en dur :

DR = "C:\blablabla\blablabla\Feulles de Travail\"

tu indiques que se sera dans le dossier Feuilles du Travail du dossier contenant le fichier de la macro

C'est exactement ce qu'il me faut car nous travaillons sur des serveurs qui sont à être remplacés.

En tout cas mille mercis pour ton aide précieuse.

A très bientôt ThauThème.

kalel_77

Bonjour ThauThème,

Je reviens vers toi concernant une vieille question à laquelle tu avais gentiment répondu.

Je viens de me rendre compte que mon fichier exemple n'était pas bon car tous les équipements avaient le même type de périodicité.

Or dans la réalité, les équipements n'ont pas la même maintenance.

Du coup, lorsque j'ai généré l'arborescence générale, tous mes équipements avaient la même (sous)-arborescence bien que certains équipements ne soient concernés que par un type de périodicité (mensuel par exemple).

Quelles modifications faut-il apporter à la macro pour qu'elle prenne en compte la diversité de périodicités en fonction des équipements ?

Je te joins un nouveau fichier exemple qui correspond plus à la réalité.

D'avance, merci pour ton retour.

Kalel_77

Bonjour

Mayday mayday est-ce qu'il y a quelqu'un pour m'aider sur mon problème ?

D'avance, merci.

Bonjour @kalel_77,

J'espère que tu vas bien. J'ai également un problème similaire au tien ! Je ne sais pas si tu as pu trouver une solution.

Si ta réponse est négative, j'espère qu'une personne extérieure pourra nous aider.

Merci de ton, votre (si d'autres personnes interviennent), aide.

Passe(z) une excellente soirée.

RahB

Rechercher des sujets similaires à "macro creation arborescence"