VBE : supprimer tous les commentaires du code

dionys0s

XLDnaute Impliqué
Bonjour tout le monde

J'aurais besoin de savoir comment retirer des commentaires d'une ligne de code (je parviens déjà à "isoler" la ligne en question)

Par exemple, comment "expliquer" à mon programme que ce qu'il y a à droite de l'apostrophe juste avant "Commentaire" est du commentaire, et que ce qu'il y a à droite de l'apostrophe juste avant "_Nawak" n'en est pas (et donc que le commentaire ne débute qu'à la deuxième apostrophe) ?
VB:
Public Const MaConstante = " '_Nawak"        'Commentaire

J'ai un peu de mal à concevoir clairement les conditions qui font qu'une coche débute un commentaire ou non, même si c'est intuitivement logique.

Si quelqu'un a une idée, je suis preneur.

Merci d'avance :)

dionys0s
 
Dernière édition:

mromain

XLDnaute Barbatruc
Re : VBE : supprimer tous les commentaires du code

Bonjour dionys0s, le forum,

Voici un essai avec cette fonction qui renvoie la position du début de commentaire dans une ligne de code :
VB:
Public Function PositionCommentaire(strCode As String) As Long
Dim iCar As Long, flStr As Boolean
    PositionCommentaire = 0: flStr = False
    For iCar = 1 To Len(strCode)
        If Mid(strCode, iCar, 1) = """" Then flStr = Not flStr
        If Mid(strCode, iCar, 1) = "'" Then
            If Not flStr Then
                PositionCommentaire = iCar
                Exit Function
            End If
        End If
    Next iCar
End Function

Elle fonctionne pour les commentaires commençant par ', mais elle ne reconnait pas les lignes de commentaires commençant par Rem. Cela dit, ce contrôle supplémentaire est facile à mettre en place.

En complément, voici une fonction qui prend en paramètre une ligne de code et renvoie la même ligne sans les commentaires :
VB:
Public Function EnleverCommentaires(ligneCode As String) As String
Dim pos As Long, ligne As String
    pos = PositionCommentaire(ligneCode)
    If pos = 0 Then
        ligne = ligneCode
    Else
        ligne = Left(ligneCode, pos - 1)
    End If
    While (Right(ligne, 1) = " ")
        ligne = Left(ligne, Len(ligne) - 1)
    Wend
    EnleverCommentaires = ligne
End Function

Et un exemple avec ta ligne de code :
VB:
Sub Test()
Dim ligneCode As String, PositionCommentaire As Long, msg As String
    ligneCode = "Public Const MaConstante = "" '_Nawak""        'Commentaire"
    
    msg = ligneCode & vbNewLine & EnleverCommentaires(ligneCode)
    
    MsgBox msg
End Sub

A+
Miki
 

dionys0s

XLDnaute Impliqué
Re : VBE : supprimer tous les commentaires du code

Salut Miki, re tout le monde

merci beaucoup pour ton aide ! J'ai fait tous les tests tordus auxquels j'ai pu penser, et je ne vois rien qui plante. Superbe.
Donc si je comprends bien le raisonnement, tout guillemet ouvert implique qu'il doit être fermé avant le début du commentaire de la ligne, c'est bien ça ?
 

Statistiques des forums

Discussions
313 912
Messages
2 103 510
Membres
108 683
dernier inscrit
mimivip