Renommer fichiers dans plusieurs sous-répertoires

Bonjour le forum

J'ai trouvé un fichier qui permet de renommer des fichiers dans un répertoire en fonction d'une liste,.

Moi je cherche a renommer un fichier dans plusieurs sous répertoires, dans un même répertoire, mais je ne sais pas comment faire en sorte que la macro prenne en compte les sous répertoires,

Je mets en pièce jointe une copie du fichier avec en colonne "A" le nom du fichier à remplacer (il est toujours nommé ainsi, même si les données sont différentes), en colonne "B" le nom que je voudrais attribuer et en colonne "I" la cible du dossier à renommer

D'avance je vous remercie pour votre aide et votre attention

BOnsoir

peut etre utliser un code qui scrute tous les fichiers a partir d'un dossier parent ? utilisation en récursif pour passé en revu les sous dossiers....

voici un code que j'ai utilisé il y a quelques temps pour lire des données dans tous les fichiers a partir d'un dossier

cela pourrait peut-être te servir

a+

fred

 Sub Parcourir_dossiers_recup_donnees(chemin As String, fichier_source As String)
'Déclaration des variables
    Dim Fso As Scripting.FileSystemObject
    Dim SourceFolder As Scripting.Folder
    Dim SubFolder As Scripting.Folder
    Dim FileItem As Scripting.File

    Set Fso = CreateObject("Scripting.FileSystemObject")
    Set SourceFolder = Fso.GetFolder(chemin)

    'Boucle sur tous les fichiers du répertoire
    For Each FileItem In SourceFolder.Files           
            If FileItem.Name<> fichier_source  Then: lire_donnees 
    Next FileItem 'fichier suivant
    '--- Appel récursif pour lister les fichier dans les sous-dossiers du dossier indiquer  ---.
    For Each SubFolder In SourceFolder.SubFolders
        Parcourir_dossiers_recup_donnees SubFolder.Path, (fichier_source)
    Next SubFolder
End Sub

Bonsoir le forum

Bonsoir fred2406

Merci pour ton aide et ta disponibilité

Oui dans le fichier que j'ai mis en pièce jointe il y a une commande qui fais déjà ça

Le truc que je cherche à faire c'est remplacer dans chaque sous répertoire du répertoire choisi les fichiers "fiber_info_otdr.txt" par le nom inscrit dans la colonne B de la feuil1 de mon fichier.

La macro du module 1 "Sub RenommerFichiers()"boucle sur le répertoire et non les sous répertoires, est-il possible de la modifier afin de qu'elle cherche et remplace dans chaque sous répertoire?

Bonjour Eole

je viens de regarder un peu plus près ton fichier...

dis moi si j'ai bien compris

tu as un fichier qui s'appel toujours "fiber_info_otdr.txt" qui est stocker dans un plusieurs dossiers \PB PT 00XXXX\ les XXXX représentant tes numéros 3217,3218,....

et donc si j'ai bien compris tu voudrais renommer le fichier "fiber_info_otdr.txt" comme le nom du dossier le contenant donc exemple pour le premier

\PB PT 003217\fiber_info_otdr.txt cela devient "\PB PT 003217\PB PT 003217.txt"

est-ce que c'est cela ???

question supplémentaire, y-a-t-il d'autres fichiers dans ces dossiers ??

Car j'ai bien une petite idée de comment faire.... mais sans utiliser ton tableau de correspondance....

fred

Re

sans avoir attendu ton retour voici une macro qui fait ce que j'ai dis... reste a mettre un enregistrement si tu veux savoir le le fichier a été renommé.....

fred

Option Explicit

Public oFSO As Object
Public ficS As String
Sub demande_dossier()
Set oFSO = CreateObject("Scripting.FileSystemObject")
ficS = "fiber_info_otdr.txt"
parcourir (ChoixDossier)
End Sub
Sub parcourir(chemin As String)
Dim SourceFolder As Object
Dim SubFolder As Object
Dim FileItem As Object
Set SourceFolder = oFSO.GetFolder(chemin)
'MsgBox SourceFolder.Name
'Boucle sur tous les fichiers du répertoire
For Each FileItem In SourceFolder.Files
         If FileItem.Name = ficS Then: renomme_fichier Replace(SourceFolder.Path, ficS, "") & "\" & SourceFolder.Name & ".txt", FileItem.Path
