OVH Cloud OVH Cloud

Dénombrer le nombre de lignes dans un module

14 réponses
Avatar
MichDenis
Bonsoir,

Comment fait-on pour dénombrer le nombre de ligne dans un module ?
Ce nombre doit comprendre toutes les lignes
a ) vides
b) en commentaire
c) de code

Est-ce qu'il y a une méthode plus simple et rapide que de boucler sur chacune d'elle ?

Ne pas vous endormir sur mon problème ! ;-)


Salutations

4 réponses

1 2
Avatar
LSteph
:o)

ici c'est bientôt, bonne nuit!

@+

Merci à vous deux,

Désolé. Et oui, Vous avez raison...

J'utilisais l'index (3) du module plutôt que son nom ....

Workbooks(WbName).VBProject..VBComponents(3).CodeModule

L'index "module3" n'est pas représentatif du véritable index comptabilisé
par excel... il y a ThisWorkbook, les modules feuilles et de classe.

Je m'en vais de ce pas me coucher ! ;-)))


Salutations






"LSteph" a écrit dans le message de news:

...serait mieux ainsi:



Function CountModulines(VbCmp As String, _
WbName As String) As Long
CountModulines = Workbooks(WbName).VBProject. _
VBComponents(VbCmp).CodeModule.CountOfLines
End Function

Sub test()
Dim vbc As String
vbc = "Module1"
MsgBox CountModulines(vbc, ThisWorkbook.Name) _
& " lignes dans " & vbc
End Sub




Avatar
Mousnynao
Bonjour,

Pour faire suite à votre remarque, et pour tous ceux qui cherche ...

J'ai publié en 2004 un classeur VisioXLA sur Excel-DownLoad, qui effectue
une liste de la plupart des objets Excel, dont les modules, les macros, etc...

Voici encore une fonction tiré de celui-ci :

--------------------------------
Function ScanListeModule()

Dim VBP As Variant
Dim VBC As VBComponent
Dim NomModule As String, Plage As String
Dim Feuille As String, Compteur As Long

On Error Resume Next

Application.ScreenUpdating = False
Feuille = Workbooks("VizioXLA.xls").ActiveSheet.Name
Workbooks("VizioXLA.xls").Sheets("ListeModules").Select
Set VBP = ActiveWorkbook.VBProject

Range("A1").Select
Cells.Clear

