Récurssivité sous dossiers pour programme qui renomme des fichiers

Bonjour, j'ai un programme qui renome les documents d'un fichier. Voulant qu'il renomme aussi les documents des sous dossiers, j'ai essayé d'utiliser une fonction récurssive. En orange les lignes en rapport avec la récurssivité. La ligne bleu génère un message d'erreur : Erreur de compilation ; Nombre d'arguments incorrect ou affectation de propriété incorrecte.

Débutante en excel, je n'arrive pas à corriger cette erreur. Merci pour votre aide.

Sub Rename()


Dim RegEx As VBScript_RegExp_55.RegExp
Dim Matches As VBScript_RegExp_55.MatchCollection
Dim Match As VBScript_RegExp_55.Match
Dim Filename As String
Dim Result As String
Dim path As String
Dim Temp As String


Dim Fso As Scripting.FileSystemObject
Dim SourceFolder As Scripting.Folder
Dim SubFolder As Scripting.Folder
Dim FileItem As Scripting.File


Dim chemin As String
chemin = "P:\Test\"

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



path = "P:\Test\"

For Each FileItem In SourceFolder.Files
Set RegEx = New VBScript_RegExp_55.RegExp
Filename = Dir(path & "*.*")
Do While Filename <> "" ' REGARDE SI LE NOM EST FORMALISE
Temp = Replace(Filename, "-", "_") ' remplace les tiret du haut par des tiret du bas
RegEx.Pattern = "^(.+)(_V[0-9]+)\.(.+)$" ' Teste si le nom est formalisé
If Not RegEx.Test(Temp) Then ' SI NON DECOUPE ET REMPLACE LES TIRETS
RegEx.Pattern = "^([^0-9|\.|_]+)_*([0-9]*)\.(.+)$" ' Découpe le nom pour récupérer les parties à réassembler en excluant le underscore
Set Matches = RegEx.Execute(Temp)
If (Matches(0).SubMatches(1)) = "" Then
Result = "P:\Test\" & RegEx.Replace(Temp, "$1_V1.$3") ' réassemble avec les morceaux trouvés et V1 car pas de numérotation
Else
Result = path & RegEx.Replace(Temp, "$1_V$2.$3") ' Réassemble les morceaux en insérant le _V
End If
Else
Result = path & Temp
End If
Name path & Filename As Result
Filename = Dir()
Loop


Next FileItem

For Each SubFolder In SourceFolder.SubFolders
Rename SubFolder.path
Next SubFolder


MsgBox "Terminé"

End Sub

Bonjour,

Apprenez à indenter votre code correctement au niveau des For .. Next et If ... Else ...End If et à utiliser la balise "</>" pour le poster.

ci-dessous code

Sub Rename()

    Dim Fso As Scripting.FileSystemObject
    Dim dossier_départ As Scripting.Folder

    Const chemin As String = "P:\Test\"

    '// création objet FilesSystem
    Set Fso = New FileSystemObject

    '// recherche des fichiers
    Set dossier_départ = Fso.GetFolder(chemin)
    rech_fichier dossier_départ

    '// message de fin
    MsgBox "Terminé"

End Sub

Sub rech_fichier(dossier As Object)
    Dim sous_dossier As Object, fichier As Object

    Dim RegEx As VBScript_RegExp_55.RegExp
    Dim Matches As VBScript_RegExp_55.MatchCollection
    Dim Match As VBScript_RegExp_55.Match
    Dim Filename As String, Result As String, Temp As String

    '// recherche fichiers
    For Each fichier In dossier.Files
        Set RegEx = New VBScript_RegExp_55.RegExp
        Filename = fichier.Name

        Temp = Replace(Filename, "-", "_") ' remplace les tiret du haut par des tiret du bas
        RegEx.Pattern = "^(.+)(_V[0-9]+)\.(.+)$" ' Teste si le nom est formalisé
        If Not RegEx.Test(Temp) Then ' SI NON DECOUPE ET REMPLACE LES TIRETS
            RegEx.Pattern = "^([^0-9|\.|_]+)_*([0-9]*)\.(.+)$" ' Découpe le nom pour récupérer les parties à réassembler en excluant le underscore
            Set Matches = RegEx.Execute(Temp)
            If Matches.Count = 0 Then
                Result = RegEx.Replace(Temp, "$1_V1.$3") ' réassemble avec les morceaux trouvés et V1 car pas de numérotation
            Else
                Result = RegEx.Replace(Temp, "$1_V$2.$3") ' Réassemble les morceaux en insérant le _V
            End If
        Else
            Result = Temp
        End If
        If Result <> Filename Then fichier.Name = Result
    Next fichier

    '// recherche sous-dossier
    For Each sous_dossier In dossier.SubFolders
        rech_fichier sous_dossier
    Next sous_dossier

End Sub

Super ça marche. Merci beaucoup pour votre aide

Petit problème avec le nouveau code ducoup, quand j'ai un fichier sans chiffre exemple : tomate.pdf il devais créer un fichier tomate_V1.pdf et il crée tomate_V.pdf

La numérotation est partie entre temps

essayer cette modif :

            Set Matches = RegEx.Execute(Temp)
            If Matches.Count > 0 Then

Là il fait l'inverse il me met des 1 même quand il y a des chiffres.

Exemple: Bonjour-41 doit être transformé en Bonjour_V41 et il me le transformer en Bonjour_V1

Mais le problème d'avant est résolu...

A vous de revoir votre code de transformation du nom de fichier.

Cette instruction bugge quand il n'y a pas de correspondance

If (Matches(0).SubMatches(1)) = "" Then

c'est pourquoi je l'ai remplacée provisoirement par

If Matches.Count = 0 Then  (pas de correspondance)

Très bien. Merci beaucoup pour votre aide.

Rechercher des sujets similaires à "recurssivite dossiers programme qui renomme fichiers"