De: Laurent Longre Objet: Re: Projet VBA : Verrouiller et déverrouiller Date : mercredi 20 septembre 2000 18:15 HD a écrit : > > * Comment fais tu avec le SendKey pour déclencher la demande de mot de passe > du projet et y répondre??? Bon, eh bien voilà. Comme tu peux le constater, c'est excessivement cochon. '================================================= Private Declare Function FindWindowA Lib "User32" _ (ByVal lpClassName As String, _ ByVal lpWindowName As String) As Long Private Declare Function GetForegroundWindow Lib "User32" () As Long Private Declare Function setForegroundWindow Lib "User32" _ (ByVal hWnd As Long) As Long Function Déprotège(Classeur As String, MdP As String) As Boolean Dim XLhWnd As Long, VBEhWnd As Long, CurhWnd As Long Dim Wbk As Workbook On Error Resume Next set Wbk = Workbooks(Dir$(Classeur)) On Error GoTo Fin If Not Wbk Is Nothing Then If Wbk.FullName <> Classeur Then Exit Function If Not Wbk.Saved Then Wbk.Save Else: Application.ScreenUpdating = False End If CurhWnd = GetForegroundWindow XLhWnd = FindWindowA(vbNullString, Application.Caption) With Application.VBE VBEhWnd = FindWindowA(vbNullString, .MainWindow.Caption) If CurhWnd = XLhWnd Then setForegroundWindow VBEhWnd .CommandBars.FindControl(ID:=2557).Execute ' NE PAS EFFACER, même si le classeur est déjà ouvert !!!!!! Workbooks.Open Classeur If ActiveWorkbook.VBProject.Protection = vbext_pp_locked Then SendKeys "~" & MdP & "~", True .ActiveCodePane.Window.Close End If End With setForegroundWindow CurhWnd Déprotège = True Exit Function Fin: End Function Sub Test() ' Déprotection du projet VBA C:\Temp\Test.xls (mot de passe "Zaza"), ' Ajout d'un module standard dans ce projet, puis rétablissement ' de la protection Const Classeur = "C:\Temp\Test.xls" If Not Déprotège(Classeur, "Zaza") Then MsgBox "Erreur" Else MsgBox "Projet VBA déprotégé." With Workbooks(Dir$(Classeur)) .VBProject.VBComponents.Add vbext_ct_StdModule .Close True End With Workbooks.Open Classeur MsgBox "Projet reprotégé, ajout d'un module standard." End If End Sub '================================================= Testé sous Excel 2000 SR-2. Petit inconvénient : si le classeur à "déprotéger" (cad à ouvrir en entrant le mot de passe) est déjà ouvert au moment ou la procédure "Déprotège" s'exécute, il sera ré-enregistré si des modifications y ont été faites par l'utilisateur, avant la déprotection. > Le problème c'est qu'avec un fichier XLA, je ne réussit pas à déclencher les > macros du fic xla à partir de mon fic xls!!! Pourquoi ? Il suffit de crér une référence (Outils -> Références) du XLS vers le XLA. Ou alors, à la limite, d'utiliser la méthode Run : Run "MaProcédureXLA" Bonne chance, Laurent