Ajouter/retirer du code dans le VBE par macro

  • Initiateur de la discussion Initiateur de la discussion dionys0s
  • Date de début Date de début

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 !

dionys0s

XLDnaute Impliqué
Bonjour tout le monde

je souhaiterais qu'en fonction de valeurs remplies dans mes cellules, mes macros apparaissent en vert ou non dans le VBE, i.e qu'une coche ' s'insère ou se retire au début de chaque ligne de la macro, mais pas la première (Sub...) ni la dernière (End Sub). Le fichier exemple et les 3 macros toutes nulles du module 1 devraient être parlantes.

D'avance merci pour vos réponses 😎

Bonne journée à tous

Dionys0s
 

Pièces jointes

Dernière édition:
Re : Ajouter/retirer du code dans le VBE par macro

Bonjour vgendron

non, je me suis mal exprimé peut être, et j'ai oublié d'attacher le fichier exemple...

Il s'agit de faire en sorte qu'une macro apparaisse entièrement en mode commentaires dans le VBE si elle est en mode Désactivée dans la feuille, et à l'inverse, si elle est activée, que la macro correspondante soit accessible.

Cf. le fichier exemple (enfin !)
 

Pièces jointes

Re : Ajouter/retirer du code dans le VBE par macro

ok, je crois qu'on dit la meme chose, mais pas de la meme manière.. ;-)

j'ai juste une piste:
j'avais trouvé un code permettant d'importer une macro dans un module classique.
de mémoire (et parce que j'ai aussi vérifié) il fallait rajoutter une référence au projet VBA: Outil/Références/ OLE Automation
puis jouer avec les VBComponent.. par contre.l'aide VBA parle bien d'activer ou désactiver une macro.. mais j'ai pas trouvé le mot VBA correspondant..
 
Re : Ajouter/retirer du code dans le VBE par macro

Re,

en recherchant sur Internet, j'ai trouvé et adapté un code qui est supposée fonctionner pour le rajout de la coche en début de ligne d'une procédure (macro) définie d'un module défini dans un classeur défini, mais ça plante, et je ne comprends pas pourquoi :
Code:
Sub MettreEnCommentaire()

    Dim Debut As Long, Fin As Long, Ligne As Long, Texte As String

    With ThisWorkbook
        With .VBProject.VBComponents(1).CodeModule    'Module 1
        Debut = .ProcStartLine("Macro2()", 0)    'Macro "Macro2()"    CA PLANTE ICI
        Fin = .ProcCountLines("Macro2()", 0) + Debut
            For Ligne = Debut To Fin
                If .Lines(Ligne, 1) <> "" Then
                    Texte = "'" & .Lines(Ligne, 1)
                    .ReplaceLine (Ligne), Texte
                End If
            Next
        End With
    End With
    
End Sub
 
Re : Ajouter/retirer du code dans le VBE par macro

Re

c'est parce qu'il n'aime pas les () dans le nom de la macro à commenter..

Code:
Sub MettreEnCommentaire()

    Dim Debut As Long, Fin As Long, Ligne As Long, Texte As String
    Dim NomModule As String
    
    With ThisWorkbook
        With .VBProject.VBComponents("Module1").CodeModule   'Module 1
        Debut = .ProcStartLine("Macro2", vbext_pk_Proc)   'Macro "Macro2()" 
        Fin = .ProcCountLines("Macro2", 0) + Debut
            For Ligne = Debut To Fin
                If .Lines(Ligne, 1) <> "" Then
                    Texte = "'" & .Lines(Ligne, 1)
                    .ReplaceLine (Ligne), Texte
                End If
            Next
        End With
    End With
   
End Sub
 
Re : Ajouter/retirer du code dans le VBE par macro

Re,

une petite modif tout de suite.. en prévision de ce que tu vas surement vouloir faire: à savoir décommenter la macro pour la réactiver..
ca permet de garder la ligne Sub et end sub non commentée. sinon. tu seras incapable de localiser la macro à réactiver.

Code:
Sub MettreEnCommentaire()

    Dim Debut As Long, Fin As Long, Ligne As Long, Texte As String
    Dim NomModule As String
    
    With ThisWorkbook
        With .VBProject.VBComponents("Module1").CodeModule   'Module 1
        Debut = .ProcStartLine("Macro2", vbext_pk_Proc)   'Macro "Macro2()"  
        Fin = .ProcCountLines("Macro2", 0) + Debut - 1
            For Ligne = Debut + 1 To Fin - 1
                If .Lines(Ligne, 1) <> "" Then
                    Texte = "'" & .Lines(Ligne, 1)
                    .ReplaceLine (Ligne), Texte
                End If
            Next
        End With
    End With
End Sub
 
Re : Ajouter/retirer du code dans le VBE par macro

Re,

j'avais essayé sans, mais ça ne marchait pas non plus.

Il s'avère qu'il n'aime pas les espaces dans les noms de module. J'ai enlevé l'espace de Module 1 dans les propriétés et ça fonctionne. Merci pour ton aide.

Me reste plus qu'à faire l'action inverse (enlever la première coche de toutes les lignes). Je devrais y arriver je pense.

A+
 
Re : Ajouter/retirer du code dans le VBE par macro

et donc.. pour répondre à la question suivante...;-)