With ActiveSheet
.Rows(1).Font.Bold = True
.Rows(1).Font.Size = 9
.Range("A1:C1").Value = Array("Nom module", "Nombre Lignes", "Type
du module")

With VBP
Compteur = 1
For Each VBC In .VBComponents
ActiveCell.Offset(Compteur, 0).Value = VBC.Name
With
ActiveWorkbook.VBProject.VBComponents(VBC.Name).CodeModule
ActiveCell.Offset(Compteur, 1).Value = .CountOfLines
End With
Select Case VBC.Type
Case 1: ActiveCell.Offset(Compteur, 2).Value = "Module"
Case 2: ActiveCell.Offset(Compteur, 2).Value = "Class
Module"
Case 3: ActiveCell.Offset(Compteur, 2).Value = "UserForm"
Case 100: ActiveCell.Offset(Compteur, 2).Value =
"Document Module"
End Select
Compteur = (Compteur + 1)
Next VBC
End With
.Range("A1").CurrentRegion.Columns.AutoFit
End With


Columns("B:B").HorizontalAlignment = xlCenter
Plage = ActiveCell.Address
Plage = Mid(Plage, 2, 1)
Plage = ((Chr(Asc(Plage) + 2)) & 1)

Selection.Sort Key1:=Range(Plage), Order1:=xlAscending, _
Header:=xlGuess, OrderCustom:=1, MatchCase:úlse,
Orientation:=xlTopToBottom

Range("A1").Select
Sheets(Feuille).Select
Application.ScreenUpdating = True
Message = "Voir la feuille ListeModules"
MsgBox FINAL & vbCrLf & vbCrLf & Message

End Function
------------------------------------------

Cordialement
mousnynao


Désolé, voir mon autre message pour explications.

Merci de ta participation.






Avatar
MichDenis
Merci pour ta proposition. Bonne journée.


"Mousnynao" a écrit dans le message de news:

Bonjour,

Pour faire suite à votre remarque, et pour tous ceux qui cherche ...

J'ai publié en 2004 un classeur VisioXLA sur Excel-DownLoad, qui effectue
une liste de la plupart des objets Excel, dont les modules, les macros, etc...

Voici encore une fonction tiré de celui-ci :

--------------------------------
Function ScanListeModule()

Dim VBP As Variant
Dim VBC As VBComponent
Dim NomModule As String, Plage As String
Dim Feuille As String, Compteur As Long

On Error Resume Next

Application.ScreenUpdating = False
Feuille = Workbooks("VizioXLA.xls").ActiveSheet.Name
Workbooks("VizioXLA.xls").Sheets("ListeModules").Select
Set VBP = ActiveWorkbook.VBProject

Range("A1").Select
Cells.Clear

With ActiveSheet
.Rows(1).Font.Bold = True
.Rows(1).Font.Size = 9
.Range("A1:C1").Value = Array("Nom module", "Nombre Lignes", "Type
du module")

With VBP
Compteur = 1
For Each VBC In .VBComponents
ActiveCell.Offset(Compteur, 0).Value = VBC.Name
With
ActiveWorkbook.VBProject.VBComponents(VBC.Name).CodeModule
ActiveCell.Offset(Compteur, 1).Value = .CountOfLines
End With
Select Case VBC.Type
Case 1: ActiveCell.Offset(Compteur, 2).Value = "Module"
Case 2: ActiveCell.Offset(Compteur, 2).Value = "Class
Module"
Case 3: ActiveCell.Offset(Compteur, 2).Value = "UserForm"
Case 100: ActiveCell.Offset(Compteur, 2).Value "Document Module"
End Select
Compteur = (Compteur + 1)
Next VBC
End With
.Range("A1").CurrentRegion.Columns.AutoFit
End With


Columns("B:B").HorizontalAlignment = xlCenter
Plage = ActiveCell.Address
Plage = Mid(Plage, 2, 1)
Plage = ((Chr(Asc(Plage) + 2)) & 1)

Selection.Sort Key1:=Range(Plage), Order1:=xlAscending, _
Header:=xlGuess, OrderCustom:=1, MatchCase:úlse,
Orientation:=xlTopToBottom

Range("A1").Select
Sheets(Feuille).Select
Application.ScreenUpdating = True
Message = "Voir la feuille ListeModules"
MsgBox FINAL & vbCrLf & vbCrLf & Message

End Function
------------------------------------------

Cordialement
mousnynao


Désolé, voir mon autre message pour explications.

Merci de ta participation.






Avatar
Mousnynao
re :

depuis le temps ou je vous vois sur le site, je me doute bien que vous
aviez ou auriez trouvé une solution sans mon intervention.

J'ai d'ailleurs testé votre point, [ Bouton de cmd sous VBE ]. :-)

Bonne continuité.
mousnynao


Merci pour ta proposition. Bonne journée.


"Mousnynao" a écrit dans le message de news:

Bonjour,

Pour faire suite à votre remarque, et pour tous ceux qui cherche ...

J'ai publié en 2004 un classeur VisioXLA sur Excel-DownLoad, qui effectue
une liste de la plupart des objets Excel, dont les modules, les macros, etc...

Voici encore une fonction tiré de celui-ci :

--------------------------------
Function ScanListeModule()

Dim VBP As Variant
Dim VBC As VBComponent
Dim NomModule As String, Plage As String
Dim Feuille As String, Compteur As Long

On Error Resume Next

Application.ScreenUpdating = False
Feuille = Workbooks("VizioXLA.xls").ActiveSheet.Name
Workbooks("VizioXLA.xls").Sheets("ListeModules").Select
Set VBP = ActiveWorkbook.VBProject

Range("A1").Select
Cells.Clear

With ActiveSheet
.Rows(1).Font.Bold = True
.Rows(1).Font.Size = 9
.Range("A1:C1").Value = Array("Nom module", "Nombre Lignes", "Type
du module")

With VBP
Compteur = 1
For Each VBC In .VBComponents
ActiveCell.Offset(Compteur, 0).Value = VBC.Name
With
ActiveWorkbook.VBProject.VBComponents(VBC.Name).CodeModule
ActiveCell.Offset(Compteur, 1).Value = .CountOfLines
End With
Select Case VBC.Type
Case 1: ActiveCell.Offset(Compteur, 2).Value = "Module"
Case 2: ActiveCell.Offset(Compteur, 2).Value = "Class
Module"
Case 3: ActiveCell.Offset(Compteur, 2).Value = "UserForm"
Case 100: ActiveCell.Offset(Compteur, 2).Value > "Document Module"
End Select
Compteur = (Compteur + 1)
Next VBC
End With
.Range("A1").CurrentRegion.Columns.AutoFit
End With


Columns("B:B").HorizontalAlignment = xlCenter
Plage = ActiveCell.Address
Plage = Mid(Plage, 2, 1)
Plage = ((Chr(Asc(Plage) + 2)) & 1)

Selection.Sort Key1:=Range(Plage), Order1:=xlAscending, _
Header:=xlGuess, OrderCustom:=1, MatchCase:úlse,
Orientation:=xlTopToBottom

Range("A1").Select
Sheets(Feuille).Select
Application.ScreenUpdating = True
Message = "Voir la feuille ListeModules"
MsgBox FINAL & vbCrLf & vbCrLf & Message

End Function
------------------------------------------

Cordialement
mousnynao


Désolé, voir mon autre message pour explications.

Merci de ta participation.











1 2