Compter le nombre de lignes dans un module ?

Sebast

XLDnaute Impliqué
Bonsoir à toutes et à tous,

je cherche en vain depuis un certain temps la méthode pour compter le nombre de lignes de code présente dans un module

Dans une feuille excel je sais faire, mais ça n'est pas transposable aux modules …

Quelqu'un sait-il comment déterminer le nombre de lignes qu'il y a dans un module ?
Dans la pièce jointe, j'attends par exemple pour le module 1 une réponse = 25 et pour le module 2 = zéro


Merci d'avance

Sebast
 

Pièces jointes

  • Forum_02122014.xlsm
    15.2 KB · Affichages: 41

Dranreb

XLDnaute Barbatruc
Re : Compter le nombre de lignes dans un module ?

j'ai aussi utilisé la proposition de Job75
Job75 voulait dire ActiveWorkbook au lieu de Workbooks(ActiveWorkbook.Name) qui est absurde, évidemment.

Chez moi toutes les procédures fonctionnent. Je ne puis que vous engager à cocher la référence "Microsoft Visual Basic for Applications Extensibility 5… et à décomposer :
VB:
Sub Compter_LignesModule1() 'de Drandeb
Dim Pj As VBIDE.VBProject, N As Long
On Error Resume Next
Set Pj = ThisWorkbook.VBProject
If Err Then MsgBox "Set Pj = ThisWorkbook.VBProject" & vbLf & "==> Err " _
   & Err & vbLf & Err.Description, vbCritical, "Test": Exit Sub
N = Pj.VBComponents("Module1").CodeModule.CountOfLines  'erreur ici
MsgBox "Dans le module 1, il y a " & N & " lignes de code"
End Sub
Ou encore ça qui marche aussi très bien chez moi :
VB:
Sub CompterLignesModules() 'de Drandeb
Dim Pj As VBIDE.VBProject, Comp As VBIDE.VBComponent, Z As String
On Error Resume Next
Set Pj = ThisWorkbook.VBProject
If Err Then MsgBox "Set Pj = ThisWorkbook.VBProject" & vbLf & "==> Err " _
   & Err & vbLf & Err.Description, vbCritical, "Test": Exit Sub
For Each Comp In Pj.VBComponents
   Z = Z & vbLf & Comp.Name & ": " & Comp.CodeModule.CountOfLines & " lignes"
   Next Comp
MsgBox Mid$(Z, 2), vbInformation, "Test"
End Sub
 
Dernière édition:

cathodique

XLDnaute Barbatruc
Re : Compter le nombre de lignes dans un module ?

Bonsoir Dranreb,

Je te remercie beaucoup pour ton aide. Voilà, je ne voudrai pas trop t'embêter mais chez moi ça ne fonctionne pas.

La référence "Microsoft Visual Basic for Applications Extensibility 5.3 n'était pas cochée et je l'ai donc coché.

Voici le message que j'obtiens ErreurVBA3.JPG

Merci et bonne soirée.

Cordialement
 

ROGER2327

XLDnaute Barbatruc
Re : Compter le nombre de lignes dans un module ?

Bonsoir à tous.


Chez moi, les procédures du classeur annexé au message #15 fonctionnent, Microsoft Visual Basic for Applications Extensibility 5.3 n'étant pas coché.

