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

Urgent: Collection d'objets (soft à finir cette semaine)

5 réponses
Avatar
Frédéric Van der Beken
Bonjour,

VB6
J'ai un contrôle ocx provenant d'un fabricant de panneaux lumineux. Ce
contrôle gère et incorpore les communications en Ip, série, modem etc.
J'ai posé le contrôle sur le form, ai manipulé les propriétés sans problème
et ai réussi à envoyer au panneau.
Maintenant, je dois gérer 20 panneaux.
Je crois que la bonne méthode est de créer une collection plutôt que de
dupliquer 20 fois le contrôle sur le form.
D'habitude je ne bosse pas en VB et là j'ai un problème: erreur 438 sur
RTUs.Add (RTU)

L'objet s'appelle RTU et la collection RTUs

'Déclaration
Dim RTUs As New Collection

'Form_Load
For Index = 0 To 19
RTUs.Add (RTU)
Next Index

'Form_QueryUnload
For Index = 0 To 19
Set RTUs(Index) = Nothing
Next Index

Je pense que je n'ai pas la bonne syntaxe
Merci de votre aide
--
===================================================
F. Van der Beken

VEDEX
8, rue de la Féculerie
Z.I. les Cailloux
45150 JARGEAU
Tél: 02 38 46 11 65 Fax: 02 38 46 19 35

Sites: www.vedex.com www.pointeuse.fr www.pointeuses.net
E-mail: {EnlevezMoiPourRepondre}support@vedex.com

Localisation: www.mappy.com/PlanPerso/vedex/0
===================================================

5 réponses

Avatar
Patrice Henrio
"Frédéric Van der Beken" <{EnlevezMoiPourRepondre} a écrit
dans le message de news:
Bonjour,

VB6
J'ai un contrôle ocx provenant d'un fabricant de panneaux lumineux. Ce
contrôle gère et incorpore les communications en Ip, série, modem etc.
J'ai posé le contrôle sur le form, ai manipulé les propriétés sans
problème
et ai réussi à envoyer au panneau.
Maintenant, je dois gérer 20 panneaux.
Je crois que la bonne méthode est de créer une collection plutôt que de
dupliquer 20 fois le contrôle sur le form.
D'habitude je ne bosse pas en VB et là j'ai un problème: erreur 438 sur
RTUs.Add (RTU)

L'objet s'appelle RTU et la collection RTUs

'Déclaration
Dim RTUs As New Collection

'Form_Load
For Index = 0 To 19
RTUs.Add (RTU)
Next Index

'Form_QueryUnload
For Index = 0 To 19
Set RTUs(Index) = Nothing
Next Index

Je pense que je n'ai pas la bonne syntaxe
Merci de votre aide
--
================================================== > F. Van der Beken

VEDEX
8, rue de la Féculerie
Z.I. les Cailloux
45150 JARGEAU
Tél: 02 38 46 11 65 Fax: 02 38 46 19 35

Sites: www.vedex.com www.pointeuse.fr www.pointeuses.net
E-mail: {EnlevezMoiPourRepondre}

Localisation: www.mappy.com/PlanPerso/vedex/0
================================================== >



Je ne suis pas expert en collection mais une chose me choque dans ton code
For Index = 0 To 19
RTUs.Add (RTU)
Next Index



Pour ma part j'écrirai

for Index=0 to 9
set V = new RTU
RTUs.add V
Next Index
Avatar
Frédéric Van der Beken
je vais essayer, le V il faut le déclarer ?

--
================================================== F. Van der Beken

VEDEX
8, rue de la Féculerie
Z.I. les Cailloux
45150 JARGEAU
Tél: 02 38 46 11 65 Fax: 02 38 46 19 35

Sites: www.vedex.com www.pointeuse.fr www.pointeuses.net
E-mail: {EnlevezMoiPourRepondre}

Localisation: www.mappy.com/PlanPerso/vedex/0
==================================================
"Patrice Henrio" a écrit dans le message de
news:

"Frédéric Van der Beken" <{EnlevezMoiPourRepondre} a


écrit
dans le message de news:
> Bonjour,
>
> VB6
> J'ai un contrôle ocx provenant d'un fabricant de panneaux lumineux. Ce
> contrôle gère et incorpore les communications en Ip, série, modem etc.
> J'ai posé le contrôle sur le form, ai manipulé les propriétés sans
> problème
> et ai réussi à envoyer au panneau.
> Maintenant, je dois gérer 20 panneaux.
> Je crois que la bonne méthode est de créer une collection plutôt que de
> dupliquer 20 fois le contrôle sur le form.
> D'habitude je ne bosse pas en VB et là j'ai un problème: erreur 438 sur
> RTUs.Add (RTU)
>
> L'objet s'appelle RTU et la collection RTUs
>
> 'Déclaration
> Dim RTUs As New Collection
>
> 'Form_Load
> For Index = 0 To 19
> RTUs.Add (RTU)
> Next Index
>
> 'Form_QueryUnload
> For Index = 0 To 19
> Set RTUs(Index) = Nothing
> Next Index
>
> Je pense que je n'ai pas la bonne syntaxe
> Merci de votre aide
> --
> ================================================== > > F. Van der Beken
>
> VEDEX
> 8, rue de la Féculerie
> Z.I. les Cailloux
> 45150 JARGEAU
> Tél: 02 38 46 11 65 Fax: 02 38 46 19 35
>
> Sites: www.vedex.com www.pointeuse.fr www.pointeuses.net
> E-mail: {EnlevezMoiPourRepondre}
>
> Localisation: www.mappy.com/PlanPerso/vedex/0
> ================================================== > >
>
Je ne suis pas expert en collection mais une chose me choque dans ton code
> For Index = 0 To 19
> RTUs.Add (RTU)
> Next Index

