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

Procédure Property Let

2 réponses
Avatar
arbiel
Bonjour

J'ai créé un module de classe pour faciliter la création de collections
triées à partir d'éléments présentés dans un ordre quelconque.

L'élément de la classe contient deux objets de type collection, le premier
pour la collection elle-même, le deuxième pour les clés.

Pour insérer un nouvel élément, je voulais écrire une méthode, ce queje ne
sais pas vraiment faire. A la place, j'ai écrit une Propriété let, avec deux
paramètres : la clé et l'élément à insérer dans la liste.

La collection des clés comprend autant d'élements que la collection
proprement dite. Elle me permet de trouver l'emplacement où il faut insérer
les nouveaux élément;

Mon code de classe est celui-ci :


Option Explicit

Public Ensemble As Collection
Public LesCles As Collection

Public Property Let Ajout( _
Key As String, _
Item As Object)

suit le code de recherche de la position et de mise à jour des collections

end property

Le code qui permet de créer la collection triée est à peu le suivant

Dim A as CollectionTriée

Set A = New CollectionTriée
'suit alors le code de composition de l'élément à introduire dans la liste
monNouvelObjet, dont la clé vaut LaClédeLobjet

A.Ajout (key:=LaClédeLobjet) = MonNouvelObjet

J'ai deux questions :

1) pourquoi le code
Set A.Ajout (key:=LaClédeLobjet) = MonNouvelObjet
n'est'il pas correct ?

2) je veux retourner une valeur d'erreur si plusieurs éléments ont la même
valeur de clé. Comment faire ?

D'avance merci.

Je tiens le code disponible pour quiconque est intéressé par cette classe.

Arbiel

2 réponses

Avatar
david
salut,
1° - erreur de syntaxe :
En fait, le 2° paramètre de ta propriété (celui à droite du =) est
un objet !
=> la propriété LET n'existe que pour les types simples. Pour les
objets on utilise SET
Donc, ta propriété doit s'écrire :
Public Property Set Ajout( byval Key As String, byRef Item As
Object)
rq: ajoute toujours les byvla et byref si tu ne veux pas avoir de
surprise d'effets de bords par la suite.

2° - Retour d'erreur
Le plus simple (et le plus propre) est de lever une erreur :
err.raise n°d'erreur, "classe", "description"
Attention : dans ta propriété (ou méhtode), tu doit avoir un
On Error Resume Next 'au début
et
On Error Goto 0 'à la fin

3° - méthode/propriété
Je pense que pour les propriétés ça va, pour les méthodes il suffit
de déclarer un Sub ou un Function, suivant que tu ne veuilles pas (ou
que tu veuilles) retourner un résultat :
Public Function Ajout( byval Key As String, byRef Item As Object)As
Object
et s'utilise par :
A.Ajout (LaClé, LObjet)
Tu peux avec ça retourner l'objet paramètre si tout c'est bien
passé, ou Nothing (ou null si tu utilise des types standard) sinon.

A+, david

Ton cas devient donc :
arbiel a écrit :

Bonjour

J'ai créé un module de classe pour faciliter la création de collect ions
triées à partir d'éléments présentés dans un ordre quelconque.

L'élément de la classe contient deux objets de type collection, le pr emier
pour la collection elle-même, le deuxième pour les clés.

Pour insérer un nouvel élément, je voulais écrire une méthode, ce queje ne
sais pas vraiment faire. A la place, j'ai écrit une Propriété let, avec deux
paramètres : la clé et l'élément à insérer dans la liste.

La collection des clés comprend autant d'élements que la collection
proprement dite. Elle me permet de trouver l'emplacement où il faut ins érer
les nouveaux élément;

Mon code de classe est celui-ci :


Option Explicit

Public Ensemble As Collection
Public LesCles As Collection

Public Property Let Ajout( _
Key As String, _
Item As Object)

suit le code de recherche de la position et de mise à jour des collecti ons

end property

Le code qui permet de créer la collection triée est à peu le suivant

Dim A as CollectionTriée

