XL 2019 Créer des dossiers et sous dossiers avec VBA

Linda42

XLDnaute Occasionnel
Bonjour,

J'ai un début de code VBA mais qui fonctionne uniquement sur une liste de noms les uns à la suite des autres dans une seul colonne.
Je tente de créer des dossiers et les sous dossier selon les infos dans les colonnes suivants. Colonne A, Dossier racine, colonne B sous dossier, colonne C sous dossier de la colonne B etc....
Pouvez vous m'aider à corriger mon code.

Merci
 

Pièces jointes

  • créer dossier a partir de excel.xlsm
    16.5 KB · Affichages: 7

Dranreb

XLDnaute Barbatruc
Bonjour.
Essayez comme ça :
VB:
Sub Creer_Dossiers()
Const Racine = "C:\Users\li472956\Documents\Nouvelle arborescence"
Dim TDos() As String, TDon(), L&, C%
TDon = ActiveSheet.[A1].CurrentRegion.Value
ReDim TDos(1 To UBound(TDon, 2))
For L = 2 To UBound(TDon, 1)
   ChDrive Racine: ChDir Racine
   For C = 1 To UBound(TDon, 2)
      If Not IsEmpty(TDon(L, C)) Then TDos(C) = TDon(L, C)
      If TDos(C) <> "" Then
         On Error Resume Next
         ChDir TDos(C)
         If Err Then Err.Clear: MkDir TDos(C): ChDir TDos(C)
         On Error GoTo 0
         End If
      Next C, L
   End Sub
 

vgendron

XLDnaute Barbatruc
Hello
j'ai fait, je poste

1) ton arborescence est sous forme de table structurée
2) sur CHAQUE ligne, il ne doit y avoir que UN seul nom de dossier
==> à chaque sous dossier, tu changes de ligne: dans ton tableau d'origine, c'est pas toujours le cas
 

Pièces jointes

  • créer dossier a partir de excel.xlsm
    27.7 KB · Affichages: 1

patricktoulon

XLDnaute Barbatruc
bonjour
@Dranreb currentregion 'problème

ensuite si on veut garder cette structure de table indentée
si vous cherchez bien j'ai déja montré comment on peut faire exactement avec ce type de table
il suffit de remplir les vides intelligemment

il me semble que c'est ici
en gros ça fait ca
demo1.gif

il vous sera facile d'adapter cela en travaillant sur variable tableau
quoi que 120 lignes sur 4 colonnes c'est du pipi de chat
allez @vgendron fait moi une petite adapte en variable tableau en gardant mon principe avec cette structure indentée
 

TooFatBoy

XLDnaute Barbatruc
Bonjour,

J'ai un début de code VBA mais qui fonctionne uniquement sur une liste de noms les uns à la suite des autres dans une seul colonne.
Je tente de créer des dossiers et les sous dossier selon les infos dans les colonnes suivants. Colonne A, Dossier racine, colonne B sous dossier, colonne C sous dossier de la colonne B etc....
Pouvez vous m'aider à corriger mon code.
Ca semble correspondre exactement à un sujet déjà traité là-bas :

Sujet dans lequel j'avais fait une proposition très simple, qu'il faudrait peut-être adapter (mais je pense que c'est utilisable sans modif).
 
Dernière édition:

vgendron

XLDnaute Barbatruc
Hello @patricktoulon
pour le remplissage des blancs, c'est ce que je fais dans ma proposition
SAUF que
dans le tableau initial proposé par le demandeur, parfois, on avait directement un sous-dossier sans avoir eu le dossier racine précédemment
exemple
VB:
dossier 1
     sousdos1-1
     sousdos1-2
dossier 2  - sousdos2-1
le remplissage des blancs fonctionne bien pour les sousdos 1-1 et 1-2
mais.. il manque le dossier racine dossier 2

d'où ma précision : il faut qu'il y ait UN seul dossier (ou sous dossier) par ligne
et pas de ligne vide

ta fonction 'combler les blancs que j'ai essayée" fait effectivement la meme chose que mon code
(manque juste un screenupdating=false ;) )

mais à la création du dossier, on a le meme problème.. il ne va pas vouloir créer le chemin "dossier2/sousdos2-1" puisque le chemin "dossier2" n'existe pas

