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

Suppression de modules via VBA

coco_lapin

XLDnaute Impliqué
Bonjour le forum.

Avant de diffuser un classeur je souhaiterais supprimer un bon nombre de modules en utilisant du code VBA (donc autrement que manuellement) dans le but de réduire la taille du classeur.

Avez-vous des solutions?
 

MichelXld

XLDnaute Barbatruc
bonjour coco_lapin , bonjour Charly

j'espere que ces infos pourront t'aider


Supprimer une procedure Workbook_Open par macro
*********************************************
A chaque ouverture du classeur contenant la macro , une copie du document est créée , expurgée de la procédure Workbook_Open

Private Sub Workbook_Open()
Dim Debut As Integer, Lignes As Integer
'enregistrement du nouveau classeur
Thisworkbook.Saveas Filename:='C:\\excel\\enregistrement ' & Format(Time, 'hh mm ss') & '.xls'
'suppression de la procedure Workbook_Open
With Thisworkbook.VBProject.VBComponents('Thisworkbook').codemodule
Debut = .Procstartline('Workbook_Open', 0)
Lignes = .Proccountlines('Workbook_Open', 0)
.Deletelines Debut, Lignes
End With
'sauvegarde modification
Thisworkbook.Save
End Sub



Supprimer la macro nommée 'MaMacro' dans le 'module3'
**************************************

Sub supprimerUneMacroPrecise()
Dim Debut As Integer, Lignes As Integer

With ThisWorkbook.VBProject.VBComponents('Module3').CodeModule
Debut = .ProcStartLine('MaMacro', 0)
Lignes = .ProcCountLines('MaMacro', 0)
.DeleteLines Debut, Lignes
End With
End Sub



Supprimer un module
******************

Sub supprimerUnModule()
With ThisWorkbook.VBProject.VBComponents
.Remove .Item('Module2')
End With
End Sub



Supprimer un UserForm par macro
*******************************

Sub suppressionUSF()
'necessite d'activer la reference Microsoft Visual Basic for Applications Extensibility 5.3
Dim VBComp As VBComponent
Set VBComp = ThisWorkbook.VBProject.VBComponents('UserForm1')
ThisWorkbook.VBProject.VBComponents.Remove VBComp
End Sub



Supprimer la totalité des procédures du classeur
*******************************************

Sub SupprimeToutVBA()
'copie le classeur en supprimant la totalité des procedures
Dim VbComp As VBComponent

ThisWorkbook.SaveAs 'C:\\test.xls'

For Each VbComp In ActiveWorkbook.VBProject.VBComponents
Select Case VbComp.Type
Case 1 To 3
ActiveWorkbook.VBProject.VBComponents.Remove VbComp
Case Else
With VbComp.CodeModule
.DeleteLines 1, .CountOfLines
End With
End Select
Next VbComp

ActiveWorkbook.Save
End Sub





Supprimer les modules vides dans le classeur actif
********************************************

Sub supprimerTousModulesVides()
Dim vbComp As Object
Dim i As Long, j As Long

For Each vbComp In ActiveWorkbook.VBProject.VBComponents
If vbComp.Type = 1 Then
i = vbComp.CodeModule.CountOfDeclarationLines + 1
j = vbComp.CodeModule.CountOfLines
If j < i Then ActiveWorkbook.VBProject.VBComponents.Remove vbComp
End If
Next
End Sub




bonne journée
MichelXld
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonsoir à tous,


Sans oublier aussi ce Fil en complément de ce que nous dit notre ami Michel :

DATABASE XLD RECENCEMENT FIL 21649 'VBA Effacement/Ecriture Macro'

Une solution de mon copain Laurent Longre sur le MPFE à l'époque, pas testée, mais comme il le dit lui-même c'est un peu 'cochon' :



Bonne Soirée
@+Thierry
 

Mi_

XLDnaute Occasionnel
Bonsoir,

La procédure ci-dessus s'applique à un tier classeur.

Mais comment déverrouiller le classeur actif lui-même (le projet), éffacer les modules, puis le reverrouiller ?


Je me retrouve dans l'impossibilitée d'alleger mon classeur une fois le travail fini, pour l'archivage, car le projet est verrouillé et le code ThisWorkbook.VBProject.VBComponents.Remove ne fonctionne pas.
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Re bonsoir Mi, le Fil, le Forum

Essaies d'en faire une XLA, Car de toute manière jamais tu ne pourras le faire en procédant depuis le classeur lui-même.

Bonne Soirée
[ol]@+Thierry[/ol]
 

Mi_

XLDnaute Occasionnel
Merci _Thierry, au moins j'ai la confirmation que ce n'est pas possible.

C'est quand même un peu bête de ne pas pouvoir verrouiller/deverrouiller le projet VBA par VBA, dans son classeur, si on connait le mot de passe.
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Re bonsoir Mi_

C'est aussi un peu normal, l'intégration de VB6 dans VBA oblige de toute manière à sauver/fermer le classeur pour qu'une protection prenne effet, ceci même manuellement. Ce n'est pas 'bête' c'est juste que VB est intégré ) Excel, mais il ne réagit pas aussi facilement qu'un objet WorkSheet en protection/déprotection qui lui est totalement partie intégrante d'Excel.

Bonne Soirée
[ol]@+Thierry[/ol]
 

coco_lapin

XLDnaute Impliqué
Déprotéger par macro le projet VBA via mot passe

Bonjour le forum.

Je voudrais faire évoluer une application que j'ai diffusée à des utilisateurs.

Pour cela j'envisage de leur envoyer un classeur qui contiendra une macro de mise à jour des modules.

Mais j'avais protégé le projet VBA de cette application par un mot de passe.

J'essais en vain de trouver le code qui me permettrait de déverrouiller/verrouiller le projet VBA avec un mot de passe.

J'ai essayé avec l'exemple de _Thierry (de son ami Laurent) sans succès.
 

coco_lapin

XLDnaute Impliqué
Reéprotéger par macro le projet VBA via mot passe

Bonjour le forum.

Je viens de trouver un code qui permet de déverrouiller puis de verrouiller le projet VBA (sur site de Sigonneau)

j'ai essayé et cela fonctionne très bien.
Je vous joins l'exemple en annexe.

Attention il ne faut pas faire du pas à pas sinon cela ne réagit pas de la même façon.

Merci coco_lapin. [file name=deprotectionvba.zip size=6322]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/deprotectionvba.zip[/file]
 

Pièces jointes

  • deprotectionvba.zip
    6.2 KB · Affichages: 187
  • deprotectionvba.zip
    6.2 KB · Affichages: 186
  • deprotectionvba.zip
    6.2 KB · Affichages: 187

_Thierry

XLDnaute Barbatruc
Repose en paix
Reéprotéger par macro le projet VBA via mot passe

Bonsoir Coco, le Fil, le Forum

Pas mal ce code de Bill Manville 'mpep' (Microsoft_Public_Excel_Programming)... Tu vois comme quoi, même Laurent est allé chercher un truc archi-compliqué alors qu'il y avait besoin que de quelques lignes.

Merci à toi de nous la faire découvrir (et à Frédérique de l'avoir publiée)

Bon Week End
[ol]@+Thierry[/ol]
 

Discussions similaires

Réponses
1
Affichages
137
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…