Creation de 2500 dossiers + sous dossiers identiques partout
Bonjour,
Voila j'ai chercher partout et les codes que je trouve ne fonctionne pas et je n'ai aucune connaissance en VBA donc je ne m'en sors pas du tout j'ai besoin d'aide.
J'ai 2500 dossiers à créer avec des nom tous différents (liste créée en colonne A d'un tableau excel) et dans chacun de ces dossiers je veux créer une arborescence de sous-dossier identique partout mais je n'arrive pas à trouver une solution sans avoir à faire une liste interminable dans excel à côté et sous chaque dossier.
Si quelqu'un peut m'aider svp.
L'arborescence voulue dans chacun des 2500 dossier est la suivante
| dossier 1 | |||
| sous dossier 1-1 | |||
| sou sous dossier 1-1-1 | |||
| sou sous dossier 1-1-2 | |||
| sou sous dossier 1-1-3 | |||
| sous dossier 1-2 | |||
| sou sous dossier 1-2-1 | |||
| sou sous dossier 1-2-2 | |||
| sou sous dossier 1-2-3 | |||
| dossier 2 | |||
| sous dossier 2-1 | |||
| sous dossier 2-2 | |||
| sous dossier 2-3 | |||
| sous dossier 2-4 | |||
| sous dossier 2-5 | |||
| sous dossier 2-6 | |||
puis la même arborescence que le dossier 2 jusqu'au dossier 6
Bonjour FatalitY et
Une petite présentation ICI serait la bienvenue
Si vous ne l'avez pas encore fait, je vous invite à lire :
- La charte du forum
- Quelques fonctionnalités du forum à connaître
qui vous aideront dans vos demandes et réponses sur ce forum.
Regardez aussi les petites icônes mises à votre disposition dans la barre de menu qui :
- vous permettent de poster un code (</>)
- ou de clôturer un fil lorsque vous avez terminé (V)
Merci pour votre participation
Concernant votre demande, je me pose la question pour quelle raison vous devez créer tous ces dossiers d'un bloc
Cordialement
Bonsoir Bruno,
Je ne manquerai pas de faire une petite présentation.
Je cherche à créer une arborescence de ce type afin d'y intégrer énormément de document d'une ancienne base de donnée qui sont tous mal rangé. Mes 2500 dossiers de départ correspondent à 2500 bâtiment (patrimoine d'un client) dans lesquels je dois classer plusieurs type de doc.
J'ai donc une liste de dossier avec les noms pour les créer + tous les sous-dossiers qui vont dedans et qui sont tous les mêmes.
Pour ne pas y passer trop de temps j'aimerai trouver un système automatisé qui créer les 2500 dossiers avec les nom que j'ai mis en colonne A de mon fichier puis qui créer dans chacun des dossiers les sous-dossiers en suivant systématiquement la même arborescence
Re,
Ok, je comprends
Peut-être que ceci https://forum.excel-pratique.com/excel/creer-une-arborescence-de-dossier-t68489.html
répondra à la question, à voir
A+
Re,
Oui j'ai vue ce topic mais je n'y arrive pas, je ne sais pas comment compléter le scrypt pour obtenir ce que je veux c'est à dire que le scrypt aille chercher l'arboreensce des sous-dossiers à créer sur 3 colonnes et l'intègre dans tout les dossier de la colonne A en une fois :
Je ne sais même pas quoi changer dans le code à part le mkdir et encore j'ai un message d'erreur, la ligne s'affiche en rouge
Sub CreeArboRepertoire()
Tbl = Range("A1:B" & [A65000].End(xlUp).Row).Value
n = UBound(Tbl)
niv = 1
CréeRep Tbl(1, 1), niv
End Sub
Sub CréeRep(parent, niv) ' procédure récursive
chemin = ""
RepNiv(niv) = parent
For i = 1 To niv - 1
chemin = chemin & RepNiv(i) & "\"
Next i
chemin = chemin & parent
MkDir C:\documents\XXX
For i = 1 To n
If Tbl(i, 2) = parent Then CréeRep Tbl(i, 1), niv + 1
Next i
End Subbonjour,
une proposition, basée sur ma compréhension que tu souhaites créer 2500 dossiers contenant chacun la structure que tu as mise dans ton premier message.
Sub aargh()
Dim niveau(4) ' 4 niveaux + la racine (0)
arbre = Sheets("arborescence").Range("A1:D44")
Application.DisplayAlerts = False
On Error Resume Next
Sheets("trace").Delete
On Error GoTo 0
Application.DisplayAlerts = True
Sheets.Add
With ActiveSheet
.Name = "trace"
chemin = "d:\downloads\test\" '<--------------- à adapter
nb = 10 'nombre de dossiers racine à créer <--------------- à adapter
nr = "racine" ' nom générique du dossier racine <---------- à adapter
For i = 1 To nb 'on crée nb dossiers racine
niveau(0) = chemin & nr & i ' nom du dossier racine + numéro séquentiel
ctrl = ctrl + 1
.Cells(ctrl, 1) = "MkDir " & niveau(0)
MkDir niveau(0) 'création du dossier racine
' création de l'arborescence pour le dossier racine en cours
n = 1
j = 1
Do
If arbre(j, n) <> "" Then
niveau(n) = niveau(n - 1) & "\" & arbre(j, n)
ctrl = ctrl + 1
.Cells(ctrl, 1) = "MkDir " & niveau(n)
MkDir niveau(n)
j = j + 1
d = 1
Else
n = n + d
If n = 4 Then d = -1
If n = 0 Then Exit Do
End If
Loop Until j > 44
Next i
End With
End Sub
Merci pour ton aide je vais tester et te faire un retour.
En gros aujourd'hui moi j'ai tester de coder ca :
Sub créer_dossier()
'variable'
Dim SYSTEME As Worksheet
Dim lstrw As Long
Dim N_Systeme As String
Dim chemin_dossier As String
Dim colonne_B As String
Dim colonne_C1 As String
Dim colonne_C2 As String
Dim colonne_D As String
Dim chemin_sous_dossier As String
Dim chemin_sous_sous_dossier As String
Dim chemin_sous_sous_sous_dossier As String
Set SYSTEME = ActiveSheet
Set colonne_B = ActiveSheet(Rows(1), Collumns(2), Rows(6))
Set colonne_C1 = ActiveSheet("C1:C2")
Set colonne_C2 = ActiveSheet("C3:C8")
Set colonne_D = ActiveSheet("D1:D3")
lstrw = SYSTEME.Cells(Rows.Count, 1).End(xlUp).Row
For i = 2278 To lstrw
N_Systeme = SYSTEME.Cells(Row.Count, 1).End(xlUp).Row
colonne_B = colonne_B.Cells(Row.Count, .End(xlUp).Row
colonne_C1 = colonne_C1.Cells(Row.Count, 3).End(xlUp).Row
colonne_C2 = colonne_C2.Cells(Row.Count, 3).End(xlUp).Row
colonne_D = colonne_D.Cells(Row.Count, 4).End(xlUp).Row
chemin_dossier = "C:\XXXX\" & N_Systeme & "\"
chemin_sous_dossier = chemin_dossier & colonne_B & "\"
chemin_sous_sous_dossier = chemin_sous_dossier & colonne_C1 & "\"
chemin_sous_sous_dossier = chemin_sous_dossier & colonne_C2 & "\"
chemin_sous_sous_sous_dossier = chemin_sous_sous_dossier & colonne_D & "\"
If Dir(chemin_dossier, vbDirectory) <> vbNullString Then
Else
MkDir (chemin_dossier)
MkDir (chemin_sous_dossier)
End If
Next
End SubEdit modo : code à mettre mettre entre balises SVP avec le bouton </>
mais ca ne marche pas car j'ai du me tromper à plein d'endroit.
Dans l'idée les dossiers doivent tous se mettre dans un dossier racine exstant (type Client)
Dedans doivent e créer les 2500 dossiers (1 dossiers par bâitment) et dans chacun d'eux les sous-dossiers comme mentionné dans mon premier message.
Le problème que j'ai pour le moment c'est que soit ca me créée les dossiers racine mais pas les sous-dossiers, soit ca me créer les sous-dossier mais sans respecter l'arborescence souhaité.
C'est fait Bruno, désolé je suis au boulot en même temps au tel, je fais un peu vite...
J'ai un bug sur ton code h2so4,
ca me dit chemin erreur 75 : erreur d'accès chemin/fichier à la ligne suivante :
MkDir niveau(0) 'création du dossier racinebonjour,
as-tu adapté les instructions de la macro marquées d'un <--- à adapter ?
pour éviter de perdre du temps, peux-tu mettre le fichier avec ton arborescence et la macro adaptée, ainsi qu'indiquer le chemin complet vers le répertoire dans lequel cette arborescence doit être créée ?
as-tu regardé dans la feuille trace le répertoire qu'il a essayé de créer sur base des données que tu lui as fournies ?
Bonjour,
Oui j'ai adapté mais ca ne correspond pas à mes besoins exacte, la colonne A du fichier excel c'est le nom de tous les dossier à créer, à la place ca me créer un dossier avec des numéros, ensuite les sous -dossier ne se crée pas.
J'ai adapté ton code de la manière suivante :
Sub aargh()
Dim niveau(4) ' 4 niveaux + la racine (0)
Dim SYSTEME As Worksheet
Dim N_Systeme As String
Dim lstrw As Long
arbre = Sheets("test").Range("A1:D44")
Application.DisplayAlerts = False
On Error Resume Next
Sheets("trace").Delete
On Error GoTo 0
Application.DisplayAlerts = True
Sheets.Add
With ActiveSheet
.Name = "trace"
chemin = "C:XXX\TEST INTEGRATION \"
nb = 2249 'nombre de dossiers racine à créer <--------------- à adapter
'identifier la feuille
Set SYSTEME = ActiveSheet
'dernière ligne
lstrw = SYSTEME.Cells(Rows.Count, 1).End(xlUp).Row
N_Systeme = SYSTEME.Cells(Rows.Count, 1).End(xlUp).Row
'boucle sur les données
For i = 1 To lstrw
'on crée nb dossiers racine
niveau(0) = chemin & N_Systeme ' nom du dossier racine + numéro séquentiel
ctrl = ctrl + 1
.Cells(ctrl, 1) = "MkDir " & niveau(0)
MkDir niveau(0) 'création du dossier racine
' création de l'arborescence pour le dossier racine en cours
n = 1
j = 1
Do
If arbre(j, n) <> "" Then
niveau(n) = niveau(n - 1) & "\" & arbre(j, n)
ctrl = ctrl + 1
.Cells(ctrl, 1) = "MkDir " & niveau(n)
MkDir niveau(n)
j = j + 1
D = 1
Else
n = n + D
If n = 4 Then D = -1
If n = 0 Then Exit Do
End If
Loop Until j > 44
Next i
End With
End SubMais j'ai une erreur maintenant à se niveau là : MkDir niveau(n) ca me dit erreur accès chemin/fichier. Pour l'arborescence et le fichier adapté je ne peux pas le mettre car les noms son confidentiels (client d'état).
Mais en gros en colonne A tu as le nom des 2500 dossier à créer, en colonne B tu as les premier sous-dossier et ainsi de suite jusqu'en colonne D, bien entendu tous positionné sous forme d'arborescence donc avec des cellule vide type :
Dossier
----------------sous dossier
-------------------------------------sous sous dossier
dossier
---------------sous dossier
bonsoir,
Pour l'arborescence et le fichier adapté je ne peux pas le mettre car les noms son confidentiels (client d'état).
Qu'est-ce qui t'empêche de modifier ces noms par des noms factices ? J'essaie seulement de comprendre quelle est l'information de départ et comment elle est structurée, car manifestement je n'ai rien compris à tes explications. Donc merci de mettre un fichier avec minimum 2 clients bidons et l'arborescence souhaitée. Et la macro si tu l'as adaptée.
Voici pour ma part une nouvelle version qui se base sur une liste de répertoires à créer en feuille repertoire et une arborescence à répéter pour chaque répertoire, en feuille arborescence.
Sub aargh()
Dim niveau(4) ' 4 niveaux + la racine (0)
chemin = "d:\downloads\test" 'répertoire racine <--------------à adapter
dl = Sheets("repertoire").UsedRange.Rows.Count
client = Sheets("repertoire").Range("A1:A" & dl) ' liste des répertoires client à créer
dl1 = Sheets("arborescence").UsedRange.Rows.Count '
arbre = Sheets("arborescence").Range("A1:C" & dl1) ' arborescence à créer pour chaque client
Application.DisplayAlerts = False
On Error Resume Next
Sheets("trace").Delete
On Error GoTo 0
Application.DisplayAlerts = True
Set wst = Sheets.Add 'feuille trace
With wst
.Name = "trace" 'feuille qui contient la trace des opérations effectuées
For i = 1 To dl
niveau(0) = chemin & "\" & client(i, 1)
ctrl = ctrl + 1
.Cells(ctrl, 1) = "MkDir " & niveau(0)
MkDir niveau(0) 'répertoire client
n = 1
j = 1
Do
If arbre(j, n) <> "" Then
niveau(n) = niveau(n - 1) & "\" & arbre(j, n)
ctrl = ctrl + 1
.Cells(ctrl, 1) = "MkDir " & niveau(n)
On Error Resume Next
MkDir niveau(n) 'sous répertoire selon niveau
If Err = 75 Then .Cells(ctrl, 2) = "existe déjà" Else If Err <> 0 Then .Cells(ctrl, 2) = Error(Err)
Err.Clear
On Error GoTo 0
j = j + 1
d = 1
Else
n = n + d
If n = 3 Then d = -1
If n = 0 Then Exit Do
End If
Loop Until j > dl1
Next i
.Range("A:B").EntireColumn.AutoFit
End With
End Sub
bonsoir,
la macro donne une erreur quand elle essaie de créer un répertoire qui existe déjà, je n'avais pas prévu que tu demanderais de créer plusieurs fois les mêmes répertoires, car cela ne fait pas de sens. Si tu veux des dossiers différents, il faut leur donner des noms différents.
donc voici une version qui gère ces cas de figure, pour le cas où.
Sub aargh()
Dim niveau(4) ' 4 niveaux + la racine (0)
chemin = "d:\downloads\test" 'répertoire racine <--------------à adapter
dl = Sheets("repertoire").UsedRange.Rows.Count
client = Sheets("repertoire").Range("A1:A" & dl) ' liste des répertoires client à créer
dl1 = Sheets("arborescence").UsedRange.Rows.Count '
arbre = Sheets("arborescence").Range("A1:D" & dl1) ' arborescence à créer pour chaque client
Application.DisplayAlerts = False
On Error Resume Next
Sheets("trace").Delete
On Error GoTo 0
Application.DisplayAlerts = True
Set wst = Sheets.Add 'feuille trace
With wst
.Name = "trace" 'feuille qui contient la trace des opérations effectuées
For i = 1 To dl
niveau(0) = chemin & "\" & client(i, 1)
ctrl = ctrl + 1
.Cells(ctrl, 1) = "MkDir " & niveau(0)
On Error Resume Next
MkDir niveau(0) 'répertoire client
If Err = 75 Then .Cells(ctrl, 2) = "existe déjà" Else If Err <> 0 Then .Cells(ctrl, 2) = Error(Err)
Err.Clear
On Error GoTo 0
n = 1
j = 1
Do
If arbre(j, n) <> "" Then
niveau(n) = niveau(n - 1) & "\" & arbre(j, n)
ctrl = ctrl + 1
.Cells(ctrl, 1) = "MkDir " & niveau(n)
On Error Resume Next
MkDir niveau(n) 'sous répertoire selon niveau
If Err = 75 Then .Cells(ctrl, 2) = "existe déjà" Else If Err <> 0 Then .Cells(ctrl, 2) = Error(Err)
Err.Clear
On Error GoTo 0
j = j + 1
d = 1
Else
n = n + d
If n = 4 Then d = -1
If n = 0 Then Exit Do
End If
Loop Until j > dl1
Next i
.Range("A:B").EntireColumn.AutoFit
End With
End SubSi à nouveau cette solution ne te convient pas, mets un fichier avec les données de départ que tu penses mettre à disposition pour créer l'arborescence et un exemple (pour 2 "bâtiments") de l'arborescence complète telle que tu la voudrais. Sache qu'il n'est pas possible de créer 2 chemins complets identiques.
C'est bon ca marche super bien, merci beaucoup pour ton aide tu viens de me faire gagner de nombreuses heures de boulot pour rien.

