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:

vgendron

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

Autre chose.. toujours pour la suite...
si tu lances les macro telles qu'elles.. deux fois de suite: par exemple: décommenter deux fois de suite.. tu vas te retrouver avec des macros inutilisables puisque pour décommenter. on enlève le premier caractère..
il faut donc décommenter une macro si et seulement si elle ne l'est pas déjà..
pour cela. il suffit dans CHAQUE macro ajoutter son état (Active ou Inactive) juste sous le nom de la macro
puis faire un test dessus:

tes macros ressemblent donc à ca
sub NomMacro()
'Inactive
code
.
.
.
end sub

et donc les macros commenter et décommenter deviennent:
Code:
    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
            If Left(.Lines(Debut + 1, 1), 4) = "'Ina" Then
                MsgBox ("déjà inactive")
            Else
            .ReplaceLine Debut + 1, "'Inactive"
            
            For Ligne = Debut + 2 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 If
        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
            If Left(.Lines(Debut + 1, 1), 4) = "'Act" Then
                MsgBox ("déjà active")
            Else
            .ReplaceLine Debut + 1, "'Active"
            For Ligne = Debut + 2 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 If
        End With
    End With
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 330
Messages
2 087 343
Membres
103 525
dernier inscrit
gbaipc