Changer le nom d'un fichier avec chemin d’accès variable

Bonjour,

C'est mon premier post et je suis novice sur les VBA, merci de votre indulgence si je commets un impaire.

Voici mon problème :

J'ai récupéré via une macro tous les noms de fichiers de plusieurs dossiers et sous dossier dans une Feuil1 Excel.

Après traitement des noms des fichiers, je souhaiterais pouvoir modifier leurs noms en masse.

Voici a quoi ressemble ma Feuil1 :

Colonne A ligne 2 : CHEMIN RÉPERTOIRE d'un fichier

Colonne B ligne 2 : Ancien Nom fichier 1

Colonne C ligne 2 : Nouveau Nom fichier 1

Exemple Format :

G:\AAAA\BBBB\CCCC

TEST.docx

NOUVEAUTEST.docx

J'ai trouvé une macro pour renommer les fichiers mais pas en fonction du chemin répertoire renseigné en cellule A1:A100)

Sub Renomme_fich()

Dim Chemin As String

Chemin = chemin répertoire renseigné en cellule A1:A100)

For ligne = 11 To 800

Name Chemin & Cells(ligne, 2) As Chemin & Cells(ligne, 3)

Next ligne

End Sub

Merci pour votre aide

Bonjour Gntrm, bonjour le forum,

Peut-être comme ça :

Sub Macro1()
Dim chemin As String
Dim Fichier As String
Dim NNom As String
Dim FS, D, F

For I = 11 To 800
    chemin = Cells(I, "A").Value
    Fichier = Cells(I, "B").Value
    NNom = Cells(I, "C").Value
    Set FS = CreateObject("Scripting.FileSystemObject")
    Set D = FS.GetFolder(chemin)
    For Each F In D.Files
        If F.Name = Fichier Then F.Name = NNom: Exit For
    Next F
Next I
End Sub

Bonjour ThauThème,

Merci pour ta réponse.

Lorsque je mets la macro dans un nouveau module et que je l'actionne, j'ai un message "erreur d'exécution '5' : argument ou appel de procédure incorrect" avec la ligne Set D = FS.GetFolder(chemin) en jaune.

Question peut être utile pour commencer :

Mon fichier excel doit-il être enregistré à un endroit spécifique ou peut-il être n'importe ou ?

Mon but est de renommer le nom d'un grand nombre de fichiers de la colonne B par les noms en colonnes C qui sont dans différent dossier dont le chemin est renseigné en colonne A. Bien évidement ligne par ligne.

Merci pour ton/votre aide.

Re,

J'ai testé chez moi et ça fonctionne. Peux-tu nous fournir un fichier que l'on puisse voir ce qui ne va pas...

Bien sur, voici

Re,

Heu... ! Tiré de ton propre code :

For ligne = 11 To 800

Et là tu me proposes un exemple où la première ligne est la ligne 2 !?...

Le code adapté :

Sub Macro1()
Dim DL As Integer
Dim chemin As String
Dim Fichier As String
Dim NNom As String
Dim FS, D, F

DL = Worksheets("Feuil1").Cells(Application.Rows.Count, "A").End(xlUp).Row
For I = 2 To DL
    chemin = Cells(I, "A").Value
    Fichier = Cells(I, "B").Value
    NNom = Cells(I, "C").Value
    Set FS = CreateObject("Scripting.FileSystemObject")
    Set D = FS.GetFolder(chemin)
    For Each F In D.Files
        If F.Name = Fichier Then F.Name = NNom: Exit For
    Next F
Next I
End Sub

ThauThème,

Pardonne-moi, dans l'exemple, j'ai refait le fichier pour ne pas transmettre des données...

Un grand merci ça fonctionne parfaitement

Tu viens de m’éviter un travail long et pénible !!!!

Aurais-tu la gentillesse de m'expliquer la macro pour que je puisse m’améliorer et que je puisse m'en resservir en l'adaptant au besoin ?

Je clôture le sujet juste après

Re,

Je maîtrise pas bien ce système et je pense qu'il y a plus court avec GetFile mais j'ai pas réussi à coder sans erreur... Le code commenté :

