Executer une macro dans tous les fichiers xlsm dans un dossier

Bonjour,

J'aimerais exécuter une macro "VerrouillerFeuilles" avec le code ci-bas pour vérrouiller toutes les feuilles des fichiers xlsm dont leurs noms se terminent par 2023-2024 dans un dossier et ses sous dossiers dans C:\Users\nasben\OneDrive\Ministère\Tests\, la macro s'exécute jusqu'à la fin mais mais ça ne fonctionne pas je ne vois aucune modification.
Pour info, si j'éxecute manuellement la macro "VerrouillerFeuilles" dans un fichier ça fonctionne sans problème, pourriez vous me dire ou ça bloque SVP pour le code ci-dessous ?

Merci de votre aide

Code pour executer la macro

Sub ExecuterMacro()
 Dim cheminDossier As String
 Dim fichier As String
 Dim classeur As Workbook
 cheminDossier = "C:\Users\nasben\OneDrive\Ministère\Tests\"
 Application.DisplayAlerts = False
 fichier = Dir(cheminDossier & "*2023-2024*.xlsm", vbNormal) Do While fichier <> ""
 Set classeur = Workbooks.Open(cheminDossier & fichier, UpdateLinks:=False, ReadOnly:=False)
 classeur.Application.Run "VerrouillerFeuilles"
 classeur.Close SaveChanges:=True
 fichier = Dir() Loop
 Application.DisplayAlerts = True
 MsgBox "La macro a été exécutée sur tous les fichiers correspondants."
 End Sub

Macro "VerrouillerFeuilles"

Sub VerrouillerFeuilles()
 Dim feuille As Worksheet
 Dim motDePasse As String
 motDePasse = "DPBF"
 For Each feuille In ThisWorkbook.Sheets 
 If feuille.ProtectContents Then 
 feuille.Unprotect Password:=motDePasse 
 End If 
 Next feuille 
 For Each feuille In ThisWorkbook.Sheets 
 feuille.Protect Password:=motDePasse 
 Next feuille 
 ThisWorkbook.Protect Structure:=True, Password:=motDePasse End Sub<br>

Edit modo : merci de mettre le code CORRECTEMENT entre balises SVP avec le bouton </>

Hello,

Je ne comprends pas trop l'intérêt de cette instruction :

classeur.Application.Run "VerrouillerFeuilles"

Pourquoi tu ne mets pas tes 2 boucles de cette macro à la place ?

Bonjour Rag02700,

Merci de votre réponse :), je ne suis trop pro dans la programmation, j'ai trouvé ces codes sur internet, j'essaie alors de trouver une methode plus simple pour executer mce que je voulais, je viens de remplacer classeur.Application.Run "VerrouillerFeuilles" par le code"VerrouilerFeuilles" sans les sub mais ça fonctionne toujours pas.

Hello,

à tester :

Sub ExecuterMacro()

     Dim cheminDossier As String
     Dim fichier As String
     Dim classeur As Workbook
    Dim feuille As Worksheet
     Dim motDePasse As String

     motDePasse = "DPBF"
     cheminDossier = "C:\Users\nasben\OneDrive\Ministère\Tests\"
     Application.DisplayAlerts = False
     fichier = Dir(cheminDossier & "*2023-2024*.xlsm", vbNormal)

    Do While fichier <> ""
     Set classeur = Workbooks.Open(cheminDossier & fichier, UpdateLinks:=False, ReadOnly:=False)
         For Each feuille In classeur.Sheets
             If feuille.ProtectContents Then
                feuille.Unprotect Password:=motDePasse
             End If
         Next feuille

         For Each feuille In classeur.Sheets
            feuille.Protect Password:=motDePasse
         Next feuille
        classeur.Protect Structure:=True, Password:=motDePasse
        classeur.Close SaveChanges:=True
        fichier = Dir()
    Loop

 Application.DisplayAlerts = True
 MsgBox "La macro a été exécutée sur tous les fichiers correspondants."

 End Sub

Bonjour Rag02700,

Désolée du délai de réponse, je viens de tester le code ça ne fonctionne pas. car je pense que c'est à cause que ce code à executer se trouve dans un classeur à part, c'est comme si il essaie d'executer le vérouillage dans le classeur ou se trouve le code non pas dans les fichiers recherchés (ceux qui se terminent avec 2023-2024).
J'ai aussi essayé la methode du FileSystemObject mais en vain.

Merci :)

Hello,

Le code ouvre les fichiers puis sur chaque fichier, le code deverrouille si pas verrouillée toutes les feuilles, puis reverrouille toutes les feuilles.

Ce n'est pas ce que tu cherches à faire ?

Bonjour à tous,

J'ai aussi essayé que la macro fasse le tri sur "2023-2024" dans le dossier mais çà veut pas.

Mais si on liste les fichiers du répertoire sur un onglet, on peut faire le tri et la protection, normalement.

Sub ExecuterMacro()
'Ouvrir les fichiers d'un dossier comportant "2023-2024"
 'Pour que la macro fonctionne, la référence "Microsoft Office XX.X Object Library" doit être cochée dans le vba(outils/references)
 Dim Dossier As String, Fichier As String, Wb2 As Workbook, Wb1 As Workbook, ws1 As Worksheet
 Dim ws As Worksheet
 Application.DisplayAlerts = False
    Set Wb1 = ThisWorkbook
    Dossier = "C:\Users\nasben\OneDrive\Ministère\Tests\"
     i = 0
     Fichier = Dir(Dossier)
            'If Dir(Fichier) <> "" Then
            'End If
            Set ws1 = Sheets("Feuil1") 'onglet fichier macros
                Do While Fichier <> ""
                    i = i + 1
                    ws1.Range("A" & i).Value = Fichier
                    Fichier = Dir
                Loop
                drn1 = ws1.Range("A100").End(xlUp).Row
                For i = 1 To drn1
                    If ws1.Range("A" & i).Value Like "*" & "2023-2024" & "*" Then
                        nomFic = ws1.Range("A" & i).Value
                        Set Wb2 = Workbooks.Open(Dossier & nomFic, 0, ReadOnly:=False) 'onglet fichier en 2023-2024
                            For Each ws In Wb2.Sheets
                                    ws.Protect mdp
                            Next ws
                    End If
                Next i
            'classeur.Close SaveChanges:=True
 Application.DisplayAlerts = True
 MsgBox "La macro a été exécutée sur tous les fichiers correspondants."
 End Sub
12macros.xlsm (16.20 Ko)

Cdt

Rechercher des sujets similaires à "executer macro tous fichiers xlsm dossier"