Macro supprimant toutes les macros

TonyLucky - 4 déc. 2024 à 12:43
thev Messages postés 1900 Date d'inscription lundi 7 avril 2008 Statut Membre Dernière intervention 4 décembre 2024 - 4 déc. 2024 à 20:02

Bonjour,

Je cherche à faire une macro supprimant toutes les macros du classeur excel actif.

J'ai trouvé sur le net plusieurs exemples, mais si tous fonctionnent, il reste toujours quelques modules, userform et tous les modules de classe.

Voici l'exemple le plus simple que j'ai pu trouver :

Sub Supprimer_toutes_macros()
Dim VBC As Object
 
With ActiveWorkbook.VBProject
    For Each VBC In .VBComponents
        If VBC.Type = 100 Then
            With VBC.CodeModule
                .DeleteLines 1, .CountOfLines
                .CodePane.Window.Close
            End With
        Else
            .VBComponents.Remove VBC
        End If
    Next VBC
End With
 
End Sub

Avez-vous des idées pour résoudre ce problème ?

Je vous en remercie par avance

Tony


Windows / Firefox 133.0

A voir également:

3 réponses

thev Messages postés 1900 Date d'inscription lundi 7 avril 2008 Statut Membre Dernière intervention 4 décembre 2024 691
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

0

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.

0
thev Messages postés 1900 Date d'inscription lundi 7 avril 2008 Statut Membre Dernière intervention 4 décembre 2024 691
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

0