Microsoft 365 Déverrouiller un projet VBA par code

  • Initiateur de la discussion Initiateur de la discussion ThierryP
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

ThierryP

XLDnaute Occasionnel
Bonsoir le forum,

Je crois que tout est dans le titre ! Depuis un fichier modele, je voudrais automatiser la mise à jour des fichiers "enfants", mais le fichier est protégé par mot de passe (que j'ai créé, je ne veux pas un outil de crack !!!), donc remplacer soit des lignes de code ou remplacer des modules / USF.
Et bien sûr je me fais jeter !

Y a-t-il un moyen en VBA (depuis donc un fichier qui n'est pas le fichier à modifier) de déverrouiller le projet, puis de re-protéger en fin de modification ?

Merci d'avance à tout généreux contributeur !
 
Solution
re
ben c'est simple
la boite est modale donc tu ne peux plus rien faire le code s'arrête a l'affichage de la boite comme pratiquement tout les dialogue
en tapant les touche avant comme c'est avec un object wscript.shell des que tu commence a taper le code continue et donc la boite de dialoguee s'affiche même si dans certains contexte de puissance pc tu n'a pas le temps de la voir mais elle s'affiche bel et bien
Après pas mal de recherches, tests et tâtonnements, j'ai fini par abandonner le SendKeys !!! Dans tous mes essais, soi la boîte de saisie apparaît, soit il ne se passe rien !!
Finalement, j'ai trouvé une procédure qui ne fait pas vraiment ce que je voudrais car elle supprime temporairement le mot de passe (non, promis je...
Si l'on veut rouvrir le fichier après sa fermeture utiliser :
VB:
Dim fichier As Variant, wbk As Workbook 'mémorise les variables

Sub Déverrouille()
    fichier = Application.GetOpenFilename("EXCEL Files XLSM (*.xlsm), *.xlsm", 1, "ouvrir un fichier", "select")
    If fichier = False Then Exit Sub
    Set wbk = Workbooks.Open(fichier)
    If wbk.VBProject.Protection Then
        Set Application.VBE.ActiveVBProject = wbk.VBProject
        CreateObject("wscript.shell").SendKeys "toto{ENTER}{ESC}%q" 'mdp toto, Alt+Q pour revenir sur Excel
        Application.VBE.CommandBars(1).FindControl(ID:=2578, recursive:=True).Execute
        Application.Wait Now + 1 / 86400 'attend l'affichage de la boîte
    End If
End Sub

Sub Verrouille()
    wbk.Close True 'enregistre et ferme le fichier
    Set wbk = Nothing
    Workbooks.Open fichier 'rouvre le fichier
End Sub
 
Dernière édition:
Bonjour ThierryP, le forum,

Il suffit de ne pas toucher au mot de passe dans le VBAProject puis de fermer le fichier :
VB:
Dim fichier As Variant, wbk As Workbook 'mémorise les variables

Sub Déverrouille()
    fichier = Application.GetOpenFilename("EXCEL Files XLSM (*.xlsm), *.xlsm", 1, "ouvrir un fichier", "select")
    If fichier = False Then Exit Sub
    Set wbk = Workbooks.Open(fichier)
    If wbk.VBProject.Protection Then
        Set Application.VBE.ActiveVBProject = wbk.VBProject
        CreateObject("wscript.shell").SendKeys "toto{ENTER}{ESC}%q" 'mdp toto, Alt+Q pour revenir sur Excel
        Application.VBE.CommandBars(1).FindControl(ID:=2578, recursive:=True).Execute
        Application.Wait Now + 1 / 86400 'attend l'affichage de la boîte
    End If
End Sub

Sub Verrouille()
wbk.Close True 'enregistre et ferme le fichier
End Sub
A+
Bonjour job75,

Merci pour le retour ! J'ai enfin pu tester... Un truc me turlupine : si tu envoies le sendkeys avant de faire apparaître la boîte, comment renseigner le mot de passe ??? J'ai donc modifié l'ordre des lignes, du coup j'ai la fenêtre de saisie du mot de passe qui apparaît et je dois saisir à la main, donc le sendkeys va quelque part, mais où??? Et je ne peux pas tester en pas à pas, puisque le sendkeys envoie dans l'éditeur de code !
 
re
ben c'est simple
la boite est modale donc tu ne peux plus rien faire le code s'arrête a l'affichage de la boite comme pratiquement tout les dialogue
en tapant les touche avant comme c'est avec un object wscript.shell des que tu commence a taper le code continue et donc la boite de dialoguee s'affiche même si dans certains contexte de puissance pc tu n'a pas le temps de la voir mais elle s'affiche bel et bien
 
re
ben c'est simple
la boite est modale donc tu ne peux plus rien faire le code s'arrête a l'affichage de la boite comme pratiquement tout les dialogue
en tapant les touche avant comme c'est avec un object wscript.shell des que tu commence a taper le code continue et donc la boite de dialoguee s'affiche même si dans certains contexte de puissance pc tu n'a pas le temps de la voir mais elle s'affiche bel et bien
Après pas mal de recherches, tests et tâtonnements, j'ai fini par abandonner le SendKeys !!! Dans tous mes essais, soi la boîte de saisie apparaît, soit il ne se passe rien !!
Finalement, j'ai trouvé une procédure qui ne fait pas vraiment ce que je voudrais car elle supprime temporairement le mot de passe (non, promis je ne publie pas le code !!) mais du coup, j'ai pu l'adapter à mon besoin.

Merci à tous ceux qui ont pris le temps de m'aider !!
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
17
Affichages
321
Réponses
32
Affichages
532
  • Question Question
Microsoft 365 Code VBA
Réponses
10
Affichages
803
Retour