🚀The world's best VBA AI has evolved. ExcelMaster is now an autonomous Agent.Read more →
Back to Blog

VBA Delete File dans Excel — Kill, FileSystemObject.DeleteFile, et pourquoi il n'y a aucune annulation

|

VBA Delete File dans Excel — Kill, FileSystemObject.DeleteFile, et pourquoi il n'y a aucune annulation

TL;DRKill path supprime un fichier définitivement. Il n'y a aucune Corbeille, aucune confirmation et aucune annulation — un Kill tient 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 — Kill est une suppression définitive, pas un « envoi à la Corbeille »
  • Pourquoi Kill lè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 Kill ne peut pas supprimer un dossier, et comment RmDir et DeleteFolder se partagent cette tâche
  • Quand FileSystemObject.DeleteFile avec son indicateur Force l'emporte sur Kill pour 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'appeler Kill.
  • error 70 — le fichier est ouvert, en lecture seule, ou verrouillé par un autre processus. Vous ne pouvez pas Kill un 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 Dir et faites un Debug.Print ou 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 & "\*.*" en Kill "\*.*" — 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 : Kill son contenu (ou les fichiers correspondants), puis RmDir le dossier.
  • fso.DeleteFolder path — la version FileSystemObject retire 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, comme Kill, 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'existenceIf Dir(path) <> "" Then Kill path, pour qu'un fichier absent reste sans effet au lieu d'un error 53.
  • Gérez le cas du verrouillage — enveloppez Kill dans un vrai gestionnaire On Error avec une vérification d'Err pour 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 boucle Dir.
  • Archivez avant de supprimer quoi que ce soit que vous pourriez vouloir récupérer — une FileCopy vers un dossier d'archive est peu coûteuse ; récupérer un fichier Killé 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