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

VBA Rename File dans Excel — l'instruction Name qui déplace aussi les fichiers (et refuse d'écraser)

|

VBA Rename File dans Excel — l'instruction Name qui déplace aussi les fichiers (et refuse d'écraser)

TL;DRName oldPath As newPath renomme un fichier — mais si newPath pointe sur un dossier différent, VBA déplace le fichier là-bas. Une seule instruction fait les deux tâches. Et contrairement à FileCopy, Name refuse d'écraser : si la cible existe déjà, il lève error 58 au lieu de la remplacer.

Sub RenameAndMove()
    Name "C:\Reports\draft.xlsx" As "C:\Reports\final.xlsx"    ' meme dossier -> un renommage
    Name "C:\Reports\final.xlsx" As "C:\Archive\final.xlsx"    ' dossier different -> un DEPLACEMENT
End Sub

Renommer et déplacer donnent l'impression d'être deux opérations différentes, alors la plupart des gens partent en quête de deux commandes différentes. VBA les replie en une seule instruction — Name — et la surprise n'est pas qu'elle renomme, mais que la même instruction déplace discrètement le fichier à l'instant où le dossier de destination diffère. Ajoutez son refus obstiné d'écraser, et Name se comporte à la différence de tout autre outil de disque en VBA. Apprenez ces deux traits et il devient prévisible.

Ce que vous allez apprendre

  • Le modèle mental — Name est renommer et déplacer en une seule instruction
  • Pourquoi Name refuse d'écraser avec error 58 — l'inverse de FileCopy
  • Pourquoi Name ne peut pas traverser les lecteurs, et comment FileCopy + Kill ou MoveFile accomplit cette tâche
  • Les autres erreurs — source absente (53), fichier ouvert (70) — et comment les protéger
  • Le piège de syntaxe Name old As new, et pourquoi il se lit bizarrement à côté de la propriété .Name
  • Quand préférer FileSystemObject.MoveFile, et le motif de renommage sûr pour les macros sans surveillance

Le modèle mental : renommer et déplacer sont la même instruction

L'idée clé, c'est que Name ne se soucie pas du concept de renommer par opposition à déplacer — il ne se soucie que de l'ancien chemin et du nouveau chemin. Il retire l'entrée de répertoire à l'ancien chemin et en crée une au nouveau chemin. Si la partie dossier est la même, cela se lit pour vous comme un renommage. Si la partie dossier diffère, le fichier se retrouve ailleurs — un déplacement :

  • Name "C:\In\a.xlsx" As "C:\In\b.xlsx" — même dossier, nouveau nom → renommage
  • Name "C:\In\a.xlsx" As "C:\Out\a.xlsx" — nouveau dossier, même nom → déplacement
  • Name "C:\In\a.xlsx" As "C:\Out\b.xlsx" — nouveau dossier et nouveau nom → déplacement et renommage d'un coup

Il n'y a aucune instruction « déplacer » distincte en VBA intégré — Name est le déplacement. Dès que vous le voyez comme « changer le chemin », chaque comportement ci-dessous en découle.

Name refuse d'écraser — l'inverse de FileCopy

Voici où Name se démarque du reste de la boîte à outils de disque. Si un fichier existe déjà au nouveau chemin, Name ne le remplacera pas — il s'arrête sur une erreur :

Name "C:\Reports\draft.xlsx" As "C:\Reports\final.xlsx"    ' error 58 - "File already exists"

Comparez les trois instructions intégrées et leurs réponses contradictoires à « et si la destination existe ? » :

  • Kill — supprime sans invite (la destination est le but).
  • FileCopyécrase la destination en silence.
  • Namerefuse et lève error 58.

C'est une fonction de sûreté : Name n'écrasera jamais un fichier existant par accident. Mais cela signifie aussi qu'une macro sans surveillance s'arrête à l'instant où le nom cible est déjà pris. Si vous comptez remplacer la cible, supprimez-la d'abord — et protégez cela par une vérification d'existence :

If Dir("C:\Reports\final.xlsx") <> "" Then Kill "C:\Reports\final.xlsx"   ' liberer la cible
Name "C:\Reports\draft.xlsx" As "C:\Reports\final.xlsx"                    ' desormais ca reussit

Ce test d'existence est de nouveau le vérifier-si-un-fichier-existe d'une ligne ; ici, c'est ce qui empêche un renommage planifié de s'arrêter sur error 58.

Name ne peut pas traverser les lecteurs — utilisez FileCopy + Kill ou MoveFile

