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

Staple1600

XLDnaute Barbatruc
Re

Pour supprimer rapidement tout le vba, d'un classeur, c'est très simple ;)
Il suffit de l'enregister en *.xlsx
Donc pour traiter N fichiers d'un répertoire, il suffit de créer une macro qui enregistre en *.xlsx
Et pour faire cela, il y a déjà tout ce qu'il faut sur XLD
1) Boucler et ouvrir les classeurs d'un répertoire
2) Ouvrir un classeur et l'enregistrer sous *.xlsx

Il suffit de définir les bons mots clés puis d'ici cliquer ;)

EDITION: C'est déjà ce que je disais en 2014...
 

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Re-Bonjour,

Effectivement, j'ai repris le code de Gérard, qui fonctionne bien comme d'habitude :)
https://www.excel-downloads.com/thr...t-vba-protege-par-mdp.20019618/#post-20143469
VB:
Private Sub Workbook_Open()
If Date >= DateSerial(2017, 9, 1) Then  'Choisir la date de fin applicatif
  Dim Sh As Object, s As Shape, fn$
  For Each Sh In Me.Sheets
    If Sh.ProtectContents Then Sh.Protect "0000", UserInterfaceOnly:=True
    For Each s In Sh.Shapes
      If s.OnAction <> "" Then s.Delete
  Next s, Sh
  Application.DisplayAlerts = False
  fn = Me.FullName
  Me.SaveAs Left(fn, InStrRev(fn, ".") - 1), 51
  Kill fn
  Workbooks.Open Me.FullName
End If
Me.Sheets("Recp").Activate
End Sub

Encore merci Gérard :)
lionel,
 

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Re-Bonjour,

Le code de Job75 fonctionne parfaitement.
Mais J'ai besoin de l'exécuter dans un simple module.

J'essaie de le modifier mais je n'y arrive pas (pas étonnant LOL)
J'ai modifié comme suit :
VB:
Sub supprime_vba()
If Date >= DateSerial(2017, 9, 1) Then  'Choisir la date de fin applicatif
  Dim Sh As Object, s As Shape, fn$
  For Each Sh In Sheets
    If Sh.ProtectContents Then Sh.Protect "0000", UserInterfaceOnly:=True
    For Each s In Sh.Shapes
      If s.OnAction <> "" Then s.Delete
  Next s, Sh
  Application.DisplayAlerts = False
  fn = FullName
  .SaveAs Left(fn, InStrRev(fn, ".") - 1), 51
  Kill fn
  Workbooks.Open FullName
End If
Sheets("Recp").Activate
End Sub

ça coince sur cette ligne : " .SaveAs Left(fn, InStrRev(fn, ".") - 1), 51"

je continue de chercher :)
Mais si solution, ça me ferait gagner du temps car je ne suis pas prêt de trouver :)
Avec mes remerciements,
lionel,
 

eriiic

XLDnaute Barbatruc
Bonjour,

Au bout de 7 ans et 2500 posts tu n'as toujours pas compris qu'il fallait mettre le message d'erreur ???

VB:
fn = FullName
Bien entendu tu as contrôlé la valeur de fn après cette instruction. Tu as quoi ?
Tu enlèves l'extension sans en remettre, il n'aime peut-être pas.
eric
 

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Re-Bonjour à toutes et à tous,

Je reviens sur le sujet car pour ma demande, passer par un enregistrement en xlsx "NE CONVIENT PAS" à mon besoin.
Classeur ouvert : J'ai besoin que les modules vba soient supprimés ainsi que les codes du ThisWorkbook

Comme je l'ai écrit dans mon 1er post :
Les codes qui me semblent les plus proches sont ceux du site : https://silkyroad.developpez.com/VBA/VisualBasicEditor/#LIV-D
Mais j'ai 2 erreurs que je ne parviens pas à corriger.
Je joins le fichier avec photos des 2 erreurs.

Pourriez-vous m'indiquer comment modifier les codes ?
Avec mes remerciements,
lionel :)
 

Pièces jointes

  • Supprime_vba.xlsm
    76.1 KB · Affichages: 2

Staple1600

XLDnaute Barbatruc
Re

???
Où est le souci d'enregistrer en *.xlsx puisque le premier message parle bien de supprimer le code VBA présent dans un classeur (voir dans tous les classeurs d'un répertoire donné)
Une fois cette suppression réalisée, il suffit une fois le nouveau *.xlsx ouvert, de le modifier d'y ajouter le nouveau code VBA puis de l'enregistrer cette fois-ci en *.xlsm

PS1: je ne connais pas le verbe sipprimer ni le verbe suprimer...

PS2: As-tu au moins essayé les deux macros de mon précédent message?
 

Discussions similaires

Réponses
2
Affichages
111

Statistiques des forums

Discussions
312 107
Messages
2 085 356
Membres
102 874
dernier inscrit
Petro2611