XL 2013 recupérer une partie du code (en l'occurence le commentaire)

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 !

patricktoulon

XLDnaute Barbatruc
bonjour a tous
j'ai une ligne de code par exemple
VB:
If toto ="Lig'10" then truc= "perlin'pinpin" 'ceci est un commentaire( ') qui est determiner par un " '" en debut
je voudrais récupérer le commentaire couper la ligne deux sans coupé le code effectif
sachant que dans le commentaire lui même il a des "'"
je remplace lionel avec ma question tordu du dimanche 🤣 🤣
 
Solution
Hello,
A tester :
VB:
Sub CouperCommentaires()
Dim str, str2, regEx As Object, matches
str = "If toto =""Lig'10"" then truc= ""perlin'pinpin"" 'ceci est un commentaire( ') qui est determiner par un "" '"" en debut"
Set regEx = CreateObject("VBScript.RegExp")
regEx.Pattern = "("".*?)'(.*?"")"  'on capture les 2 parties de chaines entourées de "" et avec un '
regEx.Global = True
str2 = regEx.Replace(str, "$1°$2") ' on remplace les ' par des °
regEx.Pattern = "'.*$"
Set matches = regEx.Execute(str2)
If matches.Count = 1 Then ' commentaire trouvé
  Debug.Print Replace(matches(0).value, "°", "'") ' on remet les ' à la place des °
End If
End Sub
Ne fonctionne pas si il y a plusieurs ' entre des "" et si des ° sont employés dans le code...
J'ai un peu modifié la fonction précédente :
VB:
Function CoupeComment(x$)
Dim i%, saute As Boolean
For i = 1 To Len(x)
    If Mid(x, i, 1) = """" Then saute = Not saute
    If Not saute Then If Mid(x, i, 1) = "'" Then CoupeComment = Mid(x, i) & IIf(Trim(Left(x, i - 1)) = "", "", vbLf & Trim(Left(x, i - 1))): Exit Function
Next
CoupeComment = Trim(x)
End Function
et j'ai créé cette macro pour l'appliquer aux lignes de code de Module1 :
VB:
Sub Test()
Dim toto$, truc$, i, x$, n
'--- cette ligne de code sera modifiée---
If toto = "Lig'10" Then truc = "perlin'pinpin" 'ceci est un commentaire( ') qui est determiner par un "' " en debut
'----------------------------------------
With ThisWorkbook.VBProject.VBComponents("Module1").CodeModule
    For i = .CountOfLines To 1 Step -1
        x = .Lines(i, 1)
        If CoupeComment(x) <> Trim(x) Then
            n = n + 1
            .Deletelines i, 1
            .InsertLines i, CoupeComment(x)
        End If
    Next
End With
MsgBox n & " ligne" & IIf(n > 1, "s", "") & " de code modifiée" & IIf(n > 1, "s", "")
End Sub
 

Pièces jointes

Bonjour a tous
merci pour vos retours
@job75 c'est la même chose que plusieurs d'entre nous
la récup du code du module ne fait pas partie de cette fonction je préfère faire une fonction séparée retournant le string su code du module
Attention ce principe de switch (oui/non) a chaque guillemet n'est pas forcement universel il suffit de tester plusieurs guillemets (2,4,6)entourant le caractère pour ce rendre compte que cette mécanique est inefficiente
j'ai du ajouté d'autres replaces dans mon code d'examen de module
comme je l'ai dis plus haut je ne veux pas enlever le commentaire je veux juste le determiner
car en fait je fait ça
comme vous voyez apres le passage de ma fonction beautifier sur code je remet les commentaires au dessus des blocs qui étaient codés inline
c'est pour mon nouveau moteur de vba indenter qui est en XML cette fois ci et plus en html
demo1.gif
 
Dernière édition:
Bonjour à toutes & à tous
If toto = "Lig'tt '10" Then truc = """"perlin'pinpin"""" 'ceci est un commentaire( ') qui est determiner par un

truc = """"perlin'pinpin"""" est-ce-que cela ne provoque pas une erreur de syntaxe ? les 4 premiers " constitue une chaîne (") que tu accoles directement à un mot, VBA attend sans doute un & ou une fin d'instruction ...

Me trompe-je ?
À bientôt
 
re @patricktoulon,
Bonjour @AtTheOne😉,

Je plussoie aux propos de @AtTheOne.
La question était d'extraire le commentaire d'une instruction VBA.
Or If toto = "Lig'tt '10" Then truc = """"perlin'pinpin"""" 'ceci est un commentaire( ') qui est determiner par un n'est pas une instruction VBA.
Cette ligne contient une erreur détectée par le compilateur VBA.

Il est évident que, si en entrée on met une ligne ne répondant pas aux règles syntaxiques de VBA, il n'est plus possible de sortir quoique ce soit de logique. Si on rentre n'importe quoi de point de vue VBA, on n'en sortira pas grand chose de ce point de vue VBA (en particulier le commentaire).

Le code de @AtTheOne (et celui de ma pomme - les deux codes sont kif-kif bourricot) sont AMHA corrects.
 
Dernière édition:
tiens que pensez vous de celle ci
VB:
Sub testpat3()
    For i = 1 To 8
          commentaire2 (Cells(i, 1))
    Next
End Sub



Function commentaire2(str) As String
   Dim ok As Boolean, i&, x&, comm$
   If Left(str, 1) <> "'" Then
   x = 1
   Do
       x = InStr(x, str, "'")
       If x = 0 Then Exit Do
       y = UBound(Split(Mid(str, 1, x - 1), """"))
       If y Mod 2 > 0 Then Mid(str, x, 1) = "µ"
       x = x + 1
    Loop
  x = InStr(1, str, "'")
    If x > 0 Then comm = Mid(str, x)
    End If
 Debug.Print comm
 End Function
 