Sub Macro1()
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim chemin As String 'déclare la variable chemin
Dim Fichier As String 'déclare la variable Fichier
Dim NNom As String 'déclare la variable NNom (Nouveau Nom)
Dim FS, D, F 'déclare les variable FS, D et F

DL = Worksheets("Feuil1").Cells(Application.Rows.Count, "A").End(xlUp).Row 'définit la dernière ligne éditée de la colonne A de l'onglet "Feuil1"
For I = 2 To DL 'boucle des lignes 2 à DL
    chemin = Cells(I, "A").Value 'définit le chemin de la cellule de la boucle en colonne A
    Fichier = Cells(I, "B").Value 'définit le Fichier de la cellule de la boucle en colonne B
    NNom = Cells(I, "C").Value 'définit le nouveau nom NNom de la cellule de la boucle en colonne C
    Set FS = CreateObject("Scripting.FileSystemObject") 'obligatoire si on veut travailler sur les fichiers c'est le Système des fichiers du PC
    Set D = FS.GetFolder(chemin) 'définit le dossier de travail D
    For Each F In D.Files 'pour chaque fichier F du dossier D
        'si le nom du fichier est égal à Fichier, renomme le fichier avec Nnom, sort de la boucle
        If F.Name = Fichier Then F.Name = NNom: Exit For
    Next F 'prochain fichier de la boucle (=du dossier de travail D)
Next I 'prochaine ligne de la boucle
End Sub

Arf ! je crois que j'ai trouvé ce que je voulais de proposer :

Sub Macro1()
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim chemin As String 'déclare la variable chemin
Dim Fichier As String 'déclare la variable Fichier
Dim NNom As String 'déclare la variable NNom (Nouveau Nom)
Dim FS, F 'déclare les variable FS et F

DL = Worksheets("Feuil1").Cells(Application.Rows.Count, "A").End(xlUp).Row 'définit la dernière ligne éditée de la colonne A de l'onglet "Feuil1"
For I = 2 To DL 'boucle des lignes 2 à DL
    chemin = Cells(I, "A").Value 'définit le chemin de la cellule de la boucle en colonne A
    Fichier = Cells(I, "B").Value 'définit le Fichier de la cellule de la boucle en colonne B
    NNom = Cells(I, "C").Value 'définit le nouveau nom NNom de la cellule de la boucle en colonne C
    Set FS = CreateObject("Scripting.FileSystemObject") 'obligatoire si on veut travailler sur les fichiers c'est le Système des fichiers du PC
    Set F = FS.GEtFile(chemin & "\" & Fichier)  'définit le fichier F
    F.Name = NNom 'chane le nom du fichier
Next I 'prochaine ligne de la boucle
End Sub

MERCI BEAUCOUP !!!!

ThauThème,

Hier cela fonctionné très bien mais aujourd'hui excel m'affiche le message suivant (Erreur d'exécution '58' ce fichier existe déjà) en surlignant If F.Name = Fichier Then F.Name = NNom: Exit For

Merci de ton aide

Re,

Je ne suis pas sur que l'on puisse utilise la fonction Renommer en changeant juste la casse du nom. Peut-être en deux étapes

Ancien non : gm.docx / nouveau nom : GM2.docx puis ancien nom GM2.docx et nouveau nom GM.docx

Le problème arrive quand le nom du fichier de départ ressemble à celui d'arrivé :

Exemple maman.docx (ancien nom du fichier) --> (nouveau nom du fichier) MAMAN.docx

Cela est du au fait que ça ne prend pas en charge le format du nom comme la modification des Majuscule ?

De plus j'ai testé la dernière macro que ThauThème m'a donné, mais elle m'affiche une erreur du à :

[Set FS = CreateObject("Scripting.FileSystemObject") 'obligatoire si on veut travailler sur les fichiers c'est le Système des fichiers du PC

Set F = FS.GEtFile(chemin & "\" & Fichier) 'définit le fichier F

Salut ThauThème,

ok je comprends je vais faire ça en deux temps dans ce cas !

Merci de ton aide

Rechercher des sujets similaires à "changer nom fichier chemin acces variable"