Fonctionne aussi :​
Code:
Sub Compte_ligne_1()
Dim m$, n&
    m = "Module1"
    n = -1
    On Error Resume Next
    n = ThisWorkbook.VBProject.VBComponents(m).CodeModule.CountOfLines
    On Error GoTo 0
    m = "e module """ & m & """ de ce classeur "
    Select Case n
    Case Is < 0: m = "L" & m & "n 'existe pas"
    Case 0: m = "L" & m & "est vide"
    Case 1: m = "Il n'y a qu'une seule ligne" & " dans l" & m
    Case Else: m = "Il y a " & n & " lignes" & " dans l" & m
    End Select
    MsgBox m & ".", vbInformation
End Sub
Ces deux-là aussi :​
Code:
Sub Compte_ligne_2()
    MsgBox atata("Module1"), vbInformation
End Sub

Sub Compte_ligne_3()
Dim i&, m$, lObj()
    lObj = Array("Feuil1", "Feuil2", "Module1", "Module4", "ThisWorkbook")
    For i = 0 To UBound(lObj)
        m = m & atata(CStr(lObj(i))) & vbLf
    Next
    MsgBox m, vbInformation
End Sub
avec la fonction auxiliaire :​
Code:
Private Function atata$(m$)
Dim n&
    n = -1
    On Error Resume Next
    n = ThisWorkbook.VBProject.VBComponents(m).CodeModule.CountOfLines
    On Error GoTo 0
    m = "e module """ & m & """ de ce classeur "
    Select Case n
    Case Is < 0: m = "L" & m & "n 'existe pas"
    Case 0: m = "L" & m & "est vide"
    Case 1: m = "Il n'y a qu'une seule ligne" & " dans l" & m
    Case Else: m = "Il y a " & n & " lignes" & " dans l" & m
    End Select
    atata = RTrim(m) & ". "
End Function
Et ces deux-autres :​
Code:
Sub Compte_ligne_4()
Dim Obj As Object
    For Each Obj In ThisWorkbook.VBProject.VBComponents
        MsgBox otata(Obj)
    Next
End Sub

Sub Compte_ligne_5()
Dim m$, Obj As Object
    For Each Obj In ThisWorkbook.VBProject.VBComponents
        m = m & otata(Obj) & vbLf
    Next
    MsgBox m, vbInformation
End Sub
avec la fonction auxiliaire :​
Code:
Private Function otata$(o As Object)
Dim n&, m$
    n = o.CodeModule.CountOfLines
    m = "e module """ & o.Name & """ de ce classeur "
    Select Case n
    Case 0: m = "L" & m & "est vide"
    Case 1: m = "Il n'y a qu'une seule ligne" & " dans l" & m
    Case Else: m = "Il y a " & n & " lignes" & " dans l" & m
    End Select
    otata = RTrim(m) & ". "
End Function


Bonne soirée.


ℝOGER2327
#7698


Mardi 3 Sable 142 (Saint Phlegmon, doctrinaire - fête Suprême Quarte)
13 Frimaire An CCXXIII, 7,3478h - cèdre
2014-W49-3T17:38:05Z
 

Staple1600

XLDnaute Barbatruc
Re : Compter le nombre de lignes dans un module ?

Bonsoir à tous


cathodique
Je confirme par la présente copie d'écran que les codes que j'ai précédemment postés fonctionnent ;)
01OKOK.png
Ci-dessous le code juste modifé pour afficher la MsgBox ci-dessus en lançant la macro Test
Code:
Public X As String
Sub test()
CountCodeLines
CountLines
End Sub

Sub CountCodeLines()
    Dim VBCodeModule As Object
    Dim NumLines As Long, N As Long
    With ActiveWorkbook
          For N = 1 To .VBProject.VBComponents.Count
                Set VBCodeModule = .VBProject.VBComponents(N).CodeModule
                NumLines = NumLines + VBCodeModule.CountOfLines
          Next
    End With
    X = "Total number of lines of code in the project = " & NumLines
    Set VBCodeModule = Nothing
End Sub
Public Sub CountLines()
Dim vbproj As Object 'VBProject
Dim vbComp As Object 'VBComponent
Dim Mess$
For Each vbComp In ThisWorkbook.VBProject.VBComponents
Mess = Mess & vbComp.Name & " " & vbComp.CodeModule.CountOfLines & Chr(13)
Next vbComp
MsgBox "MACRO: CountCodeLines()" & Chr(13) & Mess & Chr(13) & "MACRO: CountLines()" & Chr(13) & X
End Sub
 

ROGER2327

XLDnaute Barbatruc
Re : Compter le nombre de lignes dans un module ?

Suite...


La pièce jointe qui va avec...​


ℝOGER2327
#7699


Mardi 3 Sable 142 (Saint Phlegmon, doctrinaire - fête Suprême Quarte)
13 Frimaire An CCXXIII, 7,4541h - cèdre
2014-W49-3T17:53:24Z
 

Pièces jointes

  • Compte_lignes_de_code.xlsm
    37.9 KB · Affichages: 29

Dranreb

XLDnaute Barbatruc
Re : Compter le nombre de lignes dans un module ?

Il ne vous reste qu'à mettre un espion sur ThisWorkbook et quid de sa propriété VBProject ?
Edit: Ah il y a eu plein d'autres message depuis, je vois. Qu'est ce qui a exactement changé depuis pour que ça marche désormais ? Qu'on sache de suite quoi répondre si ça ce reproduisait pour quelqu'un d'autre ?
 
Dernière édition:

Discussions similaires

Réponses
29
Affichages
926

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 229
Messages
2 086 426
Membres
103 206
dernier inscrit
diambote