Pour ma part j'écrirai

for Index=0 to 9
set V = new RTU
RTUs.add V
Next Index




Avatar
Patrice Henrio
"Frédéric Van der Beken" <{EnlevezMoiPourRepondre} a écrit
dans le message de news:
je vais essayer, le V il faut le déclarer ?




Bien sûr comme toutes les variables pour ne pas avoir de surprises.
J'utilise toujours en tête de mes modules Option explicit
Avatar
Jacques93
Frédéric Van der Beken a écrit :
Bonjour,

VB6
J'ai un contrôle ocx provenant d'un fabricant de panneaux lumineux. Ce
contrôle gère et incorpore les communications en Ip, série, modem etc.
J'ai posé le contrôle sur le form, ai manipulé les propriétés sans problème
et ai réussi à envoyer au panneau.
Maintenant, je dois gérer 20 panneaux.
Je crois que la bonne méthode est de créer une collection plutôt que de
dupliquer 20 fois le contrôle sur le form.
D'habitude je ne bosse pas en VB et là j'ai un problème: erreur 438 sur
RTUs.Add (RTU)

L'objet s'appelle RTU et la collection RTUs

'Déclaration
Dim RTUs As New Collection

'Form_Load
For Index = 0 To 19
RTUs.Add (RTU)
Next Index

'Form_QueryUnload
For Index = 0 To 19
Set RTUs(Index) = Nothing
Next Index




Si c'est toi qui gère la collection RTUs, ce qui semble être le cas,
(l'erreur 438 indiquant que l'objet RTUs ne gère pas la méthode Add)
c'est à toi dans le module de classe de gérer, la création, l'ajout,
etc..., par exemple :

=================================================================== Private RTUs As Collection

Public Function Add(Key As String) As RTU
Dim newRTU As RTU

Set newRTU = New RTU
newRTU.Key = Key
RTUs.Add newRTU, Key
Set Add = newRTU
Set newRTU = Nothing
End Function

' Cette propriété doit avoir une ID de procédure 'par défaut'
' dans Outils => Attribut de procédure
Public Property Get Item(IndexKey As Variant) As RTU
Set Item = RTUs(IndexKey)
End Property

Public Property Get Count() As Long
Count = RTUs.Count
End Property

Public Sub Remove(IndexKey As Variant)
RTUs.Remove IndexKey
End Sub

' Cette propriété doit être caché et avoir une ID de procédure = -4
' dans Outils => Attribut de procédure. C'est elle qui permet
' l'énumération de la collection par For Each ... In ...
Public Property Get NewEnum() As IUnknown
Set NewEnum = RTUs.[_NewEnum]
End Property

Private Sub Class_Initialize()
Set RTUs = New Collection
End Sub

Private Sub Class_Terminate()
Set RTUs = Nothing
End Sub

' Tu peux bien sur avoir d'autres méthodes et propriétés, spécifiques au
fonctionnement de ta collection.
=====================================================================
Cela dit, il faut peut être réfléchir entre cette solution et une autre,
un groupe de contôles :

Tu poses 1 contrôle sur ta feuille, tu mets sa propriété Index à 0,
et ensuite tu fais :

For i=1 to n
Load RTU(n)
next i

Ensuite tout dépends si ton contrôle présente une interface et est donc
visible auquel cas il faudra le positionner sur la feuille, etc ...


--
Cordialement,

Jacques.
Avatar
Frédéric Van der Beken
Bonjour,

J'ai opté pour:

For i=1 to n
Load RTU(n)
next i
et le Unload en fin de programme

C'est simple, compréhensible et ça marche impec., mon appli est terminée et
est en test chez l'installateur.
Mon ocx est un contrôle invisible (style mscomm) donc pas d'autre problème.

Merci pour votre aide Jacques et Patrick

Frédéric
--
================================================== F. Van der Beken

VEDEX
8, rue de la Féculerie
Z.I. les Cailloux
45150 JARGEAU
Tél: 02 38 46 11 65 Fax: 02 38 46 19 35

Sites: www.vedex.com www.pointeuse.fr www.pointeuses.net
E-mail: {EnlevezMoiPourRepondre}

Localisation: www.mappy.com/PlanPerso/vedex/0
===================================================