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

[VB6] Effectuer la liste des composants d'un projet

10 réponses
Avatar
Mousnynao
Bonjour à tous,

je cherche a effectuer la liste de tous les objets de mon projet.

Forms, Modules, Module de Classe, etc ...

Avec une syntaxe du genre :

Sub Main()

Dim strMes As String
Dim VBF As VBForm

For Each VBF In Collection
strMes = strMes & vbLf & VBF.Name
Next

MsgBox strMes

End Sub

n.b. ici je ne tente d'adresser que les forms, mais je voudrais lister tous
les onjets.

Merci de votre lecture.

mousnynao

10 réponses

Avatar
François Picalausa
On Aug 15, 5:30 pm, Mousnynao
wrote:
je cherche a effectuer la liste de tous les objets de mon projet.

Forms, Modules, Module de Classe, etc ...
<snip>



Hello,

Souhaites-tu le faire au runtime, ou durant le design?

Dans le cas du runtime, le plus simple reste d'utiliser une structure
de donnée appropriée et de stoquer cette information toi même pour la
relire ensuite (par exemple, à l'aide de l'objet Collection).
Si ton composant est interfaçable avec l'extérieur (expose une typelib
de manière implicite ou explicite), toujours au runtime, une autre
possibilité serait de lister les membres exposés par la typelib comme
indiqué ici:
http://msdn.microsoft.com/msdnmag/issues/1200/TypeLib/default.aspx

Si c'est au design, je te conseille de lire la partie de l'aide
concernant le modèle d'extensibilité de VB (
http://msdn2.microsoft.com/en-us/library/aa241699(VS.60).aspx ).

François
Avatar
Jean-marc
Mousnynao wrote:
Bonjour à tous,

je cherche a effectuer la liste de tous les objets de mon projet.

Forms, Modules, Module de Classe, etc ...



Hello,

<methode genre="bourrine">
En complément des conseils de François, tu peux aussi utiliser
une méthode hyper bourrine, pour ne pas dire carrément
bestiale: tu parses simplement le .vbp de ton projet, les formes,
modules et classes y sont décrites en clair. Il suffit de lie le .vbp de
ton projet et d'un peu de manipulation de chaine de caractères.
</methode>

Il vas sans dire que c'est réellement bestial, mais ça marche. Si tu
veux une solution simple et efficace (mais crado), alors pourquoi
pas celle -ci :-)


--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
mailto: remove '_no_spam_' ;
FAQ VB: http://faq.vb.free.fr/
Avatar
Mousnynao
Bonjour,

Merci de vos réponses.

Je n'y arrive pas vraiment !

Sous VBA j'ai coder quelques comme :

Sub Main()

Dim VBP As Variant
Dim VBC As VBComponent
Dim NomModule As String, Plage As String
Dim strMes As String

On Error Resume Next

Set VBP = ActiveVBProject

With VBP
For Each VBC In .VBComponents
strMes = strMes & vbLf & VBC.Name
Select Case VBC.Type
Case 1: strMes = strMes & vbLf & "Module"
Case 2: strMes = strMes & vbLf & "Class Module"
Case 3: strMes = strMes & vbLf & "UserForm"
Case 100: strMes = strMes & vbLf & "Document Module"
End Select
Next VBC
End With

MsgBox strMes

End Sub
'
et cela fonctionne très bien sous VBA , mais sous VB, même en ayant chargé
la référence ça plante car il ne reconnait pas :
ActiveVBProject
dans
Set VBP = ActiveVBProject

Merci encore

mounynao
Avatar
Jean-marc
Mousnynao wrote:
Bonjour,

Merci de vos réponses.

Je n'y arrive pas vraiment !

Sous VBA j'ai coder quelques comme :

Sub Main()

Dim VBP As Variant
Dim VBC As VBComponent
Dim NomModule As String, Plage As String
Dim strMes As String

On Error Resume Next

Set VBP = ActiveVBProject

With VBP
For Each VBC In .VBComponents
strMes = strMes & vbLf & VBC.Name
Select Case VBC.Type
Case 1: strMes = strMes & vbLf & "Module"
Case 2: strMes = strMes & vbLf & "Class Module"
Case 3: strMes = strMes & vbLf & "UserForm"
Case 100: strMes = strMes & vbLf & "Document Module"
End Select
Next VBC
End With

MsgBox strMes

End Sub
'
et cela fonctionne très bien sous VBA , mais sous VB, même en ayant
chargé la référence ça plante car il ne reconnait pas :
ActiveVBProject
dans
Set VBP = ActiveVBProject



Ca ne marchera pas car VB6 n'est pas VBA. Il n'y a pas moyen de faire
comme tu fais avec VBA. Les seules solutions sont les méthodes
exposées par françois ou par moi, en tout cas à ma connaissance.


--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
mailto: remove '_no_spam_' ;
FAQ VB: http://faq.vb.free.fr/
Avatar
François Picalausa
On Aug 15, 11:06 pm, Mousnynao
wrote:
Bonjour,

Merci de vos réponses.

Je n'y arrive pas vraiment !

