XL 2016 supprimer 1 ou tous les modules vba

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 !

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

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+
 
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 😉 )
 
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é.
 
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 🙂
 
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?
 
C'est bon, ça fonctionne j'avais oublié de cocher : Accès approuvé au modèle d'objet du projet VBA

Merci Gérard 🙂
Merci aussi Staple1600 et même si quelques fois tes mots m'interpellent, je te remercie pour ta patience et ta gentillesse 🙂
 
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 🙂
 
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 😛)
 
- 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
5
Affichages
404
Réponses
2
Affichages
403
Réponses
3
Affichages
238
  • Question Question
Microsoft 365 Question code VBA
Réponses
2
Affichages
386
Retour