Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Masquer code/ Supprimer macro une fois chargée

C

Claire

Guest
Bonjour,

Est-il possible de masquer le code d'une macro et de supprimer une macro une fois qu'elle est chargée ?

Mon objectif est de :
- Masquer le code aux utilisateurs
- Une fois le fichier excel généré avec les macros, supprimer les macros pour qu'une fois le fichier sauvegardé, les macros ne puissent être rappelées.

Merci.
Claire
 
Z

Zon

Guest
Salut,

un option private module en haut de tes modules permettent de ne pas pouvoir lancer les macros par Alt+f8 ou apr outils/macro

Pour masquer le code aux utilisateurs tu peux verouiller l'affichage de ton projet dans VBE outils/propriétés de VBA project/protection.

Pour supprimer le code tu lances macrokiller dans l'évènement beforeclose de thisworkbook(si tu n'as pas protéger ton projet) macrokiller thisworkbook

Sub MacroKiller(C As Workbook) 'Coche Faire confiance au projet Visual Basic
 Dim VBC As Object
 On Error GoTo Errr
  With C.VBProject
    For Each VBC In .VBComponents
     If VBC.Type = 100 Then
       With VBC.CodeModule
        .DeleteLines 1, .CountOfLines
        .CodePane.Window.Close
       End With
     Else: .VBComponents.Remove VBC
     End If
    Next VBC
  End With
Errr: 'le sendkeys est valable pour les versions Fr
  If Err = 1004 Then SendKeys "%om2d%r~", True: MacroKiller C
End Sub

'-----------------------si tu as protéger ton projet----------------------------
'dans le module thisworkbook
'mets en commentaire la procédure quitter pour faire tes tests

Private Sub Workbook_BeforeClose(Cancel As Boolean)
 Application.ScreenUpdating = False
 UnprotectVBProject ThisWorkbook, "Lemotdepasse"
 MacroKiller ThisWorkbook
 Quitter
End Sub

'dans un module standard copies ceci
Sub UnprotectVBProject(WB As Workbook, ByVal Password$) 'trouvé chez FRed Sig
Dim vbProj As Object
 Set vbProj = WB.VBProject
&nbsp;If vbProj.Protection <> 1 Then Exit Sub
&nbsp;Set Application.VBE.ActiveVBProject = vbProj
&nbsp;SendKeys Password & "~~"
&nbsp;Application.VBE.CommandBars(1).FindControl(ID:=2578, recursive:=True).Execute
&nbsp;DoEvents 'rajout perso
End Sub

Sub MacroKiller(C As Workbook)&nbsp;'Coche Faire confiance au projet Visual Basic
&nbsp;Dim VBC As Object
&nbsp;On Error GoTo Errr
&nbsp; With C.VBProject
&nbsp;&nbsp;&nbsp; For Each VBC In .VBComponents
&nbsp;&nbsp;&nbsp;&nbsp; If VBC.Type = 100 Then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; With VBC.CodeModule
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .DeleteLines 1, .CountOfLines
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .CodePane.Window.Close
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End With
&nbsp;&nbsp;&nbsp;&nbsp; Else: .VBComponents.Remove VBC
&nbsp;&nbsp;&nbsp;&nbsp; End If
&nbsp;&nbsp;&nbsp; Next VBC
&nbsp; End With
Errr: 'le sendkeys est valable pour les versions Fr
&nbsp; If Err = 1004 Then SendKeys "%om2d%r~", True: MacroKiller C
End Sub

Sub Quitter()
&nbsp;Application.Quit
&nbsp;SendKeys "%o"
End Sub

Toutefois, un utilisateur un peu averti fera sauter facilement la protection sous Excel.

A+++
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…