Code:
Sub DéCommenter()

    Dim Debut As Long, Fin As Long, Ligne As Long, Texte As String
    Dim NomModule As String
    
    With ThisWorkbook
        With .VBProject.VBComponents("Module1").CodeModule   'Module 1
        Debut = .ProcStartLine("Macro2", vbext_pk_Proc)   'Macro "Macro2()"
        Fin = .ProcCountLines("Macro2", 0) + Debut - 1
            For Ligne = Debut + 1 To Fin - 1
                If .Lines(Ligne, 1) <> "" Then
                    Texte = .Lines(Ligne, 1)
                    Texte = Right(Texte, Len(Texte) - 1)
                    .ReplaceLine (Ligne), Texte
                End If
            Next
        End With
    End With
End Sub
 
Re : Ajouter/retirer du code dans le VBE par macro

Merci beaucoup pour ton aide.

Y a encore un bug (il ajoute quand même la coche sur la déclaration de la sub, peut-être à cause de l'"Option Explicit" en début de module), mais je vais le résoudre tout seul.

Merci beaucoup vgendron
 
Re : Ajouter/retirer du code dans le VBE par macro

Je prévois qu'une ligne puisse commencer par Sub, du coup avec ça c'est plus tranquille ^_^
Code:
If .Lines(Ligne, 1) <> "" And Left(.Lines(Ligne, 1), 4) <> "Sub " Then

Merci pour ton aide !
 
Re : Ajouter/retirer du code dans le VBE par macro

pour la suite...;-)
modifie les deux macros avec le nom de la macro concernée (celle à commenter ou pas) en argument

Code:
Sub Commenter(NomMacro As String)

    Dim Debut As Long, Fin As Long, Ligne As Long, Texte As String
    Dim NomModule As String
    
    With ThisWorkbook
        With .VBProject.VBComponents("Module1").CodeModule   'Module 1
        Debut = .ProcStartLine(NomMacro, vbext_pk_Proc)
        Fin = .ProcCountLines(NomMacro, 0) + Debut - 1
            For Ligne = Debut + 1 To Fin - 1
                If .Lines(Ligne, 1) <> "" And Left(.Lines(Ligne, 1), 3) <> "Sub" Then
                    Texte = "'" & .Lines(Ligne, 1)
                    .ReplaceLine (Ligne), Texte
                End If
            Next
        End With
    End With
End Sub

Sub DéCommenter(NomMacro As String)

    Dim Debut As Long, Fin As Long, Ligne As Long, Texte As String
    Dim NomModule As String
    
    With ThisWorkbook
        With .VBProject.VBComponents("Module1").CodeModule   'Module 1
        Debut = .ProcStartLine(NomMacro, vbext_pk_Proc)
        Fin = .ProcCountLines(NomMacro, 0) + Debut - 1
            For Ligne = Debut + 1 To Fin - 1
                If .Lines(Ligne, 1) <> "" Then
                    Texte = .Lines(Ligne, 1)
                    Texte = Right(Texte, Len(Texte) - 1)
                    .ReplaceLine (Ligne), Texte
                End If
            Next
        End With
    End With
End Sub
 
- 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
Retour