TL;DR —
MkDircrée un seul niveau de dossier, pas un chemin.MkDir "C:\A\B\C"lèveerror 76siC:\A\Bn'existe pas déjà, etMkDirsur un dossier qui existe déjà lèveerror 75— ce n'est pas une opération silencieuse sans effet. « Créer ce dossier » revient en réalité à « créer chaque niveau manquant, et seulement là où il est absent ».
Sub MakeReportsFolder()
MkDir "C:\Reports" ' fonctionne seulement si C:\ existe et C:\Reports N'existe PAS
MkDir "C:\Reports\2026\Q1" ' error 76 - le parent C:\Reports\2026 n'existe pas encore
End Sub
MkDir ressemble à l'instruction la plus simple de VBA — un mot-clé, un chemin. L'ennui, c'est qu'elle
fait bien moins que son nom ne le laisse croire. Elle ne crée pas un chemin ; elle crée un unique
répertoire dont le parent doit déjà être là. Et elle ne tolère pas un dossier qui existe déjà — elle
s'arrête sur une erreur. Les deux surprises viennent de la même racine : MkDir est une opération à un
seul niveau, et toute routine « créer un dossier » robuste se construit autour de cette limite.
Ce que vous allez apprendre
- Le modèle mental —
MkDircrée un seul niveau, pas un chemin - Pourquoi un chemin imbriqué lève
error 76, et pourquoiFileSystemObject.CreateFolderne récurse pas davantage - Pourquoi
MkDirsur un dossier existant lèveerror 75— et le test qui le transforme en un « garantir l'existence » sûr - La boucle protégée par un test d'existence qui crée un chemin complet, niveau par niveau
- Pourquoi un simple
MkDir "Reports"atterrit sousCurDir, et non dans le dossier de votre classeur - Le motif sûr « créer le dossier s'il n'existe pas » pour une macro sans surveillance
Le modèle mental : MkDir crée un seul niveau, pas un chemin
L'idée clé, c'est que MkDir crée une unique entrée de répertoire à l'intérieur d'un dossier qui doit
déjà exister. C'est l'exact équivalent de taper md à une invite de commande avec l'ancien
comportement non récursif : il ajoute un enfant à un parent, et il s'attend à ce que ce parent soit là.
MkDir "C:\Reports"— créeReportsà l'intérieur deC:\. Parfait, carC:\existe.MkDir "C:\Reports\2026"— crée2026à l'intérieur deC:\Reports. Fonctionne seulement siC:\Reportsexiste déjà.MkDir "C:\Reports\2026\Q1"— exige queC:\Reports\2026existe d'abord, sinon il échoue.
Dès que vous voyez MkDir comme « ajouter un enfant à un parent existant », ses deux erreurs célèbres
cessent de surprendre — ce ne sont que les deux façons de violer cette hypothèse : le parent est absent, ou
l'enfant est déjà là.
Erreur 76 : MkDir ne peut pas créer un chemin imbriqué (et CreateFolder non plus)
Pointez MkDir sur un chemin de plus d'un niveau, où un dossier intermédiaire est absent, et il s'arrête :
MkDir "C:\Reports\2026\Q1" ' error 76 - "Path not found" si C:\Reports\2026 est absent
Le correctif répandu — « il suffit d'utiliser le FileSystemObject » — ne résout pas cela.
CreateFolder est lui aussi une opération à un seul niveau ; il lève « Path not found » pour un parent
absent exactement comme MkDir :
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
fso.CreateFolder "C:\Reports\2026\Q1" ' echoue aussi si C:\Reports\2026 n'existe pas
Aucun des deux intégrés ne crée les dossiers intermédiaires à votre place. Construire un chemin profond
est donc intrinsèquement une boucle : découpez le chemin sur le séparateur et créez chaque niveau du haut
vers le bas, en sautant ceux qui existent déjà. Il n'existe aucun appel unique en VBA intégré qui fasse un
mkdir -p ; c'est vous qui l'écrivez. La boucle tient en quelques lignes (ci-dessous), et une fois que vous
l'avez, la création imbriquée est un problème résolu.
Erreur 75 : MkDir sur un dossier existant n'est pas une opération neutre
La seconde surprise, c'est que MkDir échoue quand le dossier existe déjà — il ne réussit pas
discrètement :
MkDir "C:\Reports" ' premiere execution : le cree
MkDir "C:\Reports" ' seconde execution : error 75 - "Path/File access error"
Voilà pourquoi une macro qui « a marché une fois » plante à sa seconde exécution. MkDir n'est pas
idempotent, donc l'appeler sans condition est un bug. Le correctif est de vérifier d'abord, avec la forme de
Dir qui reconnaît les dossiers ou avec FolderExists :
If Dir("C:\Reports", vbDirectory) = "" Then MkDir "C:\Reports" ' creer seulement si absent
L'indicateur vbDirectory fait que Dir reconnaît les dossiers, si
bien que Dir(path, vbDirectory) = "" signifie « ce dossier n'existe pas ». Enveloppez MkDir dans ce test
et l'instruction devient un garantir-l'existence sûr : elle crée le dossier la première fois et ne fait
rien à chaque exécution suivante. L'alternative plus propre est fso.FolderExists(path), qui se lit sans
ambiguïté et ne touche jamais au curseur partagé de Dir décrit dans le guide Dir.
Le motif : créer un chemin complet, niveau par niveau
En réunissant les deux limites, voici la routine qui crée de façon fiable un chemin imbriqué — le
mkdir -p que VBA ne vous donne pas. Elle parcourt le chemin depuis la racine, en créant chaque niveau
manquant :
Sub EnsurePath(ByVal fullPath As String)
Dim parts() As String, build As String, i As Long
parts = Split(fullPath, "\")
build = parts(0) ' le lecteur, ex. "C:"
For i = 1 To UBound(parts)
build = build & "\" & parts(i)
If Dir(build, vbDirectory) = "" Then MkDir build ' creer ce niveau s'il est absent
Next i
End Sub
Appelez EnsurePath "C:\Reports\2026\Q1" et il crée Reports, puis 2026, puis Q1, en sautant ceux qui
existent déjà et sans jamais lever error 75 ni 76. C'est la forme que prend presque tout assistant
« créer un dossier » de production, car les deux intégrés l'imposent. La boucle
For et le Split font le parcours ; le
garde-fou Dir(..., vbDirectory) assure la sûreté.
Pourquoi un simple nom de dossier atterrit au mauvais endroit
MkDir accepte un chemin relatif — un nom sans lecteur ni \ initial — et c'est là que se niche un bug
subtil :
MkDir "Reports" ' ou cela va-t-il ? PAS forcement a cote de votre classeur
Un chemin relatif est résolu par rapport à CurDir, le répertoire de travail courant d'Excel — qui
n'est généralement pas le dossier où votre classeur est enregistré, et qui change chaque fois qu'une boîte
de dialogue Ouvrir un fichier pointe vers un nouvel endroit. Ainsi MkDir "Reports" peut créer le dossier
dans Documents un jour et ailleurs le lendemain. L'habitude fiable est de construire un chemin absolu à
partir de ThisWorkbook.Path :
MkDir ThisWorkbook.Path & "\Reports" ' toujours a cote de ce classeur
C'est tout le sujet du guide CurDir : les chemins relatifs dans MkDir,
RmDir, et les ouvertures de fichier se résolvent tous par rapport à un répertoire de
travail que vous ne contrôlez pas, alors ancrez plutôt chaque chemin à ThisWorkbook.Path.
Le verdict honnête : un seul niveau, protégé, absolu
MkDir est le bon outil pour créer un dossier — à condition de respecter ce qu'il fait réellement. Quatre
règles :
- Il crée un seul niveau → un chemin imbriqué exige une boucle niveau par niveau ; ni
MkDirniCreateFolderne fait demkdir -p. - Il n'est pas idempotent → protégez avec
If Dir(path, vbDirectory) = "" Then(ouFolderExists), sinon il lèveerror 75à la seconde exécution. - Un parent absent, c'est
error 76→ construisez depuis la racine vers le bas, pas depuis la feuille. - Un nom relatif suit
CurDir→ construisez des chemins absolus à partir deThisWorkbook.Pathpour que le dossier atterrisse toujours là où vous l'attendez.
À l'instant où vous écrivez MkDir deux fois dans un script — une fois pour créer, une fois « au cas où » —
remplacez les deux par la boucle protégée. Ce seul assistant élimine error 75, error 76 et le bug du
mauvais dossier d'un seul coup.
Comment ExcelMaster aide
Créer un dossier en toute sécurité, c'est se souvenir que MkDir ne crée qu'un seul niveau, qu'il
lève une erreur si le parent est absent (76) ou si le dossier existe déjà (75), et qu'un simple nom
suit CurDir plutôt que votre classeur — quatre pièges autour d'une instruction qui semble ne devoir que
créer un dossier.
ExcelMaster écrit la routine de création
de dossier qui ne calera pas. Décrivez la tâche — « enregistre chaque rapport dans un sous-dossier daté »,
ou « construis l'arborescence de sortie si elle n'est pas là » — et il produit la boucle protégée par un
test d'existence, niveau par niveau, ancrée à ThisWorkbook.Path, si bien que le
chemin est créé une fois et ne lève jamais error 75 à une réexécution. Vous décrivez le dossier que vous
voulez ; il écrit le code qui crée chaque niveau manquant et saute le reste.
Questions fréquentes
Comment créer un dossier en VBA ?
Utilisez l'instruction MkDir avec un chemin complet : MkDir "C:\Reports". Elle crée un niveau de dossier
à l'intérieur d'un parent qui doit déjà exister. Protégez-la pour qu'elle n'échoue pas à une réexécution —
If Dir("C:\Reports", vbDirectory) = "" Then MkDir "C:\Reports" — car MkDir lève error 75 si le dossier
existe déjà au lieu de ne rien faire.
Pourquoi VBA MkDir donne-t-il l'erreur 76 Path not found ?
Parce que MkDir ne crée qu'un seul niveau et que le dossier parent de votre chemin n'existe pas.
MkDir "C:\Reports\2026\Q1" échoue avec error 76 si C:\Reports\2026 est absent. MkDir ne crée pas les
dossiers intermédiaires, et FileSystemObject.CreateFolder non plus. Pour construire un chemin profond,
créez chaque niveau depuis la racine vers le bas dans une boucle, en vérifiant Dir(level, vbDirectory)
avant chaque MkDir.
Comment créer un dossier seulement s'il n'existe pas déjà ?
Vérifiez d'abord avec l'indicateur vbDirectory : If Dir("C:\Reports", vbDirectory) = "" Then MkDir "C:\Reports". Dir(path, vbDirectory) renvoie le nom du dossier quand il existe et une chaîne vide sinon,
si bien que le MkDir ne s'exécute que lorsque le dossier est absent. L'alternative plus claire est
fso.FolderExists(path) du FileSystemObject, qui se lit sans ambiguïté et ne perturbe pas le curseur
Dir.
Comment créer des dossiers imbriqués en une seule fois en VBA ?
Il n'existe aucun appel mkdir -p unique en VBA intégré — MkDir et FileSystemObject.CreateFolder créent
tous deux un seul niveau. Découpez le chemin sur "\" et créez chaque niveau du haut vers le bas : partez du
lecteur, ajoutez un segment à la fois, et faites MkDir sur chaque segment que Dir(build, vbDirectory)
signale comme absent. Cette boucle crée Reports, puis 2026, puis Q1, en sautant ceux qui existent déjà.
Où MkDir crée-t-il un dossier quand j'utilise un chemin relatif ?
Un chemin relatif tel que MkDir "Reports" est résolu par rapport à CurDir, le répertoire de travail
courant d'Excel — qui n'est généralement pas le dossier de votre classeur et peut changer quand une
boîte de dialogue Ouvrir un fichier pointe ailleurs. Pour créer le dossier à côté de votre classeur à chaque
fois, construisez un chemin absolu : MkDir ThisWorkbook.Path & "\Reports".
Testé dans
Testé dans : Excel 365 (Windows 11), VBA 7.1 — vérifié le 23/08/2026.
Guides associés : VBA RmDir · VBA CurDir · VBA Check If File Exists · VBA Dir · VBA FileSystemObject
