Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

compter les modules d'un classeur sous XL 2003

8 réponses
Avatar
fetnat
Bonjour,

Dans ma recherche à tatons pour faire fonctionner CallTree, je n'arrive
pas compter le nombre de modules dans le classeur actif.
Le sujet a été abordé jadis ici :
http://groups.google.com/group/microsoft.public.fr.excel/browse_thread/thread/968abf07ba37fa1a/991acca49492b5ed?lnk=st&q=modules.count+group%3Amicrosoft.public.fr.excel&rnum=1&hl=fr#991acca49492b5ed

ActiveWorkbook.Modules.Count
ainsi que
m = m + Workbooks(asFiles(i)).Modules(.Modules.Count)

retourne zéro.

On dirait que c'est une vieille syntaxe de XL95 ? L'aide trouve la
déclaration private d'un module mais je ne vois pas le comptage.

Comment compter les modules d'un classeur sous XL 2003 ?

Merci pour l'aide

fetnat

8 réponses

Avatar
fetnat
on cherche des heures et quand on poste, on trouve...

Sub CountModules()
x = ThisWorkbook.VBProject.VBComponents.Count
y = 0
For ctr = 1 To x
If ThisWorkbook.VBProject.VBComponents(ctr).Type = 1 Then
y = y + 1
End If
Next ctr
MsgBox "Module count is " & y
End Sub

fetnat

Bonjour,

Dans ma recherche à tatons pour faire fonctionner CallTree, je n'arrive
pas compter le nombre de modules dans le classeur actif.
Le sujet a été abordé jadis ici :
http://groups.google.com/group/microsoft.public.fr.excel/browse_thread/thread/968abf07ba37fa1a/991acca49492b5ed?lnk=st&q=modules.count+group%3Amicrosoft.public.fr.excel&rnum=1&hl=fr#991acca49492b5ed


ActiveWorkbook.Modules.Count
ainsi que
m = m + Workbooks(asFiles(i)).Modules(.Modules.Count)

retourne zéro.

On dirait que c'est une vieille syntaxe de XL95 ? L'aide trouve la
déclaration private d'un module mais je ne vois pas le comptage.

Comment compter les modules d'un classeur sous XL 2003 ?

Merci pour l'aide

fetnat


Avatar
Gilles MOUGNOZ
Bonjour, fetnat

Dans ce cas, j'ai plus court et plus rapide en exécution:

Sub CountModules()
y = 0
For Each x In ThisWorkbook.VBProject.VBComponents
If x.Type = 1 Then
y = y + 1
End If
Next x
MsgBox "Module count is " & y
End Sub

Mais ta solution fonctionne aussi bien (et, à moins d'avoir des milliards de
modules...)
--
Bonne continuation


on cherche des heures et quand on poste, on trouve...

Sub CountModules()
x = ThisWorkbook.VBProject.VBComponents.Count
y = 0
For ctr = 1 To x
If ThisWorkbook.VBProject.VBComponents(ctr).Type = 1 Then
y = y + 1
End If
Next ctr
MsgBox "Module count is " & y
End Sub

fetnat

Bonjour,

Dans ma recherche à tatons pour faire fonctionner CallTree, je n'arrive
pas compter le nombre de modules dans le classeur actif.
Le sujet a été abordé jadis ici :
http://groups.google.com/group/microsoft.public.fr.excel/browse_thread/thread/968abf07ba37fa1a/991acca49492b5ed?lnk=st&q=modules.count+group%3Amicrosoft.public.fr.excel&rnum=1&hl=fr#991acca49492b5ed
ActiveWorkbook.Modules.Count
ainsi que
m = m + Workbooks(asFiles(i)).Modules(.Modules.Count)

retourne zéro.

On dirait que c'est une vieille syntaxe de XL95 ? L'aide trouve la
déclaration private d'un module mais je ne vois pas le comptage.

Comment compter les modules d'un classeur sous XL 2003 ?

Merci pour l'aide

fetnat




Avatar
lSteph
Bonjour,

on peut aussi envisager une fonction qui dénombre le type choisi:

Function modulescount(Tm As String)
Dim vBc As VBComponent, j As Byte
For Each vBc In ThisWorkbook.VBProject.VBComponents
If vBc.Type = Tm Then j = j + 1
Next
modulescount = j
End Function

'''''''ensuite on peut y appliquer ce qu'on veut
Sub testM()
Dim mess As String
mess = modulescount(vbext_ct_ClassModule) & " Module de classe" &
vbCrLf & _
modulescount(vbext_ct_MSForm) & " Feuille Microsoft" & vbCrLf & _
modulescount(vbext_ct_StdModule) & " Module standard" & vbCrLf & _
modulescount(vbext_ct_Document) & " Module de document"
MsgBox mess
End Sub

'LSteph

On 31 juil, 11:40, fetnat wrote:
Bonjour,

Dans ma recherche à tatons pour faire fonctionner CallTree, je n'arrive
pas compter le nombre de modules dans le classeur actif.
Le sujet a été abordé jadis ici :http://groups.google.com/group/mic rosoft.public.fr.excel/browse_threa...

ActiveWorkbook.Modules.Count
ainsi que
m = m + Workbooks(asFiles(i)).Modules(.Modules.Count)

retourne zéro.

On dirait que c'est une vieille syntaxe de XL95 ? L'aide trouve la
déclaration private d'un module mais je ne vois pas le comptage.

Comment compter les modules d'un classeur sous XL 2003 ?

Merci pour l'aide

fetnat


Avatar
fetnat
Merci pour la simplification. Autant faire plus rapide et plus simple...

Bonne soirée

fetnat

Bonjour, fetnat

Dans ce cas, j'ai plus court et plus rapide en exécution:

Sub CountModules()
y = 0
For Each x In ThisWorkbook.VBProject.VBComponents
If x.Type = 1 Then
y = y + 1
End If
Next x
MsgBox "Module count is " & y
End Sub

Mais ta solution fonctionne aussi bien (et, à moins d'avoir des milliards de
modules...)


Avatar
fetnat
Woua, je suis impressionné. Merci.
Je vais pouvoir faire plusieurs variantes. Enfin... dès que CallTree
fonctionnera, parce que pour l'instant c'est pas la joie de ce côté.


Bonne soirée

fetnat

Bonjour,

on peut aussi envisager une fonction qui dénombre le type choisi:

Function modulescount(Tm As String)
Dim vBc As VBComponent, j As Byte
For Each vBc In ThisWorkbook.VBProject.VBComponents
If vBc.Type = Tm Then j = j + 1
Next
modulescount = j
End Function

'''''''ensuite on peut y appliquer ce qu'on veut
Sub testM()
Dim mess As String
mess = modulescount(vbext_ct_ClassModule) & " Module de classe" &
vbCrLf & _
modulescount(vbext_ct_MSForm) & " Feuille Microsoft" & vbCrLf & _
modulescount(vbext_ct_StdModule) & " Module standard" & vbCrLf & _
modulescount(vbext_ct_Document) & " Module de document"
MsgBox mess
End Sub

'LSteph

On 31 juil, 11:40, fetnat wrote:
Bonjour,

Dans ma recherche à tatons pour faire fonctionner CallTree, je n'arrive
pas compter le nombre de modules dans le classeur actif.
Le sujet a été abordé jadis ici :http://groups.google.com/group/microsoft.public.fr.excel/browse_threa...

ActiveWorkbook.Modules.Count
ainsi que
m = m + Workbooks(asFiles(i)).Modules(.Modules.Count)

retourne zéro.

On dirait que c'est une vieille syntaxe de XL95 ? L'aide trouve la
déclaration private d'un module mais je ne vois pas le comptage.

Comment compter les modules d'un classeur sous XL 2003 ?

Merci pour l'aide

fetnat






Avatar
Gilles MOUGNOZ
Bonjour à tous.
Alors là, pour l'optimisation, je ne suis carrément pas d'accord ;-)
LSteph, Ok pour la fonction générique mais, dans ta sub, il y a quand même 4
appels à un parcours complet des modules. On peut gérer cela avec un seul
parcours et un select case:

