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
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.
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
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 :
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
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
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
Bingo
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
Bonjour,
Effectivement c’est LA solution
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
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
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