Renommer des fichiers dans un dossier

Bonjour,

J'ai un dossier, disons TEST1, qui contient de nombreux fichiers du même type, disons de type ".doc"

Les fichiers (plus de 1000) portent un nom quelconque de type SEDTG.doc

Je voudrais les renommer, en fonction de l'année de rédaction du fichier: SEDTG.2014.doc, et les mettre dans un dossier temporaire TEST2. Ainsi je conserve provisoirement chaque fichier dans ses deux versions de nom.

J'aimerai automatiser cette procédure.

J'ai cherché sur le forum, j'ai vu ici et là des bribes de macro.

Cependant je ne sais pas où mettre le macro et comment le faire fonctionner.

Merci pour votre aide.

Salut et bienvenue sur le Forum,

Dans le fichier ci-joint il y a une macro qui se déclenche par le bouton en place.

Cette macro passe en revue tous les fichiers .doc du dossier dans lequel a été placé ce fichier ‘Copie de fichiers’ et – pour autant que ce dossier comporte également un sous-dossier nommé ‘Archive’ – effectue une copie de chacun de ces fichiers .doc et la place dans le sous-dossier ‘Archive’ en y ajoutant la date.

Je n’ai pas été très clair ? Effectue un essai et tu verras bien si ça correspond à ton attente

Cordialement.

Bonjour,

Merci pour avoir essayé de trouver quelque chose. Néanmoins, le code ne marche pas.

Il bloque d'emblée à :

Date_fichier = Format(FileDateTime(Fichier_traité), "YYYY")

Ce que je souhaite:

Dans mon dossier, il y a plusieurs fichiers, disons :

