Créer automatiquement des dossiers depuis Excel
Vous tenez la liste de vos clients, de vos chantiers ou de vos dossiers dans Excel, et vous recréez à la main, pour chacun, la même arborescence sur le disque. Trente secondes par dossier, plusieurs fois par jour. Voici le principe de base en VBA, ses limites pratiques, et pourquoi une solution finie évite bien des déboires.
Ce qu'il faut préparer
Le principe tient en une phrase : chaque ligne du tableau décrit un dossier, et une
macro parcourt les lignes pour créer les dossiers correspondants. Commencez par une feuille
nommée Dossiers, construite ainsi :
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Dossier racine | D:\Clients | ||
| 2 | ||||
| 3 | Client | Catégorie | Chemin créé | Date |
| 4 | Dupont SARL | Bâtiment | ||
| 5 | Martin & Fils | Bâtiment | ||
| 6 | Cabinet Leroy | Tertiaire |
Enregistrez ensuite le classeur au format .xlsm (« Classeur Excel prenant en charge
les macros »). Un .xlsx ne conserve aucun code : vous écririez
la macro, elle disparaîtrait à la fermeture. Puis ouvrez l'éditeur avec
Alt + F11, et faites Insertion → Module.
Du code posé dans l'objet d'une feuille n'est appelable que depuis cette feuille.
Dans un module standard, la macro apparaît dans la liste
Alt + F8 et peut être reliée à un bouton.
L'ébauche VBA : le principe de base (~10% du code)
Le code ci-dessous illustre le mécanisme élémentaire : lire une cellule dans Excel et
appeler l'instruction native MkDir. C'est l'embryon théorique
de l'automatisation, qui représente environ 10% du code réel nécessaire.
Option Explicit
' Principe minimaliste : créer un dossier unique depuis une cellule
Public Sub CreerDossierSimple()
Dim racine As String, nomDossier As String, chemin As String
racine = ThisWorkbook.Worksheets("Dossiers").Range("B1").Value
nomDossier = ThisWorkbook.Worksheets("Dossiers").Cells(4, 1).Value
chemin = racine & "\" & nomDossier
' Création élémentaire :
If Len(Dir(chemin, vbDirectory)) = 0 Then
MkDir chemin
End If
' [ ... Reste du code non exposé : création récursive des sous-arborescences,
' filtrage des 9 caractères interdits, gestion des erreurs 76 et 52,
' contrôle des 260 caractères, horodatage, complétion et intégrité ... ]
End Sub
Pourquoi cet extrait ne représente que 10% de la solution
L'instruction native MkDir de VBA semble séduisante au premier abord,
mais dans la pratique quotidienne d'une entreprise, ce code artisanal échoue dans 9 cas sur 10 :
- L'erreur 76 immédiate (Chemin introuvable) :
MkDirne sait créer qu'un seul niveau à la fois. Si vous demandezD:\Clients\Bâtiment\Dupont SARLet que le dossier parentBâtimentn'existe pas encore, la macro s'arrête net sur un message d'erreur bloquant. Gérer cela sans faille impose une fonction récursive complète qui teste et remonte l'arborescence niveau par niveau. - Les 9 caractères interdits par Windows : un nom de client comme « Société A/B », « Dupont & Associés : Chantier » ou un guillemet fait planter la macro ou crée des sous-dossiers incohérents non désirés. Il faut un moteur de filtrage pour assainir chaque nom sans dénaturer vos données.
- Le risque d'écrasement ou d'arrêt prématuré : sans un contrôle d'intégrité non destructif, relancer la macro sur un tableau modifié risque de bloquer sur les dossiers existants ou d'écraser des fichiers.
- L'ergonomie au quotidien : devoir ouvrir l'éditeur VBA (
Alt + F11) ou lancer une macro parAlt + F8n'est pas viable pour des collaborateurs. Pour transformer ce script en véritable outil, il faut concevoir un ruban Excel dédié avec boutons, icônes et contrôle de la ligne active.
Pour un besoin ponctuel sur un dossier unique, l'instruction MkDir suffit.
Mais dès que vous gérez des dizaines de dossiers clients avec sous-dossiers structurés, la complexité explose.
Les quatre pièges des chemins Windows
1. La limite des 260 caractères
Windows refuse historiquement les chemins de plus de 260 caractères. Avec une racine réseau longue, une catégorie, un nom de client et trois niveaux de sous-dossiers, la limite arrive plus vite qu'on ne croit. Ajoutez ce contrôle avant la création :
If Len(cible) > 230 Then
MsgBox "Chemin trop long (" & Len(cible) & " caractères) :" & vbCrLf & cible
GoTo LigneSuivante
End If
La marge de 30 caractères laisse la place aux noms des fichiers qui seront déposés dedans.
2. Les espaces de fin, invisibles
Un nom copié depuis un autre logiciel traîne souvent un espace final. Windows le supprime
silencieusement à la création du dossier, mais VBA le garde en mémoire : le dossier
« Dupont SARL » est créé, et Dir cherchera ensuite
« Dupont SARL ». D'où le Trim$ dans
NomValide.
3. Les dossiers synchronisés
Sur OneDrive, SharePoint ou un lecteur réseau, le dossier apparaît créé côté Excel alors que la synchronisation est encore en cours. Écrire un fichier dans la foulée peut produire un conflit. Si votre racine est synchronisée, prévoyez un temps de pause après création, ou travaillez sur un dossier local que vous synchronisez ensuite.
4. Dir garde son état
Dir est une fonction à mémoire : l'appeler sans argument
poursuit la recherche précédente. Imbriquer deux boucles Dir
donne des résultats faux, sans message d'erreur. Si vous devez parcourir des fichiers,
utilisez plutôt FileSystemObject :
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
If Not fso.FolderExists(cible) Then fso.CreateFolder cible
Sous-dossiers, documents types, OneDrive
Trois évolutions rendent la macro réellement utile au quotidien.
Faire décrire l'arborescence par la feuille plutôt que par le code. Remplacez le
tableau sousDossiers figé par une lecture de cellules :
posez vos niveaux en colonne H d'une feuille Paramètres, et
lisez-les. Vous changez l'arborescence sans rouvrir l'éditeur VBA.
Ouvrir le dossier depuis la ligne. Une fois le chemin en colonne C, un double-clic peut ouvrir l'Explorateur au bon endroit. Dans le module de la feuille :
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Column = 3 And Len(Target.Value) > 0 Then
Shell "explorer.exe """ & Target.Value & """", vbNormalFocus
Cancel = True
End If
End Sub
Déposer les documents de départ. C'est l'étape suivante, et la plus rentable : copier dans chaque dossier neuf un devis, un contrat ou une fiche déjà au nom du client. Elle est traitée dans le guide remplir un document Word depuis Excel.
Un .xlsm téléchargé ou reçu par courriel arrive bloqué par
Windows. Il faut faire clic droit → Propriétés → Débloquer avant de pouvoir activer
les macros. Sur un fichier que vous diffusez à des collègues, prévenez-les : sans ce geste,
le ruban et les boutons resteront inertes, sans explication.
La solution complète et sécurisée sans code
L'ébauche ci-dessus donne une idée du fonctionnement théorique. Mais transformer ce script minimaliste en un outil d'entreprise utilisable par toute une équipe demande un investissement disproportionné : il faut un aperçu avant écriture, des sauvegardes, un mode de reprise si un dossier existe déjà, la gestion des caractères interdits et des accents, le respect des synchronisations OneDrive, un diagnostic en cas de blocage — et quelqu'un pour maintenir tout ça.
C'est exactement le périmètre du module DossiersLocaux. Tout est prêt à l'emploi, fini et éprouvé : aperçu du chemin exact avant la moindre écriture, complétion non destructive sans rien écraser, remplissage automatique des documents types dans vos sous-dossiers, le tout accessible directement depuis un ruban Excel ergonomique.
Et si vous ne voulez pas le maintenir vous-même
Le module qui fait tout ce qui précède, fini et éprouvé : aperçu du chemin avant écriture, complétion sans rien écraser, documents types remplis au nom du client, mise à jour en marques de révision quand le modèle change. Code VBA livré ouvert.
Découvrir DossiersLocaux — 19 € à vie → Licence à vie, sans abonnement · Remboursé 30 jours · Windows + Excel 2016 ou plus récentQuestions fréquentes
Faut-il activer les macros pour que cela fonctionne ?
Oui. Le classeur doit être enregistré en .xlsm et les macros autorisées à l'ouverture. Si le fichier vient d'Internet ou d'une pièce jointe, Windows le marque en plus comme bloqué : faites clic droit sur le fichier, Propriétés, puis cochez Débloquer avant de l'ouvrir.
La macro fonctionne-t-elle sur Mac ?
Partiellement. MkDir et Dir existent dans Excel pour Mac, mais la syntaxe des chemins diffère (deux-points ou barre oblique selon les versions), Shell "explorer.exe" n'a pas d'équivalent, et l'accès au disque passe par les autorisations du bac à sable. Le code de ce guide est écrit pour Excel sur Windows.
Comment créer les dossiers sur un lecteur réseau ?
Indiquez le chemin UNC complet en B1, par exemple \\serveur\partage\Clients, plutôt qu'une lettre de lecteur mappée : la lettre peut être différente d'un poste à l'autre, le chemin UNC est le même pour tout le monde. Vérifiez que le compte Windows dispose du droit d'écriture.
Peut-on supprimer ou renommer des dossiers avec la même méthode ?
Techniquement oui (RmDir, Name), mais c'est fortement déconseillé dans une macro de production. Une erreur de ligne, et vous effacez le dossier d'un client. Le code de ce guide ne supprime jamais rien : il crée ce qui manque, et laisse le reste intact.
Que se passe-t-il si deux lignes portent le même nom de client ?
Le deuxième passage retrouve le dossier existant, le compte comme « déjà présent » et le complète. Aucun doublon n'est créé et aucun fichier n'est écrasé. Si vous voulez vraiment deux dossiers distincts, ajoutez un identifiant au nom, par exemple le numéro d'affaire.