TL;DR —
RmDirsupprime un dossier seulement lorsqu'il est vide. Pointez-le sur un dossier qui contient encore des fichiers ou des sous-dossiers et il lèveerror 75— l'exact opposé deKill, qui supprime n'importe quel fichier sans demander. « Supprimer ce dossier » revient en réalité à « le vider d'abord, puis le retirer ».
Sub RemoveTempFolder()
RmDir "C:\Temp\Empty" ' fonctionne seulement si C:\Temp\Empty ne contient rien
RmDir "C:\Temp\Reports" ' error 75 si Reports contient encore un fichier ou sous-dossier
End Sub
RmDir est le reflet inverse de Kill. Là où Kill déchiquette les fichiers sans confirmation ni
annulation, RmDir est pointilleux dans la direction opposée : il refuse de toucher à un dossier qui
contient encore quoi que ce soit. Ce refus est une fonction de sûreté — vous ne pouvez pas effacer un
dossier plein par accident — mais cela signifie que la demande quotidienne « supprime ce dossier et tout ce
qu'il contient » n'est pas une seule instruction. C'est une petite routine, et savoir pourquoi est tout le
sujet.
Ce que vous allez apprendre
- Le modèle mental —
RmDirne retire qu'un dossier vide, l'inverse deKill - Pourquoi un dossier non vide lève
error 75, et pourquoi c'est une fonction de sûreté - Pourquoi
RmDirsupprime les dossiers, jamais les fichiers — etKillest son opposé pour les fichiers - Comment vider un dossier (
Killsur les fichiers) avantRmDir, et comment les sous-dossiers imposent la récursion - Quand recourir à
FileSystemObject.DeleteFolder— un seul appel, l'arborescence entière, aucune annulation - Le motif de suppression protégé qui ne calera pas une macro sans surveillance
Le modèle mental : RmDir ne retire qu'un dossier vide
L'idée clé, c'est que RmDir supprime l'entrée du dossier, pas son contenu. Il ne retirera un
répertoire que lorsqu'il n'y reste plus rien — aucun fichier, aucun sous-dossier. Alignez cela sur
Kill et les deux forment une paire nette :
Killsupprime les fichiers, n'importe quel fichier, immédiatement, sans corbeille.RmDirsupprime les dossiers, mais seulement les vides, refusant tout ce qui a un contenu.
Ainsi, les deux instructions de suppression de VBA sont délibérément étroites : l'une pour les seuls fichiers, l'autre pour les seuls dossiers vides. Aucune ne fait ce que les gens tapent réellement dans une barre de recherche — « supprimer un dossier et tout ce qu'il contient » — parce que c'est là l'opération dangereuse, et les intégrés vous obligent à l'assembler vous-même.
Erreur 75 : RmDir refuse un dossier non vide
Visez avec RmDir un dossier qui contient encore des fichiers ou des sous-dossiers et il s'arrête :
RmDir "C:\Temp\Reports" ' error 75 - "Path/File access error" si Reports n'est pas vide
C'est le comportement qui le définit, et il est intentionnel. RmDir ne laissera pas une seule ligne
détruire en silence un dossier plein de travail. Comparez-le à son homologue pour sentir l'asymétrie :
Kill "C:\Temp\*.xlsx" efface chaque fichier correspondant sans avertissement, tandis que
RmDir "C:\Temp" sur le même dossier refuse catégoriquement. Une instruction n'est que danger ; l'autre
n'est que prudence. Pour retirer un dossier peuplé, vous devez le vider d'abord.
Videz-le d'abord : Kill sur les fichiers, puis RmDir
Le motif en deux temps consiste à supprimer les fichiers du dossier avec
Kill, puis à retirer le dossier désormais vide avec RmDir :
Kill "C:\Temp\Reports\*.*" ' supprime chaque fichier du dossier (definitif - aucune annulation)
RmDir "C:\Temp\Reports" ' le dossier est desormais vide, donc ceci reussit
Cela fonctionne quand le dossier ne contient que des fichiers. S'il contient aussi des
sous-dossiers, Kill ne peut rien — Kill supprime les fichiers, jamais les dossiers — et chaque
sous-dossier doit lui-même être vidé et retiré. Une arborescence de dossiers exige donc la récursion :
descendez jusqu'au niveau le plus profond, faites Kill sur ses fichiers, RmDir dessus, et remontez.
Comme Kill sur *.* est définitif, ne faites cela que lorsque vous êtes
certain que le contenu est jetable, et journalisez ce que vous vous apprêtez à supprimer avant de le
supprimer.
FileSystemObject.DeleteFolder : un seul appel, l'arborescence entière, aucune annulation
Quand vous voulez vraiment « le dossier et tout ce qu'il contient, disparus », le FileSystemObject
possède l'appel unique que RmDir refuse d'être :
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject") ' liaison tardive - tourne sur toute machine
fso.DeleteFolder "C:\Temp\Reports" ' supprime le dossier ET tout son contenu
DeleteFolder retire le dossier, ses fichiers et chaque sous-dossier d'un seul coup — aucun vidage manuel,
aucune récursion à écrire. Cette puissance est aussi le danger : comme Kill,
il contourne la corbeille et il n'y a aucune annulation. Il accepte les caractères génériques dans le
dernier élément du chemin, et un second argument True force la suppression des fichiers en lecture seule.
Traitez fso.DeleteFolder comme des munitions réelles — protégez-le exactement aussi fermement que vous
protégeriez Kill, et ne le pointez jamais sur un chemin fourni par l'utilisateur sans vérification.
L'autre erreur : RmDir sur un dossier absent
La seconde erreur d'exécution est le cas du dossier absent, et elle ne correspond pas au numéro de
Kill :
RmDir "C:\Temp\Gone" ' error 76 - "Path not found" si le dossier n'existe pas
error 76— le dossier n'est pas là. Protégez avecIf Dir(path, vbDirectory) <> "" Thenavant de retirer, si bien qu'un dossier déjà disparu est traité comme une réussite, pas comme un plantage.error 75— le dossier n'est pas vide (ou est en cours d'utilisation / en lecture seule). Videz-le d'abord, ou utilisezfso.DeleteFolder.
Notez la différence avec Kill, qui lève error 53 sur un fichier absent ;
RmDir sur un dossier absent lève error 76. Même idée, numéro différent, parce que l'un travaille sur
les fichiers et l'autre sur les dossiers — la vérification d'existence
utilise l'indicateur vbDirectory pour les dossiers.
Le motif de suppression sûr pour une macro sans surveillance
En réunissant les gardes-fous, la suppression de dossier qui ne calera pas une exécution planifiée :
Sub SafeRemoveFolder(ByVal folder As String)
If Dir(folder, vbDirectory) = "" Then Exit Sub ' deja disparu - rien a faire
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
fso.DeleteFolder folder ' dossier + tout le contenu, en un seul appel
End Sub
Le garde-fou Dir(folder, vbDirectory) absorbe le cas courant « il n'est pas là » si bien que error 76 ne
se déclenche jamais, et fso.DeleteFolder gère un dossier peuplé sans récursion écrite à la main. Si vous
voulez spécifiquement le comportement sûr — refuser de supprimer quoi que ce soit de non vide — gardez
RmDir et laissez error 75 être votre ceinture de sécurité. Choisissez l'outil selon le degré de
protection que vous voulez pour le contenu.
Le verdict honnête : RmDir pour le vide, DeleteFolder pour l'arborescence
RmDir est le bon outil pour retirer un dossier que vous savez vide ; tout le reste est une décision sur le
degré de sûreté que vous voulez. Quatre règles :
- Dossier vide →
RmDir path— une seule instruction, et il refuse (error 75) si vous vous êtes trompé sur son caractère vide. - Dossier de fichiers →
Killsur les fichiers d'abord, puisRmDirsur la coquille vide. - Arborescence de dossiers, contenu jetable →
fso.DeleteFolder— un seul appel, mais traitez-le commeKill: sans corbeille, sans annulation. - Protégez l'existence →
If Dir(path, vbDirectory) <> "" Thenpour qu'un dossier absent soit une opération neutre, paserror 76.
À l'instant où vous vous surprenez à recourir à On Error Resume Next pour que RmDir « marche tout seul »,
arrêtez — cette erreur vous dit que le dossier n'est pas vide, et le correctif est de décider,
délibérément, si son contenu doit survivre.
Comment ExcelMaster aide
Supprimer un dossier en toute sécurité, c'est savoir que RmDir ne retire qu'un dossier vide
(error 75 sinon), qu'il supprime les dossiers mais jamais les fichiers, qu'un dossier absent est
error 76 et non 53, et que fso.DeleteFolder est l'appel unique qui efface une arborescence entière —
sans annulation.
ExcelMaster écrit la suppression qui
correspond à votre intention. Décrivez la tâche — « retire le dossier temporaire après chaque exécution »,
ou « vide l'arborescence d'export du mois dernier » — et il produit le bon code : RmDir avec un garde-fou
d'existence pour un dossier vide, une passe Kill-puis-RmDir quand il contient
des fichiers, ou un fso.DeleteFolder protégé quand toute l'arborescence doit disparaître. Vous décrivez ce
qui doit rester ; il choisit l'outil qui le laisse.
Questions fréquentes
Comment supprimer un dossier en VBA ?
Utilisez l'instruction RmDir : RmDir "C:\Temp\Old". Elle retire le dossier, mais seulement si le
dossier est vide — un dossier qui contient encore des fichiers ou des sous-dossiers lève error 75.
Protégez-la d'abord avec une vérification d'existence — If Dir("C:\Temp\Old", vbDirectory) <> "" Then RmDir "C:\Temp\Old" — pour qu'un dossier déjà disparu ne lève pas error 76.
Pourquoi VBA RmDir donne-t-il l'erreur 75 ?
Parce que le dossier n'est pas vide. RmDir ne supprime qu'un dossier vide ; s'il contient encore le
moindre fichier ou sous-dossier, il s'arrête sur error 75, « Path/File access error ». C'est une fonction
de sûreté qui empêche une seule ligne d'effacer un dossier plein. Pour retirer un dossier peuplé, supprimez
d'abord ses fichiers avec Kill, puis RmDir sur le dossier vide — ou utilisez
FileSystemObject.DeleteFolder, qui retire le dossier et tout son contenu en un seul appel.
Comment supprimer un dossier non vide en VBA ?
RmDir ne peut pas — il refuse un dossier non vide. Soit videz-le d'abord (Kill "C:\Temp\Old\*.*" pour
supprimer les fichiers, puis RmDir "C:\Temp\Old", en traitant les éventuels sous-dossiers de façon
récursive), soit utilisez le FileSystemObject : fso.DeleteFolder "C:\Temp\Old" supprime le dossier et
tout ce qu'il contient en un seul appel. DeleteFolder contourne la corbeille et ne peut pas être annulé,
alors protégez-le aussi soigneusement que vous le feriez pour Kill.
Quelle est la différence entre RmDir et Kill en VBA ?
Ils sont opposés. Kill supprime les fichiers — n'importe quel fichier, immédiatement, sans corbeille —
et lève error 53 sur un fichier absent. RmDir supprime les dossiers, mais seulement les vides,
levant error 75 sur un dossier non vide et error 76 sur un dossier absent. Kill ne supprime jamais un
dossier et RmDir ne supprime jamais un fichier, si bien que retirer un dossier plein de fichiers exige les
deux : Kill sur le contenu, puis RmDir sur la coquille.
RmDir déplace-t-il un dossier vers la corbeille ?
Non. RmDir supprime directement l'entrée du dossier — il n'y a ni corbeille ni annulation, exactement
comme Kill pour les fichiers. Il en va de même pour FileSystemObject.DeleteFolder. Comme aucun de ces
gestes ne peut être annulé, confirmez que le dossier est jetable avant de supprimer, et protégez le chemin
pour qu'une macro sans surveillance ne retire pas le mauvais répertoire.
Testé dans
Testé dans : Excel 365 (Windows 11), VBA 7.1 — vérifié le 23/08/2026.
Guides associés : VBA MkDir · VBA CurDir · VBA Delete File · VBA Check If File Exists · VBA FileSystemObject