Rouge.doc; Vert.doc; Bleu.doc ; ... (au fait il y a plus de mille!

Je voudrais les renommer en :

Rouge.2014.doc; Vert.2014.doc; Bleu.2014.doc

J'ai d'autres dossiers pour 2013-2012-2011 ets (séparés).

Une fois que j'ai compris pour 2014, je pourrai m'occuper des autres!

Merci de votre aide.

HABD

Bonjour,

J'ai bidouillé quelquechose à votre code et ça a marché:

Au lieu de :

If Fichier_traité = ThisWorkbook.Name Then GoTo Etiquette

Date_fichier = Format(FileDateTime(Fichier_traité), "YYYY")

Nouveau_Nom = Left(Fichier_traité, Len(Fichier_traité) - 4)

FileCopy Chemin & Fichier_traité, Chemin & "Archive\" & Nouveau_Nom & " - " & Date_fichier & ".doc"

J'ai mis :

If Fichier_traité = ThisWorkbook.Name Then GoTo Etiquette

Nouveau_Nom = Left(Fichier_traité, Len(Fichier_traité) - 4)

FileCopy Chemin & Fichier_traité, Chemin & "Archive\" & Nouveau_Nom & ".2014" & ".doc"

Et c'est excellent.

Merci de tout coeur.

HABD

Bonjour,

Comme je vous l'ai dit, votre code, modifié par la suite, fonctionne parfaitement.

Je vous en suis très reconnaissant.

Cependant, je n'y comprend pas grand chose, même si la modification que j'ai apportée est OK.

Si vous avez le temps, pourriez vous m'éclairer?

Par exemple, si je veux modifier ce code, et lui demander :

Rouge.21.03.14.doc devient Rouge.2014.03.14.doc

ou si je lui dis :

dans ma mon dossier, de séparer tous les documents terminant par.2014.CRO.doc et de les mettre dans un autre dossier?

Merci de votre aide.

HABD

Salut,

Evite les messages par épisodes ; il faut les relire plusieurs fois afin de voir ce que se répète, ce qui se complète, ce qui se contredit, etc.

J’avais fait des essais sur des fichiers .doc créés tout spécialement pour mes essais et l’instruction Format(FileDateTime(Fichier_traité), "YYYY") permettait de récupérer l’année de la date de création du fichier (donc ça aurait joué automatiquement pour 2013, 2012, etc.). J’ai donc posté ma réponse sur cette base.

Par la suite j’ai encore fait des essais avec des documents .xls anciens et ça bloquait justement sur cette ligne comme ça a bloqué chez toi. Ne sachant pas trop si tu avais plus de chance avec tes documents, je ne t’en ai rien dit en ‘attendant de voir’.

Effectivement qu’avec ta transformation ça joue très bien pour 2014. Par contre tu devrais éviter de mettre des points dans le nom de tes fichiers – d’autres signes comme – ou _ sont mieux – car si tu désires effectuer une fois une recherche par rapport à l’extension, tu ne pourras pas te servir d’une recherche du point placé avant l’extension, il sera confondu avec tes autres points.

HABD a écrit :

Par exemple, si je veux modifier ce code, et lui demander :

Rouge.21.03.14.doc devient Rouge.2014.03.14.doc

ou si je lui dis :

dans ma mon dossier, de séparer tous les documents terminant par.2014.CRO.doc et de les mettre dans un autre dossier?

Pratiquement tout est possible avec des macros. Mais il faut être extrêmement précis et il faut que la structure de base soit toujours la même. Si tous les noms des fichiers à traiter comportent exactement un texte, un point, un jour au format jj, un point, un mois au format mm, un point, une année au format aa, un point et l’extension, on peut facilement transformer Rouge.21.03.14.doc en Rouge.2014.03.14.doc. De même que de ne traiter que les fichiers se terminant par .2014.CRO.doc ne me semble pas une sinécure. Mais il faudrait mieux que tu précises un peu plus ton besoin et que je ne doive pas tenter plusieurs codes ’au petit bonheur la chance’.

Indique-moi donc une recherche précise que tu désirerais et – si j’arrive à te proposer une solution – tu arriveras peut-être à l’adapter pour d’autres situations.

A te relire.

Bonjour,

Au fait, je dois faire avec ce que j’ai ! Pour chaque personne, un courrier est rédigé. Ce courrier peut être de trois types = CRO ou CS ou LS. Les secrétaires sauvegardent le courrier en fonction de leurs habitudes et de leur roulement. Je n'ai pas toujours la même, hélas! Prenons une personne lambda : DUGAS Jean Marie. Son courrier sera sauvegardé soit de type :

DUGASjeanMarie.doc ou

dugasjeanmarie.doc ou

dugasjeanmarie.31.03.2014.doc ou

DUGASjeanMarie31-03-14.doc ou autre !

Ainsi je vois de tout. Lorsque la même personne est vue deux fois et cela cause un conflit dans la sauvegarde, on rajoute un 2 après DUGASjeanMarie ou dugasjeanmarie:

DUGASjeanMarie2

dugasjeanmarie2

En tout cas elles ne précisent pas si c’est un courrier de type CRO CS ou LS (CRO = compte rendu, CS = consultations LS=lettre de sortie). Chaque courrier est ensuite sauvegardé dans un dossier année à partir de 2009. Chaque dossier (2009 à ce jour) comprend plus de 2000 fichiers .doc.

Le problème c’est lorsque je souhaite suivre le parcours d’une personne, je n’ai pas un visu du parcours en un seul coup d’œil. Je suis obligé de chercher dans plusieurs dossiers pour savoir s’il a été vu en 2009, 2010 …et je peux omettre certains passages. D’où mon idée de renommer les dossiers en

.2014.CRO.doc

.2014.CS.doc

.2014.LS.doc

.2013.CRO.doc

.2013.CS.doc

.2013.LS.doc

etc

Et tout regrouper dans un seul dossier. Cela m’est égal si la personne a été sauvegardée en :

DUGASjeanMarie ou

dugasjeanmarie

Sans chercher quoi que ce soit, je peux savoir quand DUGAS Jean Marie a été vu et pourquoi.

Avec le code que tu m’as donné, (je t’en remercie encore et encore) j’ai pu rajouter .2013.CRO.doc etc aux dossiers. Mes dossiers sont ainsi renommés

DUGASjeanMarie.2014.CRO.doc (... vu en 2014 pour un CRO)

dugasjeanmarie.2009.LS.doc (... vu en 2009 pour un LS)

dugasjeanmarie.31.03.2014.CRO.doc (... vu en 2014 pour un CRO)

DUGASjeanMarie31-03-14.2014.LS.doc (... vu en 2014 pour un LS)

Lorsqu’il y a que l’année :

DUGASjeanMarie.2014.CRO.doc

dugasjeanmarie.2009.LS.doc

tous les courriers de Dugas Jean Marie sont regroupés par ordre chronologique. Et c'est excellent.

Par contre pour :

dugasjeanmarie.31.03.2009.CRO.doc

DUGASjeanMarie31-12-14.2014.LS.doc

Ils sont également regroupés mais en désordre.

Mon idée, même si c’est fastidieux, (je peux le faire en plusieurs étapes) c’est de séparer tous les dossiers terminant par .CRO.doc (et les autres par la suite). Les regrouper dans un dossier. Poursuivre le tri dans ce dossier. Créer des sous dossiers de .2014.CRO.doc et .2013.CRO.doc. Et faire la même chose pour tous les autres fichiers. Je pourrai ainsi re-arranger les fichiers.

L’idéal aurait été un code qui rajoute la date de rédaction du courrier à la fin et moi je pourrai ensuite rajouter CRO ou CS ou LS

Ou

un code qui permet de regrouper les dossiers en fonction du nombre d’alphabet et/ou chiffres à la fin du nom du fichier et les mettre dans un dossier temporaire :

tous les .CRO.doc ensemble ensuite je poursuivrai :

.2014.CRO.doc

.2013.CRO.doc

etc

ou une solution à ce problème !

Bien entendu, si cela semble être trop compliqué, je comprendrai.

Merci.

Re,

Je n’ai pas vu jusqu’à hier soir que tu m’avais répondu et j’arrive ici avec un peu de retard ; désolé.

Il y a une chose que je ne comprends pas, c’est que tu indiques tout d’abord avoir des noms de fichiers sans les données CRO, CS et LS et qu’ensuite tu m’indiques les classer entre autre selon ces dénominations. Comment fais-tu réellement ? Modifies-tu tous les fichiers manuellement ?

Ensuite tu dis vouloir avoir un suivit par personne concernée, mais alors je ne comprends pas pourquoi tu désires avoir tes fichiers à double ? Ne serait-il pas plus simple de regrouper les noms des fichiers uniquement dans un seul nouveau fichier Excel et de travailler sur des noms de fichiers plutôt que de travailler sur des copies de fichiers, ce qui me semble bien fastidieux ?

Tu pourrais ainsi constater sur ta liste de noms de fichiers que DUGAS Jean Marie apparait en 2009 pour un CRO, et 2013 pour un LS, etc., et aller rechercher le fichier original si nécessaire, non ?

Cette manière de faire permettrait certainement d’être aussi beaucoup plus souple dans le traitement des données ; il serait très certainement possible par exemple de lister les noms des fichiers tels qu’ils sont nommés actuellement dans la colonne A, l’année dans la colonne B, la date si elle existe dans la colonne C, etc., puis de pouvoir travailler avec la souplesse d’Excel sur cette base.

Si tu es intéressé, je peux créer un modèle de macro qui relèverait tous les noms des fichiers .doc d’un dossier afin que tu puisses te faire une idée des possibilités de travailler de cette manière.

A un autre propos, je pense qu’il doit quand même être possible de travailler en relevant la date de création des dossiers, ce qui peut être très intéressant en remplacement des dates hasardeuses qui semblent avoir été inscrites dans les noms des fichiers. Si ça t’intéresse, je peux creuser un peu la chose.

Dans tous les cas il faudra être patient, car je n’aurai peut-être pas toujours beaucoup de temps à te consacrer ces prochains jours.

A te relire.

  • Disons que de Jean Marie est hospitalisé du 25 au 29 août 2012, opéré le 25-08-2012 et suivi en consultations externes les 25-09-2012 et 25-10 2012.
  • Les secrétaires utilisent le PC comme une machine à écrire et classent les documents comme sur des étagères.
  • Des courriers seront rédigés pour Jean Marie :
(a) JeanMarie25.08.2012.doc (correspondant à son séjour) et classé dans un dossier LS

(b) JeanMarie25.08.2012.doc (correspondant à son compte rendu opératoire) et classé dans un dossier CRO

(c) JeanMarie25.09.2012.doc (correspondant à son passage en consultations externes le 25/09) et classé dans un dossier CS

(c) JeanMarie25.10.2012.doc (correspondant à son passage en consultations externes le 25/10) et classé dans un dossier CS

Cela ne pose pas de soucis pour les secrétaires puisqu’elles recherchent les documents manuellement, alors que des fichiers portent le même nom sans avoir le même contenu.

Problèmes :

  • Jean Marie est classé à plusieurs endroits,
  • sous des noms identiques alors que ce ne sont pas les mêmes documents,
  • sans notion d’ordre chronologique.

Mon idée :

  • Le dossier contenant tous les CRO : je supprime les .doc à la fin et je rajoute .CRO.doc
  • Le dossier contenant tous les CS : je supprime les .doc à la fin et je rajoute .CS.doc
  • Le dossier contenant tous les LS : je supprime les .doc à la fin et je rajoute .LS.doc
Grâce au macro que tu m’as fourni, cette étape a été réalisée avec succès.
  • Je regroupe tous ces fichiers dans un seul dossier que je nomme Archive (le nom est sans importance).
  • Ainsi sans ouvrir les documents je peux savoir pourquoi un patient était présent et quand. (Date et CRO ou CS ou LS précisés dans le titre) :
- JeanMarie08.12.2012.CRO.doc

- JeanMarie08.12.2012.LS.doc

- JeanMarie24.12.2012.CS.doc

- MariePierre24.10.2014.CS.doc

- MariePierre28.12.2014.CS.doc

Mon problème :

La façon de mettre les dates ne convient pas :

- Liliane10.12.2014.CRO.doc

- Liliane11.01.2008.CRO.doc

- Liliane12.07.2012.CRO.doc

J’aurai préféré 2011.08.31 au lieu de 31.08.2011. Les différents courriers seront organisé en ordre alphabétique et chronologique.

Quelle solution ?

Existe-t-il un macro qui peut analyser le titre du document, identifier les alphabets : JeanMarie

ensuite le 1er point : JeanMarie.

ensuite les chiffres : 31.08.2011

remplacer ces chiffres par la date du document au formant AAAA.MM.DD

ensuite conserver le reste (.CRO.doc ou .CS.doc ou .LS.doc)

NB : ta remarque concernant les fichiers doubles est juste. Au fait, j’ai suivi ton conseil. Il n’y a plus de doublon !

NB : il ne sera pas possible d'associer un document Excel à ce projet car les secrétaires ne sont pas compétentes dans ce domaine!

Te remerciant

Re,

Il me semble que tu sous-estimes passablement tes secrétaires. Je suis persuadé qu’avec de bonnes instructions, elles pourraient faire un travail merveilleux.

Tu changes passablement tes demandes et j’ai créé le fichier ci-joint uniquement selon tes dernières données, c’est-à-dire que j’ai considéré que tes noms de fichiers étaient exactement écrits selon le modèle XXXXjj.mm.aaaa.XXX.doc.

Comme je trouverais très compliqué d’avoir tous les fichiers dans le même dossier (tu retrouverais l’original et la copie avec le nouveau nom dans le même dossier à des endroits assez aléatoires), j’ai considéré que tu avais un sous-dossier ‘Archive bis’ dans ton dossier ‘Archive’ et les nouveaux dossiers sont regroupés dans ce sous-dossier.

Option Explicit

Sub Copie_Fichiers()

Dim Fichier_traité As String, Chemin As String, Date_fichier As String, Nouveau_Nom As String, Fin_Nom As String
Dim x As Integer, Position_Premier_chiffre As Integer

Application.ScreenUpdating = False

Chemin = ThisWorkbook.Path & "\"
Fichier_traité = Dir(Chemin & "*.doc")

Do While Fichier_traité <> ""

For x = 1 To Len(Fichier_traité)
    If IsNumeric(Mid(Fichier_traité, x, 1)) Then
        Position_Premier_chiffre = x
        GoTo Etiquette
    End If
Next x

Etiquette:

    Date_fichier = Mid(Fichier_traité, Position_Premier_chiffre + 6, 4) & "." & Mid(Fichier_traité, Position_Premier_chiffre + 3, 2) & "." & Mid(Fichier_traité, Position_Premier_chiffre, 2)
    Nouveau_Nom = Left(Fichier_traité, x - 1)
    Fin_Nom = Right(Fichier_traité, Len(Fichier_traité) - (x + 9))

    FileCopy Chemin & Fichier_traité, Chemin & "Archive bis\" & Nouveau_Nom & Date_fichier & Fin_Nom

Fichier_traité = Dir
Loop

End Sub

On pourrait simplifier un peu cette macro, mais peut-être au risque de la rendre assez peu compréhensible.

A te relire.

Bonjour,

Je n'ai pas pu répondre plus tôt car j'étais pris à l'étranger (professionnelle). Je rentre tout juste. Je vais étudier votre proposition dès ce dimanche. J'apprécie votre dévouement. Amicalement.

C'est excellent. Le code que tu m'as fourni, répond exactement à ce que je recherchais. Je t'en remercie vivement.

Tant mieux

A la prochaine.

J'aimerai te soumettre un fichier excel que j'ai créé. Je ne sais pas comment l'intituler et donc je ne peux pas ''caser'' ma question correctement.

Explications :

  • Nous sommes 4 personnes dans un service et une personne doit assurer une présence continue pour la nuit, les weekends et les jours fériés.
  • Chaque jour est divisé en 4 parties : matin, après midi, soirée et nuit

- Ainsi si Arthur est présent un jour de semaine (non férié) et de garde la nuit, sa présence sera codifiée comme PJ-PJ-AO-AO

o PJ = présence jour,

o ici matin (PJ) et après midi (PJ) pour un jour de semaine non férié

o AO = astreinte opérationnelle

o ici soirée (AO) et nuit (AO) pour un jour de semaine non férié

- Ainsi si Arthur est présent samedi (non férié) ; (il sera automatiquement de garde la nuit de samedi à dimanche) ; sa présence sera codifiée comme PJ-AO-AO-AO

o ici matin (PJ) pour un samedi non férié

o Ici après midi (AO), soirée (AO) et nuit (AO) pour samedi non férié

- Ainsi si Arthur est présent dimanche ou un jour férié, (il sera alors automatiquement de garde la nuit); sa présence sera codifiée comme AO-AO-AO-AO

o Ici matin (AO), après midi (AO), soirée (AO) et nuit (AO) pour dimanche ou pour un jour férié

- Ainsi si Arthur est présent mais pas de garde (cela ne peut être possible que pour un jour de semaine et ce jour ne sera pas férié), sa présence sera alors codifiée comme PJ-PJ-/-/

- Lorsque Arthur est absent :

o pour congés annuels : codage : CA-CA-/-/

o pour congés formation : codage : CF-CF-/-/

o pour congés de récupération : codage : Réc-Réc-/-/

o pour congés RTT : codage : RTT-RTT-/-/

  • Une seule personne peut être de garde (ou d’astreinte, c’est la même chose) par jour.
  • NB Parfois une personne peut choisir d'être présent le matin (PJ) et absent l'après midi (CA/2, RTT/2)

Chaque jour comprend donc 4 codes pour une personne. Après 30 jours, la feuille de présence doit donc comprendre 4*30*4personnes =480 codes. Jusqu'à tout récemment, je la remplissais manuellement. Elle comprenait donc de nombreuses erreurs (de fatigue et de crampes aux doigts !)

J’ai résolu le problème en faisant appel à VBA et en utilisant un calendrier perpétuel que j’ai pu obtenir sur un des forums. Cependant mes codes de VBA sont très basiques et la mise à jour de mon fichier est souvent laborieuse.

Pourras-tu y jeter un coup d’œil ?

Feuille Garde :

Chaque mois comprend 8 colonnes :

  • 1ère colonne : Date
  • 2e colonne : absence de Rene
  • 3e colonne : absence de Abel
  • 4e colonne : absence de Akap
  • 5e colonne : absence de Vagner
  • 6e colonne : colonne supplémentaire pour des annotations
  • 7e colonne : colonne temporaire de mémorisation du jour (lun,mar,mer,jeu…)
  • 8e colonne : colonne pour la liste de garde

Feuille Ortho :

Cette feuille reprend les données de Feuille Garde sauf que 7 colonnes :

  • 1ère colonne : Date (1-2-3-4…)
  • 2e colonne : Date (lun,mar,mer,jeu…)
  • 3e colonne : liste de garde
  • 4e colonne : absence de Rene
  • 5e colonne : absence de Abel
  • 6e colonne : absence de Akap
  • 7e colonne : absence de Vagner
Les noms seront colorés

Feuille Temp :

J’ai crée cette feuille temporaire afin de créer les feuilles A et B

Feuille A :

Analyse la Feuille Temp et crée la fiche de garde

Idem pour B

En te remerciant.

HABD

Salut,

Comme ton problème est complètement différent du premier sujet traité, je te serais donc reconnaissant de bien vouloir ouvrir un nouveau fil.

Désolé de ne pas pouvoir prendre en charge ton sujet ces jours, mais j'ai passablement à faire en privé et du point de vue professionnel.

Si tu ne reçois pas de réponse, tu peux bien essayer de me relancer en privé d'ici 2 à 3 jours afin de me demander d'aller voir ton fichier quand même.

Cordialement.

OK. Pas de soucis. Il n'y a pas d'urgence. Merci

PS;

j'ai ouvert le sujet :

https://forum.excel-pratique.com/excel/automatiser-une-liste-a-partir-des-dates-t56811.html

Si tu as un moment, ce sera sympa,

Merci

HABD

Rechercher des sujets similaires à "renommer fichiers dossier"