Name déplace les fichiers à l'intérieur d'un lecteur en réécrivant une entrée de répertoire, ce qui est rapide et peu coûteux. Il ne peut pas déplacer un fichier vers un lecteur différent, car cela exige de copier physiquement les octets :

Name "C:\Reports\March.xlsx" As "D:\Archive\March.xlsx"    ' error 74 - "Can't rename with different drive"

Un déplacement inter-lecteurs est une copie plus une suppression — exactement l'identité du guide de copie de fichier :

FileCopy "C:\Reports\March.xlsx", "D:\Archive\March.xlsx"  ' copier les octets vers l'autre lecteur
Kill "C:\Reports\March.xlsx"                                ' puis supprimer l'original

Faites le Kill seulement après avoir confirmé que la copie est bien arrivée — cette suppression est définitive. Ou laissez le FileSystemObject faire les deux en un seul appel avec MoveFile, qui gère les déplacements inter-lecteurs en interne (traité plus bas).

Les autres erreurs : source absente et fichiers ouverts

Deux autres erreurs d'exécution complètent Name, et toutes deux ont les mêmes correctifs que le reste des instructions de fichier :

Name "C:\Reports\missing.xlsx" As "C:\Reports\x.xlsx"   ' error 53 - source introuvable
Name "C:\Reports\open.xlsx"    As "C:\Reports\x.xlsx"   ' error 70 - fichier ouvert/verrouille
  • error 53 — la source n'existe pas. Protégez avec If Dir(oldPath) <> "" Then avant de renommer.
  • error 70 — le fichier (ou sa cible) est ouvert. Vous ne pouvez pas renommer un classeur ouvert dans Excel ; Close-le d'abord, puis renommez le fichier sur le disque.

Un renommage robuste protège donc trois choses : la source existe, la cible n'existe pas (ou vient d'être supprimée), et le fichier n'est pas ouvert. C'est plus de soin qu'un renommage ne semble en exiger, mais c'est exactement ce qui empêche une macro sans surveillance de caler sur une erreur d'exécution sans boîte de dialogue.

Le piège de syntaxe : Name old As new, pas Name(old, new)

Name est une instruction, pas une fonction, et sa syntaxe est inhabituelle — les deux chemins sont joints par le mot-clé As, sans parenthèses ni virgule :

Name oldPath As newPath      ' correct - forme instruction avec le mot-cle As
Name(oldPath, newPath)       ' faux - Name ne fonctionne pas ainsi ; erreur de compilation/analyse

Elle se lit aussi de façon confuse parce que VBA utilise déjà .Name comme propriété partout dans le modèle objet (ws.Name, wb.Name). Le Name de renommage de fichier est une instruction de premier niveau, sans rapport avec ces propriétés ; voir Name x As y seul sur sa ligne est le signe qu'il s'agit de l'opération de fichier, pas d'une lecture de propriété.

FileSystemObject.MoveFile et le motif de renommage sûr

L'alternative modèle objet est MoveFile, et c'est souvent le choix le plus agréable pour les déplacements :

Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")     ' liaison tardive - tourne sur toute machine
fso.MoveFile "C:\Reports\March.xlsx", "D:\Archive\"      ' gere l'inter-lecteurs ; \ final = dans le dossier

MoveFile se déplace entre lecteurs sans copier-puis-supprimer manuel, accepte les caractères génériques, et prend une destination sous forme de dossier (\ final). Comme Name, il refuse d'écraser — la destination doit donc être libre d'abord. Pour un renommage pur sur place, il n'y a aucune méthode FSO dédiée ; Name reste l'outil le plus court, ou MoveFile avec un nouveau chemin complet dans le même dossier.

En mettant le tout ensemble, le renommage sûr qui ne calera pas une macro sans surveillance :

Dim src As String, dst As String
src = "C:\Reports\draft.xlsx": dst = "C:\Reports\final.xlsx"
If Dir(src) = "" Then Exit Sub               ' rien a renommer
If Dir(dst) <> "" Then Kill dst              ' liberer la cible pour que Name ne heurte pas error 58
Name src As dst                              ' renommage ou deplacement sur le meme lecteur

Le verdict honnête : Name pour le même lecteur, copier-plus-supprimer pour l'inter-lecteurs