on pourrait "contourner" en testant l'existance de tous les dossiers de la chaine complète
 

patricktoulon

XLDnaute Barbatruc
@vgendron
ben non le but c'est de réduire si on s'amuse a retester la chaine autant faire un algo de chez wisch ou temu
voici l'adaptation de mon model visuel dont la demo est ici
je n'ai pas de soucis avec les lignes blanches
vous reste plus qu'a travail avec variabletableau(lig,c) a la place .cells(lig,c)
le test countA doit être remplacer par un tests sur la ligne et 4 colonne et 3 pour le premier (dans une variable tableau)

ca fonctionne très bien même avec des lignes vides
demo1.gif
 

Pièces jointes

  • créer dossier a partir de excel demo visuelle V pat .xlsm
    51.3 KB · Affichages: 2

vgendron

XLDnaute Barbatruc
oui ca marche bien pour le remplissage des blancs.. mais c'est pour après.. la création des répertoires

regarde, j'ai remis ton fichier (post 7)
j'ai juste déplacé les deux sous dos (surlignés en jaune)

le remplissage des blancs est OK
mais quand tu vas parcourir les lignes une par une pour créér les répertoires, il va bugger sur la ligne 3 "Marché_Public/BioMédical/En cours"
parce que il n'aura pas vu/créé le répertoire "Marché_Public/BioMédical"
 

Pièces jointes

  • créer dossier a partir de excel demo visuelle V pat .xlsm
    51.6 KB · Affichages: 4

vgendron

XLDnaute Barbatruc
la ligne 3 n'est pas vide puisqu'il y a "Marché_Public/BioMédical/En cours"
MAIS il n'y a PAS de ligne 2 = "Marché_Public/BioMédical"

"En cours" est un sous dos de "BioMédical"
et comme "BioMédical" n'existe pas encore.. mkdir ne va pas te dire "attention.. il vous manque le dossier racine.. "BioMédical"
 

patricktoulon

XLDnaute Barbatruc
le problème c'est que vous cherchez à créer les dossiers ou subdossier dès que vous tombez sur un mot dans une cellule
le problème avec ça c'est que vous êtes obligé de faire un test d'existence du dossier ou sub dossier a chaque fois
pensez plus loin ;)
vous vous faite ( countA de la plage * le nombre de mot trouvé) tests d'existance
moi je crée la liste en remplissant les blancs
et je bouclerais un dernière fois avec un seul test d'existence POUR CREER
autrement dit je fait (nombre de ligne) tests lors des MKDIR

un algo bien pensé n'ai pas celui le plus court même si c'est séduisant
c'est celui qui sera le moins chronophage et par définition moins gourmand en CPU
j'ai tout dit ;)
 

vgendron

XLDnaute Barbatruc
mais où donc avez vous vu un quelconque test d'existence dans ma proposition?


VB:
'attention adapter l'adresse de destination en fonction de l'ordi
For ligne = LBound(TabData, 1) To UBound(TabData, 1)
    MkDir Chemin & "/" & Trim(TabData(ligne, 1))
Next ligne
End Sub
 

patricktoulon

XLDnaute Barbatruc
oui ca marche bien pour le remplissage des blancs.. mais c'est pour après.. la création des répertoires

regarde, j'ai remis ton fichier (post 7)
j'ai juste déplacé les deux sous dos (surlignés en jaune)

le remplissage des blancs est OK
mais quand tu vas parcourir les lignes une par une pour créér les répertoires, il va bugger sur la ligne 3 "Marché_Public/BioMédical/En cours"
parce que il n'aura pas vu/créé le répertoire "Marché_Public/BioMédical"
mais pourquoi veux tu changer la structure de la table ?
ce que nous a fourni le demandeur est très bien même si il y a des ligne vides
elle est parfaitement intelligible
je vois pas pourquoi tu va chercher des" si je décale en haut ou à droite ou en bas ça va pas marcher "
tu dois faire avec la structure que l'on te donne qui est parfaitement représentative d'une arborescence d’élément (en l'occurrence nom de dossier)
 

Discussions similaires

Réponses
9
Affichages
504

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
315 087
Messages
2 116 083
Membres
112 655
dernier inscrit
fannycordi