Macro supprimant toutes les macros
Résolu- Macro supprimant toutes les macros
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Comment récupérer les messages supprimés sur whatsapp - Guide
- Macro word - Guide
- Jitbit macro recorder - Télécharger - Confidentialité
- Supprimer toutes les publications facebook - Guide
8 réponses
4 déc. 2024 à 16:21
Bonjour,
ce code devrait faire l'affaire :
Sub enlever_code() Dim vbc As Object With ActiveWorkbook.VBProject For Each vbc In .VBComponents If vbc.Type = 1 Or vbc.Type = 2 Or vbc.Type = 3 Then '1 = module standard, 2 = module de classe, 3 = userform .VBComponents.Remove vbc End If Next vbc End With End Sub
Bonjour,
Merci pour votre code. Cela fonctionne parfaitement.
Par contre (on en veut toujours plus), je voudrais enregistrer le fichier automatiquement après cette procédure. Seulement, comme toutes les macros sont supprimées....
Je suppose que je pourrais créer un module qui ne serait pas supprimé. Une ligne du genre if module name = "xx" then ? Mais je ne vois pas comment faire.
Modifié le 4 déc. 2024 à 20:06
Bonjour,
Le mieux serait d'opérer à partir d'un autre classeur. Il serait d'ailleurs beaucoup plus simple de réenregistrer votre classeur en .xlsx.
Si vous souhaitez néanmoins une macro pour enlever tout code, il faut aussi traiter celui lié à une feuille ou au classeur. La macro doit donc être ainsi complétée :
Sub enlever_code() Dim vbc As Object Dim volet_code As Object With ActiveWorkbook.VBProject For Each vbc In .VBComponents If vbc.Type = 1 Or vbc.Type = 2 Or vbc.Type = 3 Then '1 = module standard, 2 = module de classe, 3 = userform .VBComponents.Remove vbc End If If vbc.Type = 100 Then 'modules objet : feuilles ou classeur With vbc.CodeModule For Each volet_code In .CodePane.Collection volet_code.Show .DeleteLines 1, .CountOfLines Next volet_code End With End If Next vbc End With End Sub
En fait, je veux installer cette procédure pour sécuriser mon travail et éviter qu'une personne non-autorisée puisse me pirater. Les solutions que vous proposez ne sont donc malheureusement pas adaptées, mais c'était des pistes. Merci !
J'ai fait le code suivant pour ne pas effacer le module de suppression. Cela fonctionne très bien sauf si je mets l'instruction enregistrer le fichier : il reste des modules, USF et modules de classe. Par contre, si je lance la macro directement dans le projet VBA, c'est ok. Comme si la procédure d'appel perturbait le déroulement. Pourtant, c'est juste un call
Je ne comprends pas trop pourquoi. J'ai essayé de mettre un msgbox pour faire une pause ; sans effet.
Voici mon code :
Sub SuppressionMacros() 'supprime le contenu de l'objet "thisworkbook" With ActiveWorkbook.VBProject.VBComponents("ThisWorkbook").CodeModule .DeleteLines 1, .CountOfLines .CodePane.Window.Close End With ' supprime toutes les macros, sauf celle-ci With ActiveWorkbook.VBProject For Each vbc In .VBComponents '1 = module standard, 2 = module de classe, 3 = userform Select Case vbc.Type Case 1 If vbc.Name = "Mod_Suppression" Then Else .VBComponents.Remove vbc End If Case 2, 3 .VBComponents.Remove vbc End Select Next vbc End With 'sert de pause dans la macro, pour que l'enregistrement se fasse 'MsgBox "Projet supprimé !", vbExclamation, "Boîte Alarme" 'enregistre le fichier ActiveWorkbook.Save 'pour éviter de revenir à la procédure de départ, dans un USF effacé End End Sub
Si vous avez une idée, je suis preneur.
Bonne soirée
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question5 déc. 2024 à 01:18
Bonsoir,
Je pense qu'il faut attendre la fin de la procédure de suppression du code pour enregistrer le fichier.
Une solution est certainement d'utiliser l'instruction : Application.Ontime pour lancer l'enregistrement dans un délai d'une seconde après la fin de la procédure.
Bonjour,
C'est une super idée. Merci. Je ne pense jamais à utiliser cette fonction.
Par contre, j'ai maintenant une erreur 9, l'indice n'appartient pas à la sélection. Et je peux juste cliquer sur "Fin". Si je clique, la procédure se termine normalement mais je ne vois pas d'où peut provenir l'erreur. La seule variable utilisée dans la macro de suppression est déclarée dans le module qui la contient.
Sub SuppressionMacros() 'supprime le contenu de l'objet "thisworkbook" With ActiveWorkbook.VBProject.VBComponents("ThisWorkbook").CodeModule .DeleteLines 1, .CountOfLines .CodePane.Window.Close End With ' supprime toutes les macros, sauf celle-ci With ActiveWorkbook.VBProject For Each vbc In .VBComponents '1 = module standard, 2 = module de classe, 3 = userform Select Case vbc.Type Case 1 If vbc.Name = "Mod_Suppression" Then Else .VBComponents.Remove vbc End If Case 2, 3 .VBComponents.Remove vbc End Select Next vbc End With 'sert de pause dans la macro Application.OnTime Now + TimeValue("00:00:02"), "EnregistrerApresSuppression" End Sub Sub EnregistrerApresSuppression() 'enregistre et ferme le fichier ActiveWorkbook.Save ActiveWorkbook.Close End Sub
Bonne journée
5 déc. 2024 à 12:09
Je n'ai pas d'erreur en exécutant la procédure directement. Cela doit être lié à la façon dont vous appelez la procédure. L'erreur se produit sur une instruction qui fait appel à un objet qui n'existe plus, probablement le classeur qui a été fermé.
Faites déjà un essai en désactivant l'instruction de fermeture du classeur.