Next FileItem 'fichier suivant

'--- Appel récursif pour lister les fichier dans les sous-dossiers du dossier indiquer  ---.
For Each SubFolder In SourceFolder.SubFolders
     parcourir SubFolder.Path
Next SubFolder

End Sub
Sub renomme_fichier(newname As String, EmplacementFich As String)
'renommage du fichier
oFSO.Movefile EmplacementFich, newname
End Sub
Function ChoixDossier()
    If Val(Application.Version) >= 10 Then
       With Application.FileDialog(msoFileDialogFolderPicker)
        .Title = "Choisir le dossier de destination"
        .InitialFileName = ActiveWorkbook.Path & "\"
        .Show
        If .SelectedItems.Count > 0 Then
           ChoixDossier = .SelectedItems(1)
        Else
           ChoixDossier = ""
        End If
       End With
     Else
       ChoixDossier = InputBox("Répertoire?")
     End If
End Function
93eole.zip (14.83 Ko)

Bonjour le forum

Bonjour fred2406

tu as bien compris ce que je cherche à faire et oui il y a d'autre fichier dans chaque sous-dossier cela fonctionne impec

merci beaucoup


Du coup est-ce que je peux en plus créer une version du nouveau fichier en *.xlsx?

Bonsoir

oui c'est possible, il faut ouvrir le fichier avec Excel (import d'un fichier txt) et ensuite l'enregistrer au format Xslx

Fred

Donc il faut que j'ouvre le fichier juste après

If FileItem.Name = ficS Then: renomme_fichier Replace(SourceFolder.Path, ficS, "") & "\" & SourceFolder.Name & ".txt", FileItem.Path

et que je l'enregistre en *.xls avant la fin de la boucle

bonsoir

ou tu peux le faire ici :

Sub renomme_fichier(newname As String, EmplacementFich As String)
'renommage du fichier
oFSO.Movefile EmplacementFich, newname
newnamexls = replace (newname,".txt",".xlsx")
'ouverture du fichier newname 
'enregistrement sous newnamexls
'fermeture du fichier xls

End Sub

fred

Bonjour le forum

Bonjour fred2406

c'est ce bout de code

newnamexls = Replace(newname, ".txt", ".xlsx")

qui ouvre le fichier *.txt et qi renomme en *.xls?

Bonjour. Non ce bout de code ne permet que de préparer le chemin+ le nom en excel pour faire la sauvegarde. ...

d'ailleurs le nom de la variable créée est newnamexls.... cela veut tout dire .... non ?

Es tu capable de faire ce bout de code ?

Fred

ben non j'ai essayé hier soir, mais j'ai pas les connaissances nécessaire pour ça

bonjour

je regarderais ce soir ...

fred

Ok merci beaucoup

bonjour

donc voici le code pour ouvrir le fichier txt et l'enregistrer au format xlsx

y a plus qu'a faire des tests

fred

Sub renomme_fichier(newname As String, EmplacementFich As String)
Dim newnamexls As String

'renommage du fichier
oFSO.Movefile EmplacementFich, newname
newnamexls = Replace(newname, ".txt", ".xlsx")
Workbooks.OpenText Filename:=newname, Origin:=xlWindows, StartRow:=1, DataType:=xlDelimited, Local:=True, Semicolon:=True
ActiveWorkbook.SaveAs Filename:=newnamexls, FileFormat:=xlOpenXMLWorkbook
ActiveWorkbook.Close False

End Sub

Bonsoir le forum

Bonsoir fred2406

super c'est super merci beaucoup

ça fonctionne impec

J'ai commenter la ligne

'ActiveWorkbook.Close False

afin de garder tous les fichiers ouverts.

Maintenant il faut que je trouve le moyen de récupérer la plage de cellule "A1:H50" dans une feuille de mon classeur de travail

j'ai donc lancé un nouveau sujet

encore merci beaucoup

Rechercher des sujets similaires à "renommer fichiers repertoires"