Supprimer un module par vba

  • Initiateur de la discussion Initiateur de la discussion Sebast
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Sebast

XLDnaute Impliqué
Bonjour à toutes et à tous,

je cherche comment supprimer un module par VBA. J'ai récemment appris via le forum comment supprimer une procédure par VBA, je voudrais désormais le faire pour par exemple le module 4 (et donc implicitement toutes les procédures Sub() contenues dans ce module4).

Merci d'avance
 
Re : Supprimer un module par vba

Bonjour Pierrot,

désolé pour ce délai de réponse, ce n'est qu'avec mon retour de congé que j'accède enfin à du réseau (celui de mon lieu de vacances était déplorable ...).

Merci pour ta proposition, qui fonctionne parfaitement.
J'ai cependant 2 questions :

1) Pourquoi Dim v As Object
apparemment, on n'utilise pas v (?!)

2) Tester la présence du module
Si on exécute deux fois de suite la sub(), il y a bien sûr une erreur (le module_n ayant été supprimé au premier passage).

Je sais comment le faire pour contrôler la présence d'une feuille (voir code suivant) ... :

Sub Afficher_Feuille()
Dim WS As Worksheet
For Each WS In Worksheets
If WS.Name = "Base" Or WS.Name = "BASE" Then ' la feuille s'appelle Base
Sheets("Base").Visible = True ' si pas le test ça plante
End If
Next WS
End Sub

... mais ne sais pas comment tester la présence de module1

As-tu une idée comment on teste la présence éventuelle du module1 (ou module 25 ...) ?

Merci d'avance
 
Re : Supprimer un module par vba

Bonjour,

1) Pourquoi Dim v As Object
apparemment, on n'utilise pas v (?!)
Oui, inutile dans le cas présent, tu peux l'enlever.

Pour tester si un module existe :
Code:
Option Explicit
Sub test()
Dim NomModule As String
NomModule = "Module1"
If Not ModuleExiste(NomModule) Is Nothing Then MsgBox "OK, existe..."
End Sub
Function ModuleExiste(m As String) As Object
On Error Resume Next
Set ModuleExiste = ThisWorkbook.VBProject.VBComponents(m)
End Function

bon après midi
@+
 
Re : Supprimer un module par vba

Merci Pierrot pour ta proposition,


Ça fonctionne mais j’aimerais « décortiquer » pour mieux comprendre comment ça marche :

1)
Set ModuleExiste = ThisWorkbook.VBProject.VBComponents(m)

Je vois qu’on « variabilise » VBComponents avec la variable m
Pourtant, on ne déclare pas cette variable « m » [mais je me trompe probablement, peut-être n’est-ce pas une variable …] ?

2)
Du coup, comme je suis plutôt familier de la recherche de présence via la petite routine comme présentée plus haut, pourrait-on imaginer avoir quelque chose comme [mais tel qu’ici, ça plante …] :


Code:
Sub tester_présence_module()
Dim md As VBComponent ' mais comment signifier que ce composant est un module ?
 For Each md In VBComponent
                If md.Name = "module25" Then
                    MsgBox "le module existe bel et bien"
                    ' instructions
                    ' instructions
                End If
                MsgBox "le module 25 n'existe pas"
                    ' instructions
                    ' instructions
 Next md
End Sub

... mon souci est que je ne sais pas comment "assigner" md à un nom de module (si toutefois une telle construction est possible ...).

Merci pour tes lumières
 
Re : Supprimer un module par vba

Re,

1)
Set ModuleExiste = ThisWorkbook.VBProject.VBComponents(m)

Je vois qu’on « variabilise » VBComponents avec la variable m
Pourtant, on ne déclare pas cette variable « m » [mais je me trompe probablement, peut-être n’est-ce pas une variable …] ?

Si "m" est déclaré comme argument de la fonction et le type attendu est "string"....

si tu veux une boucle :
Code:
Sub test()
Dim v As Object
With ThisWorkbook.VBProject
    For Each v In .VBComponents
        If v.Type < 4 And v.Name = "Module1" Then .VBComponents.Remove v
    Next v
End With
End Sub
 
Re : Supprimer un module par vba

Merci Pierrot pour ces réponses rapides,


Cette « syntaxe » me parle davantage et elle est pour moi plus simple et lisible.

Avant que tu ajoutes qu’on peut passer directement à
If v.Name = "Module1" Then .VBComponents.Remove v


je m’apprêtais à te demander où trouver la table de correspondance entre le numéro et le type d’objet
(c'est-à-dire par exemple, Type 1 = module, type 2 = …)


Merci pour ta patience
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
2
Affichages
105
Retour