Renommer un fichier XLS avec date du jour et de création

Bonjour,
Merci à tous les spécialistes de VBA de m’accueillir sur ce forum.

Je cherche à automatiser le renommage de fichiers Excel avec les critères suivants :
Ancien fichier : localisé n’importe où sur mon PC avec n’importe quel nom.
Nouveau fichier : à enregistrer dans le même dossier où se trouve l’ancien fichier.

Le nouveau fichier devra se nommer YYYY-MM-DD nom de l’ancien fichier.xlsx

1ère macro : YYYY-MM-DD est la date du jour.
2ème macro : YYYY-MM-DD est la date de création de l’ancien fichier.

J’ai beau chercher, je ne suis pas suffisamment performant en VBA pour trouver la solution :frowning:

Des idées ?
Merci pour vos contributions
Francois

Bonjour,
J’ai pas bien compris cette demande :

Bien cordialement

Bonjour Jacquinot,
Merci de prendre en compte ma demande.
L’ancien fichier est un fichier Excel situé dans un dossier quelconque de mon PC, il peut être localisé sur mon disque C: ou bien dans un autre disque D:, ou bien sur le bureau Windows, ou bien dans un dossier de mon NAS voire à la racine de ce NAS.

Le nouveau fichier « atterrira » au même endroit que l’ancien fichier.
J’espère ne pas t’avoir perdu.
Francois

Re,
Ah, je vois.
Donc vous voulez chercher l’ancien fichier, enregistrer son emplacement quelque part et utiliser cet emplacement pour mettre le nouveau fichier?
Si l’emplacement du fichier n’est pas fixe, cela ne va pas pas être facile à faire.
Même chercher un fichier dans l’explorer n’est pas une masse à faire si on possède plusieurs emplacements.
Bien cordialement

En fait,
1- je me positionne sur le fichier à renommer dans le dossier où il se situe
2- j’ouvre le fichier en question
3- j’applique la macro
4- je dois trouver le fichier renommé au même endroit que le fichier d’origine
5- si la conversion s’est bien passée, je supprimerai l’ancien fichier en rajoutant un kill de l’ancien fichier dans la macro.

Est-ce plus facile comme ça ?

Bonjour,

Si je comprends bien l’idée et de pouvoir effectuer un enregistrement du nouveau fichier sur L’ancien ?

L’écrase ?
quand vous dites un kil ?

Pourquoi ne pas utiliser l’enregistrement automatique avec l’historique vous aurez jusqu’à un mois de sauvegarde

@Jacquinot_WILL-FREAD ( La forme pour toi ? ) , peux etre en utilisent justement l’enregistrement automatique pour effectuer les enregistrements avec la date du jour

Salutation

Bonjour
Bonjour Johnny
Bonjour WILL_FREAD

Essaies avec ce fichier

Cliques sur le bouton « Copie fichier »

Une boite de dialogue s’ouvre pour aller sélectionner le fichier concerné

Dans le même répertoire une copie de celui-ci est réalisée avec ajoutée à son nom la date du jour sous forme « AAAA-MM-DD »

L’ancien fichier sélectionné dans ce répertoire est supprimé

Testes et dis moi

Fichier.xlsm (19,1 Ko)

1 « J'aime »

Bonjour @Johnny ,

Pas vraiment, j’ai un rhume.

@tous.merci pour votre participation.
J’ai une contrainte, je reviens vers vous plus tard.

Avec la macro Fichier.xlsm on s’avance mais ce n’est pas tout à fait ça que j’attends :frowning:
Francois

Qu est ce qui ne correspond pas à tes attentes
Peux tu m expliquer
Merci

Re,
Voici une solution sans macro,(dans le fichier de sortie)

Sub creer()
Dim b As String, c As String, d As String

b = ActiveWorkbook.Path
c = ActiveWorkbook.Name
d = b & "\" & Format(Now, "YYYY-MM-DD") & ".xlsx"
ActiveWorkbook.Close

Name b & "\" & c As d
Workbooks.Open (d)

End Sub

Cela permet de renommer votre fichier par le format que vous avez dit.

Il faut que vous l’mettez dans un module dans votre PERSONAL.XLSB
Comme ceci :

Et vous créez une commande avec

J’espère que cela répondra a votre question.
Le fichier de sortie serait en format « .XLSX »
Cordialement

