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

Soyez le premier à donner votre avis sur cette source.

Vue 17 431 fois - Téléchargée 554 fois

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

Ajouter un commentaire Commentaires
Messages postés
17288
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
70
'essaye' de l'adapter 'en vain'...

y'a pas grand chose a faire, le code de l'un et l'autre sont très similaires...
(1ère étape, Projet > Références > Microsoft Excel X.0)
Messages postés
9
Date d'inscription
vendredi 16 avril 2004
Statut
Membre
Dernière intervention
2 janvier 2009

Bonjour
Je reviens sur ce code et essaye de l'adapter en VB6.
Y a t'il des sources vb6 traitant ce type d'objet (excel)?

Je cherche en vain.

Merci
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Salut,

suite à une demande sur le forum :

Si vous souhaitez traiter un classeur protégé, il faut connaître le mot de passe, dans ce cas, faite ceci :

il faut aller dans cette procédure :
Sub Cherche_Composants()
' *** 2ème dernière procédure du module Module1

Ensuite, modifier l'instrucion Workbooks.Open (FichierATraiter) par

Workbooks.Open Filename:=FichierATraiter, Password:="mot de passe"

++
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Salut Rey (et merci) !

C'est ce que j'allais mettre en lien, comme quoi le dernier message de ce Topic répondait certainement à sa demande :

http://www.vbfrance.com/infomsg_FAIRE-APPARAITRE-USERFORM_800977.aspx#7

++
Messages postés
9
Date d'inscription
vendredi 16 avril 2004
Statut
Membre
Dernière intervention
2 janvier 2009

bonjour et merci pour l'info.
Cela fonctionne.
Afficher les 19 commentaires

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.