TL;DR —
Kill pathsupprime un fichier définitivement. Il n'y a aucune Corbeille, aucune confirmation et aucune annulation — unKilltient plus du broyeur que du glisser-un-fichier-vers-la-poubelle. Il lève aussi une erreur au lieu de ne rien faire si le fichier est absent ou ouvert, alors le motif sûr vérifie toujours d'abord :
Sub DeleteTempFile()
Dim path As String
path = "C:\Reports\~temp.xlsx"
If Dir(path) <> "" Then Kill path ' ne Kill que ce qui existe vraiment - et c'est perdu pour de bon
End Sub
Après qu'une macro a copié ou traité ses fichiers, la dernière étape consiste souvent à faire le ménage —
supprimer le fichier temporaire, vider les exports d'hier. Kill est l'instruction intégrée qui le fait, et
elle est véritablement dangereuse d'une manière que FileCopy n'est pas : il n'y a aucun moyen de récupérer
le fichier. Tout ce qu'il vaut la peine de savoir sur Kill est une règle pour rester du bon côté de cette
porte à sens unique.
Ce que vous allez apprendre
- Le modèle mental —
Killest une suppression définitive, pas un « envoi à la Corbeille » - Pourquoi
Killlève une erreur sur un fichier absent ou ouvert au lieu de rester silencieusement sans effet - Comment un caractère générique supprime beaucoup de fichiers d'un coup — puissant, et impitoyable envers les fautes de frappe
- Pourquoi
Killne peut pas supprimer un dossier, et commentRmDiretDeleteFolderse partagent cette tâche - Quand
FileSystemObject.DeleteFileavec son indicateur Force l'emporte surKillpour les fichiers en lecture seule - Le motif de suppression sûr — vérifier, puis supprimer, et archiver d'abord en cas de doute
Le modèle mental : Kill est définitif, pas la Corbeille
La chose la plus importante à propos de Kill est ce qu'il ne fait pas : il ne déplace pas le fichier
vers la Corbeille. Quand vous supprimez un fichier dans l'Explorateur de fichiers, Windows garde
discrètement une copie que vous pouvez restaurer. Kill contourne tout cela. Le fichier est délié du disque
immédiatement et il n'existe aucun moyen pris en charge de le récupérer depuis VBA.
Traitez Kill comme un administrateur Unix traite rm — comme une opération irréversible que vous pointez
avec soin et déclenchez délibérément. Ce cadrage guide chaque règle ci-dessous. Si un fichier pourrait
encore être nécessaire, le bon geste n'est pas un Kill plus malin ; c'est de
le copier dans une archive avant de supprimer l'original.
Kill lève une erreur sur un fichier absent ou ouvert — il ne reste pas sans effet
Un nombre surprenant de gens supposent que Kill sur un fichier inexistant ne fait tout simplement rien. Ce
n'est pas le cas — il lève une erreur d'exécution :
Kill "C:\Reports\does-not-exist.xlsx" ' error 53 - "File not found"
Kill "C:\Reports\open-book.xlsx" ' error 70 - "Permission denied" (fichier ouvert/verrouille)
error 53— le fichier n'est pas là. Protégez avec un test d'existence avant d'appelerKill.error 70— le fichier est ouvert, en lecture seule, ou verrouillé par un autre processus. Vous ne pouvez pasKillun classeur ouvert dans Excel ;Close-le d'abord.
La suppression canonique est donc une protection en deux temps : testez que le fichier existe avec
Dir(path) <> "" pour le cas courant « pas là », et enveloppez l'appel
dans On Error pour le cas plus rare du verrouillage — parce qu'un fichier peut passer le test d'existence
et être malgré tout verrouillé une milliseconde plus tard :
If Dir(path) <> "" Then
On Error Resume Next ' gerer explicitement le cas du fichier verrouille
Kill path
If Err.Number <> 0 Then MsgBox "Could not delete: " & path & " (" & Err.Description & ")"
On Error GoTo 0
End If
Notez la différence avec la copie : ici, On Error est un gestionnaire délibéré pour une défaillance
connue et rare, pas un suppresseur global. Envelopper aveuglément chaque Kill dans On Error Resume Next
sans vérifier Err, voilà comment le ménage cesse discrètement de se faire.
Les caractères génériques suppriment beaucoup de fichiers d'un coup — sans invite
Kill accepte les mêmes caractères génériques * et ? que Dir, et il les applique à
chaque correspondance en une seule instruction :
Kill "C:\Reports\Temp\*.tmp" ' supprime CHAQUE .tmp de ce dossier - sans invite, sans annulation
C'est énormément utile pour le ménage et véritablement dangereux. Il n'y a aucune confirmation, si bien
qu'une faute de frappe dans le motif — *.xls* alors que vous vouliez *.tmp, ou le mauvais dossier — efface
bien plus que prévu, instantanément et définitivement. Deux habitudes de sûreté :
- Lisez avant de supprimer. Si le motif est le moindrement dynamique, parcourez-le d'abord avec
Diret faites unDebug.Printou journalisez chaque nom qui serait supprimé, puis supprimez lors d'un second passage. - Ne construisez jamais le chemin à partir d'une entrée non vérifiée. Une variable vide transforme
Kill folder & "\*.*"enKill "\*.*"— pointé sur un endroit entièrement erroné.
Une subtilité avec les caractères génériques et les boucles : vous ne pouvez pas faire tourner en sécurité
une énumération Dir et Kill les correspondances dans la même boucle, car supprimer des fichiers mute le
dossier que le curseur Dir est en train de parcourir. Rassemblez d'abord les noms dans un tableau, puis
supprimez — le motif en deux passes du guide Dir.
Kill supprime des fichiers, pas des dossiers — RmDir et DeleteFolder
Kill retire des fichiers. Pointez-le sur un dossier et vous obtenez error 5 (appel de procédure non
valide). Les dossiers relèvent d'un autre jeu d'outils, qui se partage selon que le dossier est vide :
RmDir path— retire un dossier vide uniquement. Si quoi que ce soit s'y trouve encore,error 75. La façon intégrée de supprimer un dossier est donc :Killson contenu (ou les fichiers correspondants), puisRmDirle dossier.fso.DeleteFolder path— la versionFileSystemObjectretire un dossier et tout ce qu'il contient, récursivement, en un seul appel. C'est l'outil quand vous devez effacer une arborescence entière — et, commeKill, il n'utilise pas la Corbeille.
Confondre ces éléments est fréquent : les gens essaient Kill "C:\OldExports" pour retirer un dossier et
sont surpris par l'erreur. Les fichiers utilisent Kill ; les dossiers vides utilisent RmDir ; les
arborescences pleines utilisent fso.DeleteFolder.
FileSystemObject.DeleteFile : l'indicateur Force pour les fichiers en lecture seule
Kill refuse de supprimer un fichier en lecture seule — il lève error 70, la même erreur de permission
qu'un fichier ouvert. Le FileSystemObject vous donne un outil plus propre
avec un contournement explicite :
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject") ' liaison tardive - tourne sur toute machine
If fso.FileExists(path) Then fso.DeleteFile path, True ' Force:=True supprime aussi les fichiers en lecture seule
DeleteFile s'associe aussi à fso.FileExists pour une vérification d'existence sans état qui ne perturbe
jamais une boucle Dir, et il accepte les caractères génériques comme Kill. Tournez-vous vers lui quand
vous utilisez déjà le FileSystemObject pour le reste de la tâche, ou précisément quand des fichiers en
lecture seule sont en jeu — mais respectez le fait que Force:=True est plus dangereux que Kill, pas
moins : il supprime des fichiers que quelqu'un a délibérément protégés.
Le verdict honnête : vérifiez, puis supprimez — et archivez en cas de doute
Kill est le bon outil pour le ménage, et il exige plus de respect que toute autre instruction de fichier
précisément parce qu'il ne peut pas être annulé. Quatre règles :
- Protégez l'existence —
If Dir(path) <> "" Then Kill path, pour qu'un fichier absent reste sans effet au lieu d'unerror 53. - Gérez le cas du verrouillage — enveloppez
Killdans un vrai gestionnaireOn Erroravec une vérification d'Errpour le fichier ouvert ou en lecture seule ; ne supprimez pas globalement. - Traitez les caractères génériques comme des munitions réelles — lisez (ou journalisez) les
correspondances avant un
Kill *.*dynamique, et rassemblez-puis-supprimez plutôt que de supprimer au sein d'une boucleDir. - Archivez avant de supprimer quoi que ce soit que vous pourriez vouloir récupérer — une
FileCopyvers un dossier d'archive est peu coûteuse ; récupérer un fichierKillé est impossible.
Quand vous n'êtes pas certain qu'un fichier soit jetable, ne le supprimez pas — copiez-le à part d'abord.
Kill n'a aucune annulation, donc c'est vous l'annulation.
Comment ExcelMaster aide
Supprimer des fichiers en sécurité signifie protéger l'existence, gérer le cas du fichier verrouillé sans
faire taire les vraies erreurs, respecter les caractères génériques qui effacent beaucoup de fichiers d'un
coup, et savoir que les dossiers ont besoin de RmDir ou DeleteFolder plutôt que de Kill — beaucoup de
prudence à envelopper autour d'une seule instruction irréversible.
ExcelMaster écrit la version sûre.
Décrivez le ménage — « supprime chaque fichier temporaire de ce dossier après l'export » ou « retire le
dossier d'archive du mois dernier » — et il produit le Kill protégé avec la vérification d'existence et le
gestionnaire d'erreurs, la boucle rassembler-puis-supprimer quand les fichiers sont énumérés, la répartition
RmDir/DeleteFolder pour les dossiers, et une copie d'archive d'abord quand les
fichiers pourraient encore être nécessaires. Vous décrivez le résultat ; il empêche la porte à sens unique de
se refermer sur vous.
Questions fréquentes
Comment supprimer un fichier en VBA ?
Utilisez l'instruction intégrée Kill path — par exemple Kill "C:\Reports\temp.xlsx". Protégez-la d'abord
avec un test d'existence, If Dir(path) <> "" Then Kill path, car Kill lève error 53 sur un fichier qui
n'existe pas au lieu de ne rien faire. Rappelez-vous que Kill supprime définitivement — aucune
Corbeille et aucune annulation — alors copiez tout ce dont vous pourriez avoir besoin dans une archive avant
de le supprimer.
VBA Kill déplace-t-il le fichier vers la Corbeille ?
Non. Kill supprime le fichier immédiatement et définitivement ; il ne va pas à la Corbeille et il
n'existe aucun moyen pris en charge de le récupérer depuis VBA. C'est différent de la suppression dans
l'Explorateur de fichiers, qui garde une copie restaurable. Si vous avez besoin d'un comportement de
corbeille, vous devez appeler l'API Windows Shell — sinon, traitez chaque Kill comme définitif et archivez
d'abord en cas de doute.
Pourquoi VBA Kill donne-t-il l'erreur 70 ou l'erreur 53 ?
error 53 (File not found) signifie que le fichier n'existe pas — protégez avec If Dir(path) <> "" Then
avant de Kill. error 70 (Permission denied) signifie que le fichier est ouvert, en lecture seule, ou
verrouillé par un autre processus — fermez d'abord tout classeur ouvert, et pour les fichiers en lecture
seule utilisez fso.DeleteFile path, True avec l'indicateur Force. Kill lève une erreur dans ces cas au
lieu de ne rien faire en silence.
Comment supprimer plusieurs fichiers avec un caractère générique en VBA ?
Kill accepte les caractères génériques, si bien que Kill "C:\Temp\*.tmp" supprime chaque fichier .tmp
de ce dossier en une instruction — sans invite et sans annulation. Comme il n'y a aucune confirmation,
journalisez les correspondances avec une boucle Dir d'abord si le motif est dynamique, et ne supprimez
jamais au sein d'une boucle Dir (rassemblez les noms dans un tableau, puis supprimez) puisque la
suppression mute le dossier que le curseur est en train de parcourir.
Comment supprimer un dossier en VBA ?
Kill supprime des fichiers, pas des dossiers. Pour retirer un dossier vide, utilisez RmDir path ;
s'il a encore du contenu, Kill ce contenu d'abord, puis RmDir. Pour supprimer un dossier et tout ce
qu'il contient en un seul appel, utilisez le FileSystemObject : fso.DeleteFolder path, qui retire toute
l'arborescence récursivement. Comme Kill, ni l'un ni l'autre n'utilise la Corbeille.
Testé dans
Testé dans : Excel 365 (Windows 11), VBA 7.1 — vérifié le 22/08/2026.
Guides associés : VBA Copy File · VBA Rename File · VBA Check If File Exists · VBA Dir · VBA FileSystemObject
