[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 Sub

Lorsque 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 :

image

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).Value

Et

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 cheminNouveau

A+

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...

Rechercher des sujets similaires à "vba renommage dossier fichiers"