' cocher la référence à "Microsoft Visual Basic For Applications
Extensibility"
Sub testM()
Dim vBc As VBComponent
Dim nbClassModule As Byte
Dim nbMSForm As Byte
Dim nbStdModule As Byte
Dim nbDocument As Byte
Dim mess As String
For Each vBc In ThisWorkbook.VBProject.VBComponents
Select Case vBc.Type
Case vbext_ct_ClassModule:
nbClassModule = nbClassModule + 1
Case vbext_ct_MSForm:
nbMSForm = nbMSForm + 1
Case vbext_ct_StdModule:
nbStdModule = nbStdModule + 1
Case vbext_ct_Document:
nbDocument = nbDocument + 1
Case Else:
' non comptabilisé
End Select
Next
mess = nbClassModule & " Module de classe" & vbCrLf & _
nbMSForm & " Feuille Microsoft" & vbCrLf & _
nbStdModule & " Module standard" & vbCrLf & _
nbDocument & " Module de document"
MsgBox mess
End Sub

Bon, c'est vrai qu'il faut déclarer 4 compteurs, que la solution initiale
fonctionne aussi et que j'aime bien les "Select Case"...
J'espère avoir fait avancer le schmilblick ;-)
--
Bonne continuation
-------------------------------------------------------------------------------------------
Woua, je suis impressionné. Merci.
Je vais pouvoir faire plusieurs variantes. Enfin... dès que CallTree
fonctionnera, parce que pour l'instant c'est pas la joie de ce côté.
Bonne soirée
fetnat
Bonjour,
on peut aussi envisager une fonction qui dénombre le type choisi:
Function modulescount(Tm As String)
Dim vBc As VBComponent, j As Byte
For Each vBc In ThisWorkbook.VBProject.VBComponents
If vBc.Type = Tm Then j = j + 1
Next
modulescount = j
End Function
'''''''ensuite on peut y appliquer ce qu'on veut
Sub testM()
Dim mess As String
mess = modulescount(vbext_ct_ClassModule) & " Module de classe" &
vbCrLf & _
modulescount(vbext_ct_MSForm) & " Feuille Microsoft" & vbCrLf & _
modulescount(vbext_ct_StdModule) & " Module standard" & vbCrLf & _
modulescount(vbext_ct_Document) & " Module de document"
MsgBox mess
End Sub
'LSteph
On 31 juil, 11:40, fetnat wrote:
Bonjour,
Dans ma recherche à tatons pour faire fonctionner CallTree, je n'arrive
pas compter le nombre de modules dans le classeur actif.
Le sujet a été abordé jadis ici
:http://groups.google.com/group/microsoft.public.fr.excel/browse_threa...
ActiveWorkbook.Modules.Count
ainsi que
m = m + Workbooks(asFiles(i)).Modules(.Modules.Count)
retourne zéro.
On dirait que c'est une vieille syntaxe de XL95 ? L'aide trouve la
déclaration private d'un module mais je ne vois pas le comptage.
Comment compter les modules d'un classeur sous XL 2003 ?
Merci pour l'aide
fetnat






Avatar
lSteph
Bonjour Gilles,

