Suppression d'objets 'vbproject' ou de son code en vba excel

Description

Par rapport à une demande sur le forum, j?ai fait ces 3 procédures qui suppriment un
objet du Projet VBA Excel ou son code.

ATTENTION : ne fonctionne pas si le projet à vérifier (ou traiter) est vérouillé par un mot de passe !

Possibilité :
  • de supprimer un objet tels que UserForm, Module et Module de Classe
  • de supprimer du code dans un de ces objets
  • de supprimer du code dans l?évènement ThisWorkbook_Open


Voilà, donc cela reste très très simple et facilement adaptable à vos fichiers .xls

Dès que je peux, je rajouterai le code pour calculer quels sont les objets dans votre
projet, combien de ligne sont utilisées et le type des ojets (sachant que ce genre
de code doit être trouvable sur Codes Sources, il me semble avoir vu une source le faisant)

Source / Exemple :


' Il faut rajouter la référence suivante :
' Microsoft Visual Basic for Applications 6.0 Extensibility
' (Program Files\Microsoft Visual Studio\VB98\VB6EXT)

'*** 1 ERE POSSIBILITE : SUPPRESSION OBJET ***
'     Càd les UserForm, Module, Module de Classe
Sub EffaceModule()

    Workbooks.Open ("C:\Chemin\Nom Fichier.xls") 'une boite de dialogue se trouve dans le fichier excel(Zip) pour le 
' choix, au lieu de mettre le nom du chemin en dur
On Error Goto ErrHandle

' ici on supprime le composant nommé "Module1", dans le projet du classeur actif
ActiveWorkbook.VBProject.VBComponents.Remove ActiveWorkbook.VBProject.VBComponents("Module1")

MsgBox "Le Module a été suprimer"
ActiveWorkbook.Close True
Exit Sub

ErrHandle:
MsgBox "ERREUR dans la suppression du Module", vbOKOnly + vbCritical

End Sub

'*** 2 NDE POSSIBILITE : SUPPRESSION CODE DANS OBJET ***
'     Càd dans les UserForm, Module, Module de Classe (pour ThisWorkbook_Open, voir 3eme possibilité)
Sub EffaceCodeObjet()

    Workbooks.Open ("C:\Chemin\Nom Fichier.xls") 'une boite de dialogue se trouve dans le fichier excel(Zip) pour le 
' choix, au lieu de mettre le nom du chemin en dur
On Error Goto ErrHandle

' l'exemple au dessous c'est pour effacer le code dans Module1 (on peut faire pareil
'en remplacant 'Module1' par 'UserForm1', 'Class1'.(bref, mettre les noms de vos objets))

' ici on supprime le code dans "Module1", dans le projet du classeur actif
With ActiveWorkbook.VBProject.VBComponents("Module1").CodeModule
    .DeleteLines 1, .CountOfLines                  'de la 1ere à la derniere ligne
End With

MsgBox "Le code du Module a été suprimer"
ActiveWorkbook.Close True
Exit Sub

ErrHandle:
MsgBox "ERREUR dans la suppression du code du Module", vbOKOnly + vbCritical

End Sub

'*** 3 EME POSSIBILITE : SUPPRESSION CODE DANS THISWORKBOOK_OPEN ***
' qui dit ThisWorkbook_Open dit execution du code lors de l'ouverture du fichier.
' je n'arrive pas à désactiver les macros sans désactiver cette procédure donc j'ai dût tricher :

'Cette procédure sert uniquement à ouvrir le fichier voulu, SANS le rendre VISIBLE.
'Il faut placer le code placer en commentaire dans cette procédure en tout premier
'dans ThisWorkbook_Open du CLASSEUR ORIGINAL. Cela servira à effacer le code QUE SI
'le classeur est invisible.

Sub EffaceCodeThisWorkBook()
    Dim xlApp As New Excel.Application
    Dim xlBook As Workbook
    
        Set xlApp = CreateObject("Excel.Application")
xlApp.Visible = False
        Set xlBook = xlApp.Workbooks.Open("C:\Chemin\Nom Fichier.xls") 'une boite de dialogue se trouve dans le fichier
' excel(Zip) pour le choix, au lieu de mettre le nom du chemin en dur
    
xlApp.Visible = True
xlBook.Close True
        Set xlBook = Nothing
        Set xlApp = Nothing

'En utilisant cette procédure pour effacer dans ThisWorkbook_Open,
'il faut absolument placer ce code ci-dessous dans ThisWorkbook_Open
'du classeur original, en premier dans la pocédure

'If Application.Visible = False Then
'    With ActiveWorkbook.VBProject.VBComponents("ThisWorkbook").CodeModule
'        .DeleteLines 1, .CountOfLines
'    End With
'End If

End Sub

Conclusion :


Basé sur les explications de John Walkenbach (éditions Eyrolles) et adapté par rapport à une demande dans le Forum.
Attention, pour adapté ce code en VB6 (je n'ai jamais réussi) il faut référencé le 'VBProject' du futur exe.

Pour tout ce qui touche les objets, vous pouvez également ajouter la bibliothèque "VBIDE".

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.