XL 2016 supprimer 1 ou tous les modules vba

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonjour à toutes et à tous,

Élucubrations du dimanche matin et encore besoin de vos lumières :)

Je reprends tous mes classeurs qui contiennent bcp de codes tous venus du forum
et adaptés selon mes petites connaissances.
Un grand à vous toutes et tous car sans vous, je n'aurais pas pu travailler dans de bonne conditions.

J'ai besoin pour tout reprendre et nettoyer plus vite d'un code supprimant d'un coup tous les modules du classeur ouvert.
Ne sachant pas faire cela, j'ai beaucoup cherché cette nuit sur le net.
Tout ce que j'ai pu essayer et/ou tenter d'adapter n'a pas pas réussi.

Les codes qui me semblent les plus proches sont ceux du site : https://silkyroad.developpez.com/VBA/VisualBasicEditor/#LIV-D
Mais les 2 codes que j'ai récupéré 'coincent" chez moi et je n'arrive pas à modifier pour que ça fonctionne :
VB:
Sub supprimerUnModule()
    With ThisWorkbook.VBProject.VBComponents
        .Remove .Item("Module2")
    End With
End Sub

Sub SupprimeTout()
    'supprime la totalité des procédures
    Dim VbComp As VBComponent

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

Si vous aviez la solution, ça me ferait gagner beaucoup de temps.
Je joins un fichier test.
Avec mes remerciements,
Je vous souhaite à toutes et à tous un beau dimanche,
Amicalement,
lionel,
 

Pièces jointes

  • vba_supprime_modules.xlsm
    18.7 KB · Affichages: 2

job75

XLDnaute Barbatruc
Bonjour Lionel, JM, eriiiic,

Avec le fichier du post #13, pour que l'accès au VBAProject soit possible par macro il faut avoir coché l'option :

- sur Excel 2003 et versions antérieures Faire confiance au projet Visual Basic (menu Outils-Macro-Sécurité-Editeurs approuvés)

- sur Excel 2007 et versions suivantes Accès approuvé au modèle d'objet du projet VBA (onglet Fichier-Options-Centre de gestion de la confidentialité-Paramètres...-Paramètres des macros).

Par ailleurs pour les 2ème et 3ème macros écrire : Dim VbComp As Object

A+
 

Staple1600

XLDnaute Barbatruc
Re

Normalement, la première macro doit afficher un Msgbox "vide"
Par contre la seconde affiche un MsgBox avec une information qui peut ne pas être inutile
Partant de là, il était simple de voir ce qui clochait, non ? (surtout pour un Barbatruc ;) )
 

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonsoir Gérard,

Merci d'être encore là :)

"Par ailleurs pour les 2ème et 3ème macros écrire : Dim VbComp As Object"

J'ai donc transformé comme suit :
VB:
Sub SupprimeTout()
    'supprime la totalité des procédures
    Dim VbComp As Object
    'Dim VbComp As VBComponent
    For Each VbComp In ThisWorkbook.VBProject.VBComponents
        Select Case VbComp.Type
            Case 1 To 3
                ThisWorkbook.VBProject.VBComponents.Remove VbComp
            Case Else
                With VbComp.CodeModule
                .DeleteLines 1, .CountOfLines
                End With
        End Select
    Next VbComp
End Sub

For Each VbComp In ThisWorkbook.VBProject.VBComponents
Mais ça beug erreur 1004 - la méthode de l'objet a échoué.
 

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Re

Normalement, la première macro doit afficher un Msgbox "vide"
Par contre la seconde affiche un MsgBox avec une information qui peut ne pas être inutile
Partant de là, il était simple de voir ce qui clochait, non ? (surtout pour un Barbatruc ;) )

LOL quel barbatruc ??? :)
Il est vrai qu'il faudrait revoir les bases des classifications car le nombre de messages ne fait pas de moi un expert malheureusement :)
 

Staple1600

XLDnaute Barbatruc
Re

En tout cas, je confirme: pas de bug chez moi avec la macro SupprimeTout

NB: Ma seconde macro affichait le chemin et le nom du classeur actif par cette ligne
MsgBox ActiveWorkBook.FullName
alors que
Msgbox FullName renvoie une chaine vide
Donc le code de Job75, il était écrit
Me.FullName
et dans tes essais et modifications tu as supprimé le Me.
C'est fois-ci, c'est plus clair?
 

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Souvent, mon honorifique titre de "Barbatruc" fait penser aux ténors du vba que je devrais connaître un tas de choses et que mes réponses ne sont pas du niveau que je suis censé être ...

Cela occasionne des réflexions et échanges auxquels je ne suis pas insensible.
Certainement que d'autres sont dans le même cas.

Comme je le dis plus haut : il faudrait revoir les bases des classifications car le nombre de messages ne fait pas de moi un expert malheureusement .

Même si grâce à vous tous, j'ai acquis quelques connaissances, je suis loin du niveau d'un "barbatruc".
Toutefois, souvent, je pourrais, à ma façon répondre à certains mais je m'abstiens car les ténors que vous êtes ont toujours de meilleurs codes faits dans les règles de l'art :)
 

Staple1600

XLDnaute Barbatruc
Re

Calimero, sors de ce corps.
PS: ma prose n'est jamais méchante ou malveillante sur le forum, juste ironiquement amicale voir amicalement ironique quand l'envie m'en prends.
Bref ta question est résolue (bien qu'elle l'était déjà avant d'être posée, cf le début du fil :p)
 

Discussions similaires

Réponses
2
Affichages
111

Statistiques des forums

Discussions
312 108
Messages
2 085 372
Membres
102 876
dernier inscrit
BouteilleMan