TL;DR —
Name oldPath As newPathrenomme un fichier — mais sinewPathpointe sur un dossier différent, VBA déplace le fichier là-bas. Une seule instruction fait les deux tâches. Et contrairement àFileCopy,Namerefuse d'écraser : si la cible existe déjà, il lèveerror 58au 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 —
Nameest renommer et déplacer en une seule instruction - Pourquoi
Namerefuse d'écraser avecerror 58— l'inverse deFileCopy - Pourquoi
Namene peut pas traverser les lecteurs, et commentFileCopy+KillouMoveFileaccomplit 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 → renommageName "C:\In\a.xlsx" As "C:\Out\a.xlsx"— nouveau dossier, même nom → déplacementName "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.Name— refuse et lèveerror 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 avecIf Dir(oldPath) <> "" Thenavant 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 lecteur →
Name old As new— toute la tâche en une seule instruction. - Il refuse d'écraser → libérez la cible d'abord (
Killaprès une vérification d'existence), ou il s'arrête surerror 58. - Déplacement inter-lecteurs →
Namene peut pas ; utilisezFileCopy+Kill, oufso.MoveFile. - Protégez la source, la cible et l'état ouvert → pour qu'un renommage planifié ne cale jamais sur
error 53,58,70ou74.
À 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
