VBA Exporter/Supprimer Modules (Suite)

Staple1600

XLDnaute Barbatruc
Bonsoir à tous

Pour comprendre : voir ici : fil d'origine (source de la question)


Merci à Thierry donc

Voila à quoi ma réflexion du jour m'a fait aboutir:

PRECAUTIONS: A n'utiliser que sur des copies ou des fichiers de tests

Le code ci-dessous:
1) Exporte le code VBA
2) Supprime le code VBA
Code:
Sub VBA_EXPORT_AND_KILL()
ExporterFrmEtModules
VBA_Killer
End Sub


Sub ExporterFrmEtModules()
Dim Racine As String
Dim SousRep As String
Racine = "C:\Temp\"
SousRep = "C:\Temp\Feuilles\"
If (RépertoireExiste(Racine) <> True) Then
MkDir Racine
End If
If (RépertoireExiste(SousRep) <> True) Then
MkDir SousRep
End If
Dim LeFich
    For Each LeFich In ThisWorkbook.VBProject.VBComponents
        Select Case LeFich.Type
            Case 1
                ThisWorkbook.VBProject.VBComponents(LeFich.Name).Export Racine & LeFich.Name & ".bas"
            Case 2
                ThisWorkbook.VBProject.VBComponents(LeFich.Name).Export Racine & LeFich.Name & ".cls"
            Case 3
                ThisWorkbook.VBProject.VBComponents(LeFich.Name).Export Racine & LeFich.Name & ".frm"
            Case 100
                ThisWorkbook.VBProject.VBComponents(LeFich.Name).Export SousRep & LeFich.Name & ".cls"
        End Select
    Next
End Sub


'-------------------------------------------------------
'Test L'existance d'un répertoire
'-------------------------------------------------------
Function RépertoireExiste(Chemin As String) As Boolean
    
    On Error Resume Next
        RépertoireExiste = GetAttr(Chemin) And vbDirectory
        
End Function
Sub VBA_Killer()
Dim VBC As Object
With ActiveWorkbook.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
End Sub

Remerciements à:
- Thierry (forum XLD)

- source externe: macro export modules
 
Dernière édition:

_Thierry

XLDnaute Barbatruc
Repose en paix
Re : VBA Exporter/Supprimer Modules (Suite)

Re Staple, le Forum

Ben je ne sais pas à quoi sert tout ceci, mais bon... D'ailleurs des exemples d'exports de Modules existait aussi sur XLD ;-)

Enfin pour passer en le WorkBook en Paramètre il suffit de Lancer le VBA_Killer comme suit

Code:
Sub TaMacroDeBase()
Dim WB_To_Kill as WorkBook
 
Set WB_To_Kill = WorkBooks.Open(FullPath)
 
Blah Blah Blah
 
[B]VBA_Killer WB_To_Kill[/B] 
End Sub
 
Sub VBA_Killer(ByVal DeadWB As WorBook)
Dim VBC As Object
With DeadWB.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
End Sub

Je n'ai rien testé, vu le peu d'utilité de ce genre de code surtout pour un classeur précis, que moi j'utilise vraiment rarement ou en ActiveWorkBook depuis unE XLA, pour épurer un fichier à envoyer par mail par exemple, mais ce devrait le faire, juste un doute pour le ByVal pour un passage d'Argument de type WorkBook, si ça ne passe pas ne met rien ou bien ByRef...

Bon amusement
@+Thierry




PS as-tu vu ma remarque pour la touche MAJ enfoncée pendant l'ouverture du Classeur qui me semble plus simple que tout ça ;) mais bravo pour l'exercice en tous cas !
 

Staple1600

XLDnaute Barbatruc
Re : VBA Exporter/Supprimer Modules (Suite)

Re Thierry


Je sais comment ouvrir un classeur en désactivant les macros

(d'ailleurs j'ai toujours sous la main un petit cube en plomb qui reste
en permanence sur la touche MAJ ;) )

Quant à l'utilité, je me suis pas posé la question

Je te rappelle, que c'est ton VBA_KILLER qui a fait germer cette question autour de VBA :rolleyes:

Au départ, je pensais VBA_COMMENTS_ALL

En tous cas je te remercie (et j'admire la beauté et la fluidité de ton code VBA)

Je m'excuse de n'avoir pas cherché sur le forum ( au vu de ton message sur les difficultés de recherche dans l'autre fil, je n'ai pas cherché sur XLD)

Bonne fin de soirée à toi, au forum

JM
 

Discussions similaires

Réponses
2
Affichages
152

Statistiques des forums

Discussions
312 215
Messages
2 086 330
Membres
103 186
dernier inscrit
Eliyass