Set A = New CollectionTriée
'suit alors le code de composition de l'élément à introduire dans l a liste
monNouvelObjet, dont la clé vaut LaClédeLobjet

A.Ajout (key:=LaClédeLobjet) = MonNouvelObjet

J'ai deux questions :

1) pourquoi le code
Set A.Ajout (key:=LaClédeLobjet) = MonNouvelObjet
n'est'il pas correct ?

2) je veux retourner une valeur d'erreur si plusieurs éléments ont la même
valeur de clé. Comment faire ?

D'avance merci.

Je tiens le code disponible pour quiconque est intéressé par cette cl asse.

Arbiel


Avatar
arbiel
Merci beaucoup pour ces informations

J'ai transformé ma procédure Property en une fonction, avec déclenchement
d'erreur avec err.raise.

Tout marche parfaitement.

Merci encore

"david" a écrit :

salut,
1° - erreur de syntaxe :
En fait, le 2° paramètre de ta propriété (celui à droite du =) est
un objet !
=> la propriété LET n'existe que pour les types simples. Pour les
objets on utilise SET
Donc, ta propriété doit s'écrire :
Public Property Set Ajout( byval Key As String, byRef Item As
Object)
rq: ajoute toujours les byvla et byref si tu ne veux pas avoir de
surprise d'effets de bords par la suite.

2° - Retour d'erreur
Le plus simple (et le plus propre) est de lever une erreur :
err.raise n°d'erreur, "classe", "description"
Attention : dans ta propriété (ou méhtode), tu doit avoir un
On Error Resume Next 'au début
et
On Error Goto 0 'à la fin

3° - méthode/propriété
Je pense que pour les propriétés ça va, pour les méthodes il suffit
de déclarer un Sub ou un Function, suivant que tu ne veuilles pas (ou
que tu veuilles) retourner un résultat :
Public Function Ajout( byval Key As String, byRef Item As Object)As
Object
et s'utilise par :
A.Ajout (LaClé, LObjet)
Tu peux avec ça retourner l'objet paramètre si tout c'est bien
passé, ou Nothing (ou null si tu utilise des types standard) sinon.

A+, david

Ton cas devient donc :
arbiel a écrit :

> Bonjour
>
> J'ai créé un module de classe pour faciliter la création de collections
> triées à partir d'éléments présentés dans un ordre quelconque.
>
> L'élément de la classe contient deux objets de type collection, le premier
> pour la collection elle-même, le deuxième pour les clés.
>
> Pour insérer un nouvel élément, je voulais écrire une méthode, ce queje ne
> sais pas vraiment faire. A la place, j'ai écrit une Propriété let, avec deux
> paramètres : la clé et l'élément à insérer dans la liste.
>
> La collection des clés comprend autant d'élements que la collection
> proprement dite. Elle me permet de trouver l'emplacement où il faut insérer
> les nouveaux élément;
>
> Mon code de classe est celui-ci :
>
>
> Option Explicit
>
> Public Ensemble As Collection
> Public LesCles As Collection
>
> Public Property Let Ajout( _
> Key As String, _
> Item As Object)
>
> suit le code de recherche de la position et de mise à jour des collections
>
> end property
>
> Le code qui permet de créer la collection triée est à peu le suivant
>
> Dim A as CollectionTriée
>
> Set A = New CollectionTriée
> 'suit alors le code de composition de l'élément à introduire dans la liste
> monNouvelObjet, dont la clé vaut LaClédeLobjet
>
> A.Ajout (key:=LaClédeLobjet) = MonNouvelObjet
>
> J'ai deux questions :
>
> 1) pourquoi le code
> Set A.Ajout (key:=LaClédeLobjet) = MonNouvelObjet
> n'est'il pas correct ?
>
> 2) je veux retourner une valeur d'erreur si plusieurs éléments ont la même
> valeur de clé. Comment faire ?
>
> D'avance merci.
>
> Je tiens le code disponible pour quiconque est intéressé par cette classe.
>
> Arbiel