Ajouter/retirer du code dans le VBE par macro

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 :cool:

Bonne journée à tous

Dionys0s
 

Pièces jointes

  • Ajouter_Retirer Code.xlsm
    37.2 KB · Affichages: 44
  • Ajouter_Retirer Code.xlsm
    37.2 KB · Affichages: 48
  • Ajouter_Retirer Code.xlsm
    37.2 KB · Affichages: 47
Dernière édition:

dionys0s

XLDnaute Impliqué
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

  • Ajouter_Retirer Code.xlsm
    37.2 KB · Affichages: 46
  • Ajouter_Retirer Code.xlsm
    37.2 KB · Affichages: 47
  • Ajouter_Retirer Code.xlsm
    37.2 KB · Affichages: 50

vgendron

XLDnaute Barbatruc
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..
 

dionys0s

XLDnaute Impliqué
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
 

vgendron

XLDnaute Barbatruc
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
 

vgendron

XLDnaute Barbatruc
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
 

dionys0s

XLDnaute Impliqué
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+
 

vgendron

XLDnaute Barbatruc
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
 

dionys0s

XLDnaute Impliqué
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
 

vgendron

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

ha bon?
pas chez moi..
je viens de faire le test. avec option Explicit ou pas..
pardon. effectivement.avec la macro1 (la première) il coche..
 
Dernière édition:

dionys0s

XLDnaute Impliqué
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 !
 

vgendron

XLDnaute Barbatruc
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
 

Discussions similaires

Statistiques des forums

Discussions
312 195
Messages
2 086 078
Membres
103 111
dernier inscrit
Eric68350