;o))
Tu as pratiquement posé la question et la réponse:
''''''''''''''''''''''''''''''''''
Alors là, pour l'optimisation, je ne suis carrément pas d'accord ;-)
Bon, c'est vrai qu'il faut déclarer 4 compteurs, que la solution initiale
onctionne aussi et que j'aime bien les "Select Case"...
''''''''''''''''''''''''''''''''''''

....moi aussi

Mon propos était bien sur la fonction générique!

L'exemple vite fait Sub test n'était qu'une illustration, pas vocation
à être optimale mais à poser le principe d'utilisation et la liste des
constantes utilisées.

;-)
Quand à l'avancement du Schmilblick, je considère davantage l'intér êt
de ton intervention sur
' cocher la référence à "Microsoft Visual Basic For Applications
que j'avais oublié de préciser.

Sinon il faudrait effectivement pour s'en passer modifier légèrement
la syntaxe
et déclarer vbc as object.

@+

Bien cordialement.

LSteph

On 1 août, 12:26, "Gilles MOUGNOZ"
wrote:
Bonjour à tous.
Alors là, pour l'optimisation, je ne suis carrément pas d'accord ;-)
LSteph, Ok pour la fonction générique mais, dans ta sub, il y a quand même 4
appels à un parcours complet des modules. On peut gérer cela avec un seul
parcours et un select case:

' cocher la référence à "Microsoft Visual Basic For Applications
Extensibility"
Sub testM()
Dim vBc As VBComponent
Dim nbClassModule As Byte
Dim nbMSForm As Byte
Dim nbStdModule As Byte
Dim nbDocument As Byte
Dim mess As String
For Each vBc In ThisWorkbook.VBProject.VBComponents
Select Case vBc.Type
Case vbext_ct_ClassModule:
nbClassModule = nbClassModule + 1
Case vbext_ct_MSForm:
nbMSForm = nbMSForm + 1
Case vbext_ct_StdModule:
nbStdModule = nbStdModule + 1
Case vbext_ct_Document:
nbDocument = nbDocument + 1
Case Else:
' non comptabilisé
End Select
Next
mess = nbClassModule & " Module de classe" & vbCrLf & _
nbMSForm & " Feuille Microsoft" & vbCrLf & _
nbStdModule & " Module standard" & vbCrLf & _
nbDocument & " Module de document"
MsgBox mess
End Sub

Bon, c'est vrai qu'il faut déclarer 4 compteurs, que la solution initia le
fonctionne aussi et que j'aime bien les "Select Case"...
J'espère avoir fait avancer le schmilblick ;-)
--
Bonne continuation
------------------------------------------------------------------------- ------------------

Woua, je suis impressionné. Merci.
Je vais pouvoir faire plusieurs variantes. Enfin... dès que CallTree
fonctionnera, parce que pour l'instant c'est pas la joie de ce côté.
Bonne soirée
fetnat
Bonjour,
on peut aussi envisager une fonction qui dénombre le type choisi:
Function modulescount(Tm As String)
Dim vBc As VBComponent, j As Byte
For Each vBc In ThisWorkbook.VBProject.VBComponents
If vBc.Type = Tm Then j = j + 1
Next
modulescount = j
End Function
'''''''ensuite on peut y appliquer ce qu'on veut
Sub testM()
Dim mess As String
mess = modulescount(vbext_ct_ClassModule) & " Module de classe" &
vbCrLf & _
modulescount(vbext_ct_MSForm) & " Feuille Microsoft" & vbCrLf & _
modulescount(vbext_ct_StdModule) & " Module standard" & vbCrLf & _
modulescount(vbext_ct_Document) & " Module de document"
MsgBox mess
End Sub
'LSteph
On 31 juil, 11:40, fetnat wrote:
Bonjour,
Dans ma recherche à tatons pour faire fonctionner CallTree, je n'ar rive
pas compter le nombre de modules dans le classeur actif.
Le sujet a été abordé jadis ici
:http://groups.google.com/group/microsoft.public.fr.excel/browse_thre a...
ActiveWorkbook.Modules.Count
ainsi que
m = m + Workbooks(asFiles(i)).Modules(.Modules.Count)
retourne zéro.
On dirait que c'est une vieille syntaxe de XL95 ? L'aide trouve la
déclaration private d'un module mais je ne vois pas le comptage.
Comment compter les modules d'un classeur sous XL 2003 ?
Merci pour l'aide
fetnat








Avatar
Gilles MOUGNOZ
Merci pour ton soutien, lSteph ! ;-)
C'est en voyant que je n'arrivais pas à faire fonctionner ton code que je me
suis permis d'intervenir et d'ajouter au passage la référence à cocher.
Mon "optimisation" ne doit même pas se calculer en millième de seconde,
c'est vrai qu'elle est toute relative... Au fait, je n'ai pas trouvé si
Excel avait une limite en nombre de modules possibles: une idée ?
--
Bonne continuation

Bonjour Gilles,

;o))
Tu as pratiquement posé la question et la réponse:
''''''''''''''''''''''''''''''''''
Alors là, pour l'optimisation, je ne suis carrément pas d'accord ;-)
Bon, c'est vrai qu'il faut déclarer 4 compteurs, que la solution initiale
onctionne aussi et que j'aime bien les "Select Case"...
''''''''''''''''''''''''''''''''''''

