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 SubMacro "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
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 SubBonjour 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
Cdt