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

Pour ceux que ça intéresse sur les Collections

2 réponses
Avatar
GL
Bonjour,

VBA ne permet pas d'insérer dans une collection un type
personnalisé (pour des raisons seulement en partie justifiables)

Type Personne
Nom as String
Prenom as String
End Type
Dim P as Personne
maCollection.Add P => plante

Donc on ne peut pas avoir un vecteur de Personne (sauf un tableau
mais ce n'est pas l'objet). On peut toujours définir une variable
qui permette d'écrire pour la 3è personne :
VecteurPersonne.Nom(3) / VecteurPersonne.Prenom(3)
Mais pas : VecteurPersonne(3).Nom / VecteurPersonne(3).Prenom

Sauf à construire une classe spécifique pour le type de donnée Personne.
Mais à priori pas de classe générale pour tout type structure (dont les
champs restent toujours des types de base de VBA).

Or : 1) on peut insérer une collection dans une collection
2) Collection("Champ") est une syntaxe fournie.
Donc modulo une petite variation de syntaxe par rapport aux structures,
on peut créer une classe générale pour tout type personnalisé qui
permette d'écrire :
VecteurPersonne(3)("Nom") / VecteurPersonne(3)("Prenom")

Ou comment, à force de mettre des syntaxes d'objet partout, VBA nous
ramène à la bonne vieille syntaxe des langages /normaux/...

Cordialement.

2 réponses

Avatar
GL
Le 04/06/2014 18:01, GL a écrit :
Bonjour,

Ou comment, à force de mettre des syntaxes d'objet partout, VBA nous
ramène à la bonne vieille syntaxe des langages /normaux/...



Et du coup ça a l'avantage que l'affectation :

Structure("Champ") = Range("A1:B10")

se passe de Set... puisque
Collection.Add Range("A1:B10")
et Collection.Add "Mon Texte"
ont la même syntaxe. ou Comment, à force de mettre des syntaxes d'objet
partout... on s'en passe allègrement !

Bonne soirée.
Avatar
GL
Le 04/06/2014 20:18, GL a écrit :
Le 04/06/2014 18:01, GL a écrit :
Bonjour,

Ou comment, à force de mettre des syntaxes d'objet partout, VBA nous
ramène à la bonne vieille syntaxe des langages /normaux/...



Et du coup ça a l'avantage que l'affectation :

Structure("Champ") = Range("A1:B10")

se passe de Set... puisque
Collection.Add Range("A1:B10")
et Collection.Add "Mon Texte"
ont la même syntaxe. ou Comment, à force de mettre des syntaxes d'objet
partout... on s'en passe allègrement !



Et on peut écrire :

Variable(i,j,k)("Champ") = Valeur
Variable(i)(j)(k)("Champ") = Valeur
Variable(i,j,k,"Champ") = Valeur

On a un tableau multidimensionnel structuré dont on n'a pas
à se préoccuper des bornes (pas de besoin de Redim).

Excellent ! Ce petit truc des Collections !!