Re,
On s’approche à grand pas :

  • la macro fonctionne pour l’aspect génération du nouveau fichier avec la date bien formatée, je l’ai essayée dans plusieurs dossiers et plusieurs disques, le nouveau fichier se retrouve bien au même endroit que l’ancien. Ce point est résolu :slight_smile:
  • Le nouveau fichier a perdu le nom de l’ancien,
    exemple : nom de l’ancien fichier : toto.xlsx
    nom attendu du nouveau 2023-02-13 toto.xlsx
    nom obtenu avec votre macro 2023-02-13.xlsx, on a perdu le nom du fichier origine (toto)
    Prochaine étape :
  • Récupérer la date de création du fichier toto.xls dans les propriétés du fichier.(dans cet exemple le fichier a été créé le 15/01/2019)
  • Reporter cette date dans le nouveau fichier, le nouveau nom sera donc 2019-01-15 toto.xlsx

On va y arriver :wink:

1 « J'aime »

Re,
Donc, c’est pas la date du jour mais la date de création de l’ancien fichier qu’on combine avec l’ancien nom?
Will

Bonsoir,
Si j’ai bien compris, les voici :

Sub creer()

Dim b As String, c As String, d As String
b = ActiveWorkbook.Path
c = ActiveWorkbook.Name
d = b & "\" & Format(FileDateTime(b & "\" & c), "YYYY-MM-DD") & " " & c
ActiveWorkbook.Close

Name b & "\" & c As d
Workbooks.Open (d)

End Sub

Cordialement
Will-Fread

1 « J'aime »

Bingo :slight_smile:
Vous avez bien compris ça fonctionne.
Le fait de mettre la date de création, permet de se passer de 2 macros distinctes, une pour la date du jour et l’autre pour la date de création dans la mesure où si je renomme un fichier créé le jour même il héritera de cette même date.
Si je renomme ce fichier plus tard il héritera de sa date de création, ce que je souhaitais.
Merci à tous pour votre efficacité.
Francois
Je clique sur l’icône Solution pour clore le sujet

Rebonjour,

Ravi que vous avez trouvé ce que vous voulez.
La solution devrait les codes que j’ai envoyé non :sweat_smile:.
Mes salutations
Will-Fread

Bonjour,
Effectivement c’est LA solution :slight_smile:
Il m’a suffit de copier/coller la macro ci-dessous pour que ça fonctionne :
Si ça peut servir à quelqu’un d’autre

Sub creer()
Dim b As String, c As String, d As String
b = ActiveWorkbook.Path
c = ActiveWorkbook.Name
d = b & "" & Format(FileDateTime(b & "" & c), « YYYY-MM-DD ») & " " & c
ActiveWorkbook.Close
Name b & "" & c As d
Workbooks.Open (d)
End Sub

Merci encore et bonne journée.
Francois

1 « J'aime »

Re,
Je voulais dire qu’il faut que vous cochez le commentaire qui a résolu votre question comme Solution.
Cordialement

Rebonjour,
Juste pour ma culture personnelle et comprendre la syntaxe ainsi que le mécanisme de votre solution, pourriez-vous SVP mettre des commentaires suivant les différentes lignes.
Ca me permettrait de me lancer dans le langage VBA par l’exemple.
En déchiffrant, je traduis
b définit le chemin du fichier concerné
c définit le nom actuel du fichier concerné
d c’est là que je butte pour comprendre la construction de cette commande.

De même pour Name b & " " & c As d, je n’arrive pas à comprendre l’utilisation des & et des " ".

Il n’y a pas d’obligation bien sûr
Bien cordialement
Francois

1 « J'aime »

Eh bien, …

Sub creer()

'Supposons que b, c, d sont du texte
Dim b As String, c As String, d As String

'dont b est l'emplacement du classeur actif mot clé .Path
b = ActiveWorkbook.Path
'c est le nom du classeur classeur actif exemple classeur1.xlsx
c = ActiveWorkbook.Name

'd est égale  à 'emplacement\ date de création du fichier en format YYY-MM-DD espace le nom du classeur actif
'Exemple : C:\Users\Documents\2022-02-14 classeur1.xlsx sera la valeur de d
'" " signifie une espace 
'& signifie "et" pour remplacer la fonction concaténer
d = b & "\" & Format(FileDateTime(b & "\" & c), "YYYY-MM-DD") & " " & c
'Fermeture du classeur actif
ActiveWorkbook.Close
'Renommer le fichier c dans l'emplacement b par le d (le nouveau nom avec la date de création)
Name b & "\" & c As d
'Ouvrir le classeur qui vient d'être renommer
Workbooks.Open (d)

End Sub