Sous VBA j'ai coder quelques comme :

Sub Main()

Dim VBP As Variant
Dim VBC As VBComponent
Dim NomModule As String, Plage As String
Dim strMes As String

On Error Resume Next

Set VBP = ActiveVBProject

With VBP
For Each VBC In .VBComponents
strMes = strMes & vbLf & VBC.Name
Select Case VBC.Type
Case 1: strMes = strMes & vbLf & "Module"
Case 2: strMes = strMes & vbLf & "Class Module"
Case 3: strMes = strMes & vbLf & "UserForm"
Case 100: strMes = strMes & vbLf & "Document Module"
End Select
Next VBC
End With

MsgBox strMes

End Sub
'
et cela fonctionne très bien sous VBA , mais sous VB, même en ayant chargé
la référence ça plante car il ne reconnait pas :
ActiveVBProject
dans
Set VBP = ActiveVBProject

Merci encore

mounynao



Hello,

Tu peux réaliser quelquechose de similaire à l'aide de la référence à
VBE, dans un addin de VB (mais uniquement en design-time).
D'où ma question, souhaites-tu récupérer cette information au design
ou au runtime?
Dans le second cas, une solution aussi semblable est inexistante. En
nous disant ce que tu souhaites faire (et surtout si tu souhaites le
faire en runtime ou designtime) nous pourrons alors te guider vers
l'une ou l'autre solution appropriée.

François
Avatar
Mousnynao
Bonsoir,

Oui, c'est uniquement en disign-time.

L'Objectif est d'intancier des rapports avec des objets Crystal Report
Designer
de façon dynamique. Toutefois nous n'arrivons pas a s'accrocher sur les objets
de Crystal, d'ou mon idée de produire la liste une fois le(s) rapports
instancier.

En fait nous ajoutons un module [CrystalReport1], celui pouvant instancier
plusieurs sous-rapports. Disons que j'ai un collègue spécialiste de Crystal
que je connais moins et nous tentons de solutionner ce dilème.

J'ai bien tenter quelques lignes avec VBE sans trop savoir comment m'y
prendre.
Je suis la dessus depuis plusieurs jours et c'est pourquoi je lancé un appel à
l'aide.

Si vous pouviez m'indiquer brièvement comment démarrer ce serait sympa.

Le projet globale est assez tordu, nous développons une appli VB qui utilise
Crystal pour taper dans une BD propriétaire "vraiment non standard" de
HP-Peregrine ServiceCenter. Actuellement nous avons une solution VB
statique en production, mais nous avons le défi de réaliser des statistiques
encore plus complètes, ce qui nous pousse è aller de l'avant dans cette voie.

Merci encore de vos interventions, car là je "galère", dans mon patelin
je dirais que je "rush", mais il faut croire que j'aime ça !

mousnynao
Avatar
François Picalausa
On Aug 16, 2:04 am, Mousnynao
wrote:
Bonsoir,

Oui, c'est uniquement en disign-time.

L'Objectif est d'intancier des rapports avec des objets Crystal Report
Designer
de façon dynamique. Toutefois nous n'arrivons pas a s'accrocher sur les objets
de Crystal, d'ou mon idée de produire la liste une fois le(s) rapports
instancier.

En fait nous ajoutons un module [CrystalReport1], celui pouvant instanci er
plusieurs sous-rapports. Disons que j'ai un collègue spécialiste de C rystal
que je connais moins et nous tentons de solutionner ce dilème.

J'ai bien tenter quelques lignes avec VBE sans trop savoir comment m'y
prendre.
Je suis la dessus depuis plusieurs jours et c'est pourquoi je lancé un appel à
l'aide.

Si vous pouviez m'indiquer brièvement comment démarrer ce serait symp a.

Le projet globale est assez tordu, nous développons une appli VB qui ut ilise
Crystal pour taper dans une BD propriétaire "vraiment non standard" de
HP-Peregrine ServiceCenter. Actuellement nous avons une solution VB
statique en production, mais nous avons le défi de réaliser des stati stiques
encore plus complètes, ce qui nous pousse è aller de l'avant dans cet te voie.

Merci encore de vos interventions, car là je "galère", dans mon patel in
je dirais que je "rush", mais il faut croire que j'aime ça !

mousnynao



Hello,

