Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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
 
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

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
 
Bonjour,

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:
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
 
@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
 

Pièces jointes

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

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"
 
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 😉
 
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
 
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)
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
9
Affichages
570
Réponses
12
Affichages
362
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…