É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.
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,
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
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 )
"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é.
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
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?
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
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 )
Mon cher Staple1600,
Je n'ai jamais dit ça... bien au contraire
Je sais que tu es bienveillant et amical .. et de bons conseils
Bref, comme tu dis, mais non, c'était pas résolu avant d'être posé mais c'est bon maintenant.