....moi aussi

Mon propos était bien sur la fonction générique!

L'exemple vite fait Sub test n'était qu'une illustration, pas vocation
à être optimale mais à poser le principe d'utilisation et la liste des
constantes utilisées.

;-)
Quand à l'avancement du Schmilblick, je considère davantage l'intérêt
de ton intervention sur
' cocher la référence à "Microsoft Visual Basic For Applications
que j'avais oublié de préciser.

Sinon il faudrait effectivement pour s'en passer modifier légèrement
la syntaxe
et déclarer vbc as object.

@+

Bien cordialement.

LSteph

On 1 août, 12:26, "Gilles MOUGNOZ"
wrote:
Bonjour à tous.
Alors là, pour l'optimisation, je ne suis carrément pas d'accord ;-)
LSteph, Ok pour la fonction générique mais, dans ta sub, il y a quand même
4
appels à un parcours complet des modules. On peut gérer cela avec un seul
parcours et un select case:

' cocher la référence à "Microsoft Visual Basic For Applications
Extensibility"
Sub testM()
Dim vBc As VBComponent
Dim nbClassModule As Byte
Dim nbMSForm As Byte
Dim nbStdModule As Byte
Dim nbDocument As Byte
Dim mess As String
For Each vBc In ThisWorkbook.VBProject.VBComponents
Select Case vBc.Type
Case vbext_ct_ClassModule:
nbClassModule = nbClassModule + 1
Case vbext_ct_MSForm:
nbMSForm = nbMSForm + 1
Case vbext_ct_StdModule:
nbStdModule = nbStdModule + 1
Case vbext_ct_Document:
nbDocument = nbDocument + 1
Case Else:
' non comptabilisé
End Select
Next
mess = nbClassModule & " Module de classe" & vbCrLf & _
nbMSForm & " Feuille Microsoft" & vbCrLf & _
nbStdModule & " Module standard" & vbCrLf & _
nbDocument & " Module de document"
MsgBox mess
End Sub

Bon, c'est vrai qu'il faut déclarer 4 compteurs, que la solution initiale
fonctionne aussi et que j'aime bien les "Select Case"...
J'espère avoir fait avancer le schmilblick ;-)
--
Bonne continuation
-------------------------------------------------------------------------------------------

Woua, je suis impressionné. Merci.
Je vais pouvoir faire plusieurs variantes. Enfin... dès que CallTree
fonctionnera, parce que pour l'instant c'est pas la joie de ce côté.
Bonne soirée
fetnat
Bonjour,
on peut aussi envisager une fonction qui dénombre le type choisi:
Function modulescount(Tm As String)
Dim vBc As VBComponent, j As Byte
For Each vBc In ThisWorkbook.VBProject.VBComponents
If vBc.Type = Tm Then j = j + 1
Next
modulescount = j
End Function
'''''''ensuite on peut y appliquer ce qu'on veut
Sub testM()
Dim mess As String
mess = modulescount(vbext_ct_ClassModule) & " Module de classe" &
vbCrLf & _
modulescount(vbext_ct_MSForm) & " Feuille Microsoft" & vbCrLf & _
modulescount(vbext_ct_StdModule) & " Module standard" & vbCrLf & _
modulescount(vbext_ct_Document) & " Module de document"
MsgBox mess
End Sub
'LSteph
On 31 juil, 11:40, fetnat wrote:
Bonjour,
Dans ma recherche à tatons pour faire fonctionner CallTree, je
n'arrive
pas compter le nombre de modules dans le classeur actif.
Le sujet a été abordé jadis ici
:http://groups.google.com/group/microsoft.public.fr.excel/browse_threa...
ActiveWorkbook.Modules.Count
ainsi que
m = m + Workbooks(asFiles(i)).Modules(.Modules.Count)
retourne zéro.
On dirait que c'est une vieille syntaxe de XL95 ? L'aide trouve la
déclaration private d'un module mais je ne vois pas le comptage.
Comment compter les modules d'un classeur sous XL 2003 ?
Merci pour l'aide
fetnat