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...
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 !
Bonjour à tous
VBA ne propose pas de méthode automatisée pour déprotéger/protéger un classeur à partir d'un autre classeur, même avec le MDP connu.
Sinon à quoi servirait la protection.
Cela garantit la sécurité
 
bonjour
si c'est le classeur qui est protégé non mais si c'est le projet vba oui c'est possible
a condition que tu ai le mot de passe
on ne t'aidera pas a cracker un fichier ici
bonsoir patricktoulon.. et les autres !
Tout d'abord, merci de me rappeler les règles de bonne conduite à moi qui traîne sur les forums Excel depuis une quinzaine d'années ! Pour les anciens qui ont connu le MPFE, la réponse à une demande de "crack" était : "et tu veux les clés de la Ferrari avec ?"
@patricktoulon : il est clairement écrit :
le fichier est protégé par mot de passe (que j'ai créé, je ne veux pas un outil de crack !!!)
Mais je me rends compte que je me suis mal exprimé, donc mille excuses.... Le projet VBA est protégé par un mot de passe (c'est celui que j'ai créé moi-même, je le rappelle au cas où mon premier message ne l'aurait pas dit), et c'est le projet VBA que je souhaite pouvoir modifier !
Tout ce que je souhaite, c'est s'il est possible d'avoir une ligne de code du genre :
ProjectVBA.Unprotect Password := "toto" (je le rappelle, "toto", c'est moi qui l'ai fait !), je ne demande pas à ce qu'on me donne la méthode pour trouver "toto" (j'espère que maintenant je suis clair !!!)
Evidemment, ce ne sera peut-être pas qu'une ligne....
Donc, encore une fois si un généreux contributeur voulait bien m'orienter sur une piste....

Bon week-end à tou(te)s !
 
RE..
@ThierryP
Je ne comprend pas vraiment la problématique.
On peut ouvrir un classeur (protégé ou pas) à partir d'un autre classeur .(Sans clef de la Ferrari)😉
Modifier dans ce classeur ce que l'on veut puis le fermer.
Ce code ouvre un classeur à partir d'un autre classeur
Code:
 Workbooks.Open Filename:="D:\Ici le ou les répertoires\ici le nom du classeur"
Une fois ouvert, il sera le classeur actif
 
Dernière édition:
bon alors si c'est bien le projet vba du classeur qui est protégé (ce qui t'empeche d'explorer les modules alors on utilisera une partie du code du skinner calendar de la version 4.1
basé sur le code du calendar 4.1 avec l'ancien skinner
cet exemple t'ouvre le fichier ,ouvre vbe appelle le dialog de mot de passe ,tape le mot de passe , valide et ferme le dialog
VB:
Sub test2()
    Dim fichier As Variant, wbk As Workbook, frm$
    Application.ScreenUpdating = False

    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
        With CreateObject("wscript.shell")
            .SendKeys "toto"'mettre le mot de passe ici '
            .SendKeys "{ENTER}"
            .SendKeys "{ESC}"
        End With
        Application.VBE.CommandBars(1).FindControl(ID:=2578, recursive:=True).Execute
        'Application.Wait TimeValue(Now + 0.00001)
    End If
    ' On Error GoTo erreur

End Sub
voila
patrick
 
bon alors si c'est bien le projet vba du classeur qui est protégé (ce qui t'empeche d'explorer les modules alors on utilisera une partie du code du skinner calendar de la version 4.1
basé sur le code du calendar 4.1 avec l'ancien skinner
cet exemple t'ouvre le fichier ,ouvre vbe appelle le dialog de mot de passe ,tape le mot de passe , valide et ferme le dialog
VB:
Sub test2()
    Dim fichier As Variant, wbk As Workbook, frm$
    Application.ScreenUpdating = False

    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
        With CreateObject("wscript.shell")
            .SendKeys "toto"'mettre le mot de passe ici '
            .SendKeys "{ENTER}"
            .SendKeys "{ESC}"
        End With
        Application.VBE.CommandBars(1).FindControl(ID:=2578, recursive:=True).Execute
        'Application.Wait TimeValue(Now + 0.00001)
    End If
    ' On Error GoTo erreur

End Sub
voila
patrick
Bonsoir patricktoulon,
Déjà bravo pour le match d'aujourd'hui (enfin, hier !), si tu es fan de rugby !!!
Un peu tard pour tester ce soir, mais cela ressemble à ce que je voudrais ! Je testerai ça demain tranquillement...
En tous cas, merci d'avoir pris le temps de comprendre ma demande, ce qui n'est pas le cas de tout le monde visiblement !
Cordialement,
 
Est-ce que lire attentivement la demande fait aussi partie de la charte du forum ??????????
non ça va il ne s'agit pas ici de cracker mais de faire une manip que tu ferais en emps normal à la main donc ça va
sinon je ne te l'aurait pas donner
et @Rheeem a raison j'aurais du le dire
en effet activer cette option dans excel est obligatoire pour travailler avec le VBE
 
Bonjour le forum,

@patricktoulon chez moi (Win 11 Excel 2019) Application.Wait est indispensable :
VB:
Sub test2()
    Dim fichier As Variant, wbk As Workbook, frm$
    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
A+
 
non ça va il ne s'agit pas ici de cracker mais de faire une manip que tu ferais en emps normal à la main donc ça va
sinon je ne te l'aurait pas donner
et @Rheeem a raison j'aurais du le dire
en effet activer cette option dans excel est obligatoire pour travailler avec le VBE
C'est bien qu'on arrive à se comprendre !!! Je n'ai pas prêté attention à la remarque de Rheeem, parce que j'active toujours cette option, mais c'est à noter effectivement !
job75 a été beaucoup plus réactif que moi.... mais pour ma défense, un magnifique dimanche de printemps ensoleillé m'a éloigné de mon PC 😎
Du coup, je pense que je n'aurais pas de souci !
Me reste plus qu'à adapter pour re-protéger en fin de traitement ! ☺️👍
Merci pour le coup de main !
 
Bonjour ThierryP, le forum,
Me reste plus qu'à adapter pour re-protéger en fin de traitement ! ☺️👍
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+
 
Dernière édition:
- 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
543
  • Question Question
Microsoft 365 Code VBA
Réponses
10
Affichages
803
Retour