bon ben ya pas photo
la do loop est plus rapide 2 fois
tester avec le benchmark

Rapport du benchmark
VB:
'
debug des commentaires
'ceci est un """commentaire"""( ') qui est determiner par un
'ceci est un "commµentaire"( ') qui est determiner par un
'un autre hic!!'commentaire
' encore un autre commentaire
'declaration
'des comm toujours des comm
'un commentaire seul

mesure
IDnr  Name                      Count  Sum of tics  Percentage  Time sum
0     depart de la commentaire      1          134       3,58%     13 us
1     test ligne  1                 1          726      19,39%     73 us
2     test ligne  2                 1          376      10,04%     38 us
3     test ligne  3                 1          447      11,94%     45 us
4     test ligne  4                 1          526      14,05%     53 us
5     test ligne  5                 1          357       9,54%     36 us
6     test ligne  6                 1          641      17,12%     64 us
7     test ligne  7                 1          295       7,88%     30 us
8     test ligne  8                 1          232       6,20%     23 us
9     test terminé                  1           10       0,27%   1000 ns
      TOTAL                        10        3 744     100,00%    374 us

Total time recorded:             374 us

debug des commentaires
'ceci est un """commentaire"""( ') qui est determiner par un
'ceci est un "commµentaire"( ') qui est determiner par un
'un autre hic!!'commentaire
' encore un autre commentaire
'declaration
'des comm toujours des comm
'un commentaire seul

mesure
IDnr  Name                       Count  Sum of tics  Percentage  Time sum
0     depart de la commentaire2      1          152       7,73%     15 us
1     test ligne  1                  1          681      34,62%     68 us
2     test ligne  2                  1          216      10,98%     22 us
3     test ligne  3                  1          192       9,76%     19 us
4     test ligne  4                  1          146       7,42%     15 us
5     test ligne  5                  1          147       7,47%     15 us
6     test ligne  6                  1          147       7,47%     15 us
7     test ligne  7                  1          140       7,12%     14 us
8     test ligne  8                  1          134       6,81%     13 us
9     test terminé                   1           12       0,61%   1200 ns
      TOTAL                         10        1 967     100,00%    197 us

Total time recorded:             197 us

comme quoi des fois
je pensais qu'avec split et tout le ttoutim y compris Mod j'allais être dans les choux
ben non
en fait ca se resume au fait que le do loop jump avec le instr donc le nombre de tours correspond au nombres de "'"
257 µs/8 34 µs d’économisé par ligne
sur un module de 3000 lignes ca devrait se sentir non ?
 
- 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

Discussions similaires

Retour