[VBA] Renommage dossier & fichiers
Bonjour,
Dans le cadre de mon taf, nous allons nous retrouver à devoir renommer des fichiers pdf et leur dossier parent en masse. Concrètement, changer les 8 premiers caractères par 8 autres.
L'importation des fichiers PDF se fait correctement. La macro est très certainement perfectible, mais elle fait le taf.
Le problème provient de la macro de renommage.
Sub RenommerFichiersPDF()
' Définir les variables
Dim ws As Worksheet
Dim lastRow As Long
Dim i As Integer
Dim ancienNom As String
Dim nouveauNom As String
Dim dossier As String
Dim cheminAncien As String
Dim cheminNouveau As String
' Sélectionner la feuille active
Set ws = ActiveSheet
' Trouver la dernière ligne avec des données (à partir de la ligne 6)
lastRow = ws.Cells(ws.Rows.Count, 6).End(xlUp).Row
'Vérifier si il y a bien un nouveau code fournisseur de 8 caractères en cellule B2
nouveauNom = Trim(ActiveSheet.Range("B2").Value)
If Len(nouveauNom) <> 8 Then
MsgBox "Erreur : le nouveau code fournisseur n'est pas renseigné ou n'a pas le bon format.", vbExclamation
Exit Sub
End If
' Vérifier s'il y a des fichiers à traiter
If lastRow < 6 Then
MsgBox "Aucun fichier à renommer.", vbExclamation
Exit Sub
End If
' Boucle à travers chaque ligne contenant un fichier
For i = 6 To lastRow
ancienNom = ws.Cells(i, 1).Value
dossier = Left(ws.Cells(i, 4).Value, InStrRev(ws.Cells(i, 4).Value, "\") - 1)
cheminAncien = ws.Cells(i, 4).Value
nouveauNom = ws.Cells(i, 2).Value ' Nouveau nom du fichier
' Vérifier que la cellule B (nouveau nom) n'est pas vide
If Trim(nouveauNom) <> "" Then
' Nettoyer le nouveau nom en supprimant les caractères interdits
' nouveauNom = RemplacerCaracteresInterdits(nouveauNom)
'Vérifier que le nouveau nom est toujours valide
If Len(nouveauNom) > 0 Then
' Construire le chemin complet du nouveau fichier
cheminNouveau = dossier & "\" & nouveauNom & ".pdf"
' Vérifier si le fichier existe avant de le renommer
If Dir(cheminAncien) <> "" Then
' Vérifier si un fichier avec le nouveau nom existe déjà
If Dir(cheminNouveau) = "" Then
' Renommer le fichier
Name cheminAncien As cheminNouveau
ws.Cells(i, 3).Value = "Renommé"
Else
ws.Cells(i, 3).Value = "Erreur : Nom déjà existant"
End If
Else
ws.Cells(i, 3).Value = "Erreur : Fichier introuvable"
End If
Else
ws.Cells(i, 3).Value = "Erreur : Nom invalide"
End If
Else
ws.Cells(i, 3).Value = "Pas de nouveau nom"
End If
Next i
' Message de confirmation
MsgBox "Renommage terminé !", vbInformation
End SubLorsque je la lance, elle contrôle bien qu'il y a 8 caractères dans la cellule B2. Ce qui permet d'éviter un renommage à vide ou avec un mauvais nombre de caractères.
Ensuite, elle renomme bien tous les fichiers. Mais elle envoie, invariablement, le même message d'erreur : "Argument ou appel de procédure incorrect". Ce qui fait que même si je venais à mettre des éléments complémentaires après "Next i", ces effets ne s'appliqueraient pas.
Globalement, le fichier ressemble à ceci :
Je vous joins également un fichier si certains veulent faire des tests grandeur nature.
Je vous remercie de m'avoir lu jusqu'ici!
Bonjour,
Pour commencer, on ne met jamais de sub dans ThisWorbook s'ils ne font pas directement appel aux évènements du classeur
Vous insérer un module et vous mettez votre code dedans
Ensuite vous semblez confondre chemin et nom de fichier
cheminAncien = ws.Cells(i, 4).ValueEt
cheminNouveau = dossier & "\" & nouveauNom & ".pdf"Quelle est la ligne ou le code se bloque (surlignée en jaune) ?
Perso, je ferais un truc du style
Name cheminAncien & ancienNom As cheminNouveau
' ou
Name cheminAncien & "\" & ancienNom As cheminNouveauA+
Merci pour votre retour.
Pour commencer, on ne met jamais de sub dans ThisWorbook s'ils ne font pas directement appel aux évènements du classeur
Vous insérer un module et vous mettez votre code dedans
Il semblerait que cela ait suffit à faire disparaître le message d'erreur que j'avais.
Néanmoins, et c'est pour cela que j'avais fait appel aux bonnes âmes de ce forum, je n'avais aucune ligne surlignée en jaune dans le code de la macro, lorsque cette dernière était exécutée depuis la feuille.
En revanche, lancée depuis la console VBA, c'était Sub RenommerFichiersPDF() qui était surligné en jaune...