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

Statistiques des forums

Discussions
312 839
Messages
2 092 696
Membres
105 511
dernier inscrit
karimdauphins