Renommer des fichiers
Bonjour a tous,
Je me permets d'écrire ce post de afin de solliciter votre aide concernant une macro que je voudrai réaliser dont le but est de renommer des fichiers. J'ai parcouru ce forum et d'autres pour trouver des pistes mais je n'arrive pas à finaliser le code.
Peut être pourriez vous m'éclairer ?|k)
Le fichier d'origine est composé de plusieurs parties dont une est identifiable. J'aurai donc souhaité rendre variable la partie identifiable dans la macro qu'elle puisse identifier le bon fichier et le renommer.
Par exemple : le nom du fichier n°1 pourrait être 001018_ TABLE" et un fichier n°2 pourrait être "002002_ STYLO" ainsi le fichier contenant TABLE et STYLO les renommer en X et en Y
Ci dessous le code que j'utilise et qui fonctionne lorsque je définis en "dur" les noms de fichiers.
Sub RenommeFichier()
Dim AncienNom As String, NouveauNom As String
nomfichier = Cells(1, 1).Value
' AncienNom = "C:\Users\****\Desktop\test\001018_ TABLE.pdf"
'Test si la decomposition du nom de fichier avec la valeur d'une cellule A1 fonctionne => Ok fonctionne
'AncienNom = "C:\Users\****\Desktop\test\" & "001018_ " & Cells(1, 1).Value & ".pdf"
'Essaie de la fonction like pour renommer un fichier a partir d'un mot connu dans le fichier
AncienNom = "C:\Users\****\Desktop\test\" Like nomfichier & ".pdf"
'AncienNom = "C:\Users\****\Desktop\test\" Like "TABLE" '& ".pdf"
NouveauNom = "C:\Users\****\Desktop\test\TABLE2.pdf"
'Vérifie si le fichier à renommer existe.
If Dir(AncienNom) = "" Then Exit Sub
'Renomme le fichier
Name AncienNom As NouveauNom
End SubMon problème survient lorsque je veux rendre variable le nom de fichier.
J'ai essayé de procéder par étape et d'utiliser la fonction Like pour dire "renomme moi le fichier contenant "TABLE" en TABLE2 mais ça ne fonctionne pas.
Merci par avance
Bonjour et bienvenue
Je ne sais pas si j'ai bien compris ta demande mais si le fichier contenant le code ci-dessous est placé dans le même dossier que les fichiers à renommer (TEST), les fichiers contenant un underscore dans leur nom sont renommés selon la partie à droite de l'underscore + le chiffre 2 + .pdf
Sub RenommeFichier()
Dim dossier As Object, Fichier As Object, Chemin As String, Lg As Integer
Chemin = ThisWorkbook.Path
Set dossier = CreateObject("Scripting.FileSystemObject").GetFolder(Chemin)
For Each Fichier In dossier.Files
On Error Resume Next
Nom = Fichier.Name
x = Left(Mid(Nom, InStr(Nom, "_") + 1), Len(Mid(Nom, InStr(Nom, "_") + 1)) - 4)
Fichier.Name = x & "2" & ".pdf"
Next Fichier
End SubAmicalement
Nad
Bonjour Nad,
Merci pour ton accueil et ta réponse.
Le code sera je pense effectivement placé dans le même dossier.
Par contre les fichiers que j'ai donné dans mon code sont des exemples que j'ai crée moi même pour générer un code. Je pars du principe que si j'arrive à les "retravailler" je pourrai retravailler n'importe quel autre chaine de caractère.
Dans mon idée principale avec le code, je pensais faire la chose suivante :
pour chaque fichier ayant un mot identifiable (par exemple TABLE, STYLO, CLAVIER, BOUTEILLE etc ...) la macro trouve ce mot identifiable et me le renomme d'une certaine manière.
En l’occurrence, pour mon application le renommage serait 2014_09 TABLE ou 2014_09 STYLO ou 2014_09 CLAVIER ou 2014_09 BOUTEILLE.
Dans ton code pourrait tu m'expliquer
x = Left(Mid(Nom, InStr(Nom, "_") + 1), Len(Mid(Nom, InStr(Nom, "_") + 1)) - 4)Je pense comprendre qu'il extrait le mot TABLE en comptant le nombre de caractère (a la sorte peut etre de formule STXT())
Par contre, de ce que je peux voir, il suffit je pense que le nombre de caractère change et le code n'est plus bon
Cordialement,
Maxi
Re
maxi12 a écrit :Par contre, de ce que je peux voir, il suffit je pense que le nombre de caractère change et le code n'est plus boni
Non - Dans ton 1er mail, les mots sont placés après un underscore. x récupère ce mot quelle que soit sa longueur (moins 4 lettres pour .pdf)
Si effectivement tu n'as pas systématiquement d’ underscore avant les mots et que tu veux faire une recherche sur des mots précis, peux-tu dire si les mots peuvent se retrouver dans plusieurs noms de fichiers ou bien sont-ils uniques ?
Nad
Nad a écrit :Re
maxi12 a écrit :Si effectivement tu n'as pas systématiquement d’ underscore avant les mots et que tu veux faire une recherche sur des mots précis, peux-tu dire si les mots peuvent se retrouver dans plusieurs noms de fichiers ou bien sont-ils uniques ?
Nad
Oui les mots sont toujours uniques (pour etre exacte, il s'agit en fait de nom de famille)
Re
Essaye avec ce code
Le fichier est à placer dans le même dossier
Les noms à chercher sont en A1:A10 dans mon code
Option Compare Text
Sub RenommeFichier()
Dim dossier As Object, Fichier As Object, Chemin As String, c As Range
Chemin = ThisWorkbook.Path
Set dossier = CreateObject("Scripting.FileSystemObject").GetFolder(Chemin)
On Error Resume Next
For Each c In Range("A1:A10")
For Each Fichier In dossier.Files
If Fichier.Name Like ("*" & c & "*") Then
Fichier.Name = "2014_09 " & c & ".pdf"
End If
Next Fichier
Next c
End SubNad
Nad t'es un chef !
Ça fonctionne du tonnerre
J'aurai pu chercher longtemps la syntaxe "Like ("*" & c & "*") "