Je ne suis pas certain de comprendre le problème avec Crystal (je suis
moi même très loin d'être expert du domaine), mais néanmoins je peux
expliquer comment retrouver la liste des composants du projet en
design time.
La première étape consiste à créer un nouveau projet de type Addin
(attention, sur les version FR de vb, penser à corriger dans le code
généré le bug décrit dans cette fiche : http://support.microsoft.co m/kb/812505/fr).

Ensuite, dans frmAddin, placer une ListBox (List1) et un combobox
(combo1, Style=2 - Dropdown List) et ajouter le code suivant:
Private Sub Combo1_Click()
Dim Project As VBProject
Dim Component As VBComponent

List1.Clear

If (Combo1.ListIndex <> -1) Then
'We could also use the
'VBInstance.ActiveVBProject property
For Each Project In VBInstance.VBProjects
List1.AddItem "== " & Project.Name

'Check all components corresponding to the current filter
For Each Component In Project.VBComponents
If (Component.Type =
Combo1.ItemData(Combo1.ListIndex)) Then
List1.AddItem Component.Name
End If
Next Component
Next Project
End If
End Sub

Private Sub Form_Load()
'Initialize combo with common component types
Combo1.AddItem "Module"
Combo1.AddItem "Form"
Combo1.AddItem "MDI Form"
Combo1.AddItem "Class Module"
Combo1.AddItem "Usercontrol"

Combo1.ItemData(0) = vbext_ComponentType.vbext_ct_StdModule
Combo1.ItemData(1) = vbext_ComponentType.vbext_ct_VBForm
Combo1.ItemData(2) = vbext_ComponentType.vbext_ct_VBMDIForm
Combo1.ItemData(3) = vbext_ComponentType.vbext_ct_ClassModule
Combo1.ItemData(4) = vbext_ComponentType.vbext_ct_UserControl
End Sub

Lorsque le projet addin est démarré (en IDE) ou compilé et qu'une
(seconde) IDE est ouverte,la liste de chacun des composants est
accessible au travers du menu Add-Ins.

J'espère que cela permettra de résoudre ton problème!

François
Avatar
Mousnynao
Bonjour,

Je vous remercie de votre aide, malheureusement je ne suis pas familier
avec le type [ Add-In ].

J'ai suivi à la lettre les étapes que vous m'avez décrits. Dans la fenêtre
d'exécution du projet [ Add-In ], je vois bien la deuxième instance de VB
s'afficher.
Mais la form [ frmAddIn ] ne se charge, j'ai bien mis un point d'arrêt dans
l'évènement [ Form_Load ] sans résultat.

<Citation>
Lorsque le projet addin est démarré (en IDE) ou compilé et qu'une
(seconde) IDE est ouverte,la liste de chacun des composants est
accessible au travers du menu Add-Ins.
</Citation>

(... accessible au travers du menu Add-Ins. ) ???

Je ne trouve pas ce menu, serait-ce :

// Menu / Compléments / My AddIn

désolu pour mon ignorance, comme précisé le AddIn est une nouvelle
approche pour moi.

Je crois vraiment que ce sera la soluce si je parviens à visualiser ces
objets.

Pour faire une histoire courte, actuellement nous utilisons l'objet
Crystal Report Viewer qui permet de générer des rapports disons
statique. En employant plutôt l'objet Crystal Report Designer, nous
pourrons rendre nos rapports plus dynamique, plus performant et
surtout en réduire le nombre. Actuellement nous avons environ
160 rapports, construit avec un ou des sous-rapports, alors si nous
arrivons à gérer les sous-rapports de façon dynamique, nous pourrons
réduire le nombre de rapports et de plus, jumelé des sous-rapports
pour rafiner nos statistiques.

Encore merci de votre aide ...

Michel
GOUV.QC.CA
Électrotechnicien/Infomatique
Avatar
François Picalausa
On Aug 17, 3:01 am, Mousnynao
wrote:
<Citation>
Lorsque le projet addin est démarré (en IDE) ou compilé et qu'une
(seconde) IDE est ouverte,la liste de chacun des composants est
accessible au travers du menu Add-Ins.
</Citation>

(... accessible au travers du menu Add-Ins. ) ???

Je ne trouve pas ce menu, serait-ce :

// Menu / Compléments / My AddIn

désolu pour mon ignorance, comme précisé le AddIn est une nouvelle
approche pour moi.



Hello,

C'est effectivement le menu complément (qui se nomme Add-ins dans la
version EN), puis My AddIn.

Pas d'inquiétude en ce qui concerne les Addins : peu de gens
connaissent le domaine en question, parce que peu de problèmes
demandent des solutions design time!

François
Avatar
Mousnynao
Bonjour,

Tout d'abord, je tiens à te remercier de ton aide précieuse, j'en profite
aussi pour
remercier Jean-Marc pour ces interventions.

Je n'ai pas enore réussi la manoeuvre, mais je ne me décourage pas facilement.
Au moment d'écrire mon précédent message, je voyais le sous menu [ Addins ],
maintenant il a été remplacer par [ Visual Modeler ].

Bon, je tente toute sorte de manoeuvre, alors il est bien possible que j'ai
bousiller
un peu le projet. De plus mon poste est soumis à des GPOs qui ne tiennent pas
vraiment compte de ce que je fais. Et oui, même dans les grosses boites, il se
produit des court-circuits qui provoque des dommages.

J'ai tente actuellement de trouver une aide supplémentaire dans mon entourage,
et encore une fois dans les grosses boite, ce n'est pas toujours facile.

Je vais tenter la manoeuvre sur mon poste à mon domicile ou je suis en plein
contrôle du poste et des ses composantes.

En résumé, merci encore de votre aide précieuse, c'est déjà plus facile
d'avoir
de l'aide que lorsque je code sous ServiceCenter qui comporte un language
propriétaire pas évident et dont aucune ressources n'est disponible sur le
net.

Michel