Name est la réponse d'une ligne pour renommer et pour déplacer à l'intérieur d'un lecteur — à condition de respecter ses deux traits distinctifs. Quatre règles :

  • Renommage ou déplacement sur le même lecteurName old As new — toute la tâche en une seule instruction.
  • Il refuse d'écraser → libérez la cible d'abord (Kill après une vérification d'existence), ou il s'arrête sur error 58.
  • Déplacement inter-lecteursName ne peut pas ; utilisez FileCopy + Kill, ou fso.MoveFile.
  • Protégez la source, la cible et l'état ouvert → pour qu'un renommage planifié ne cale jamais sur error 53, 58, 70 ou 74.

À l'instant où vous voyez error 74, cessez d'essayer de faire traverser le lecteur à Name — c'est Windows qui vous dit qu'un déplacement entre volumes est une copie, et l'outil change en conséquence.

Comment ExcelMaster aide

Renommer un fichier en sécurité signifie se souvenir que Name déplace aussi, qu'il refuse d'écraser, qu'il ne peut pas traverser les lecteurs, et qu'il cale sur une source absente ou un fichier ouvert — quatre pièges distincts autour d'une instruction qui semble ne devoir que renommer.

ExcelMaster écrit le renommage qui ne calera pas. Décrivez la tâche — « renomme chaque export avec la date du jour », ou « déplace les fichiers terminés vers le lecteur d'archive » — et il produit l'instruction correcte : Name pour un renommage ou déplacement sur le même lecteur avec la protection libérer-la-cible, un FileCopy-plus-Kill ou fso.MoveFile quand la destination est sur un autre lecteur, et des vérifications d'existence pour que error 58 ou 74 n'arrête jamais une exécution sans surveillance. Vous décrivez le résultat ; il choisit entre renommage, déplacement et copie-plus-suppression pour vous.

Questions fréquentes

Comment renommer un fichier en VBA ?

Utilisez l'instruction Name avec le mot-clé As : Name "C:\In\old.xlsx" As "C:\In\new.xlsx". Elle renomme le fichier sur place quand les deux chemins sont dans le même dossier. Protégez-la d'abord — Name lève error 53 si la source est absente et error 58 si un fichier portant le nouveau nom existe déjà, alors vérifiez que la source existe et libérez la cible (avec Kill après un test d'existence) avant de renommer.

L'instruction VBA Name déplace-t-elle aussi les fichiers ?

Oui. Name change le chemin du fichier, si bien que si le nouveau chemin est dans un dossier différent, VBA déplace le fichier là-bas — Name "C:\In\a.xlsx" As "C:\Out\a.xlsx" déplace a.xlsx de In vers Out. Il n'y a aucune instruction de déplacement distincte en VBA intégré ; Name est le déplacement, tant que les deux dossiers sont sur le même lecteur. Pour un déplacement inter-lecteurs, utilisez FileCopy plus Kill, ou fso.MoveFile.

Pourquoi VBA Name donne-t-il l'erreur 58 File already exists ?

Parce qu'un fichier portant le nouveau nom existe déjà, et Name refuse d'écraser — l'inverse de FileCopy, qui écrase en silence. C'est une fonction de sûreté, mais elle arrête une macro sans surveillance. Pour remplacer la cible, supprimez-la d'abord : If Dir(newPath) <> "" Then Kill newPath, puis Name oldPath As newPath. Confirmez toujours que vous voulez réellement jeter le fichier existant avant de le Kill.

Comment déplacer un fichier vers un autre lecteur en VBA ?

Name ne peut pas traverser les lecteurs — Name "C:\a.xlsx" As "D:\a.xlsx" lève error 74, « Can't rename with different drive ». Un déplacement inter-lecteurs est une copie plus une suppression : FileCopy "C:\a.xlsx", "D:\a.xlsx" puis Kill "C:\a.xlsx" (seulement après avoir confirmé que la copie a réussi). Autrement, fso.MoveFile du FileSystemObject réalise un déplacement inter-lecteurs en un seul appel.

Quelle est la différence entre l'instruction Name et la propriété Name ?

Elles sont sans rapport. L'instruction Name renomme ou déplace un fichier sur le disque — Name oldPath As newPath, une instruction de premier niveau utilisant le mot-clé As. La propriété .Name lit ou définit le nom d'un objet dans le modèle Excel, comme ws.Name pour une feuille de calcul ou wb.Name pour un classeur. Voir Name x As y seul sur sa ligne est l'opération de fichier ; quelquechose.Name est la propriété.

Testé dans

Testé dans : Excel 365 (Windows 11), VBA 7.1 — vérifié le 22/08/2026.

Guides associés : VBA Copy File · VBA Delete File · VBA Check If File Exists · VBA Dir · VBA FileSystemObject