[VBA] comment modifier les items des collections
moi, j'arrrive pas
qd j'ai
Code:
collect as new collection
je remplis la collection
apres qd je fais
Code:
collect.items(1)= x
ou set collect.items(1)=x
ça ne marche jamais,
il demande un object.
qn le sait?
1 pièce(s) jointe(s)
Autre possibilité : Avec une classe
Bonjour,
Confronté au même problème quelques années plus tard, voici une autre solution :
Créer une classe et l'utiliser comme item de la collection.
Module de classe "MaClasse" contenant (au plus simple) :
Code d'utilisation :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| Dim MaColl as New Collection
Dim ItemColl as MaClasse
'
For i = 1 to 3
Set ItemColl = New MaClasse
ItemColl.Valeur = Str(i)
MaColl.Add ItemColl [,Key (s'il y a une clé)]
Set ItemColl = nothing
Next
'
' Pour modifier le 2ème élément avec une valeur, on peut alors utiliser :
MaColl(2).Valeur = "3"
'
' ou, pour le modifier avec la valeur du 3ème élément :
MaColl(2).Valeur = MaColl(3).Valeur |
C'est d'ailleurs aussi TRES pratique pour modifier des items Table() dans une collection.
Pour modifier un élément de la table dans un item, il faut normalement : :(
- copier cet item dans un Array
- en modifier l'élément voulu
- supprimer l'item de la collection
- ajouter l'Array modifié dans la collection.
Ouf !
Avec une classe, on obtient ceci :
Module de classe "MaClasse" contenant (au plus simple) :
Code:
1 2 3 4 5
| Public Item
Public Sub Ecrire(Valeur, RangElement)
Item(RangElement) = Valeur
End Sub |
Code d'utilisation :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| Dim MaColl as New Collection
Dim ItemColl as MaClasse
Dim Table(1 to 3)
'
For i = 1 to 3
'
For j = 1 to UBound(Table)
Table(j) = Str(i) & "," & Str(j)
Next
'
Set ItemColl = New MaClasse
ItemColl.Item = Table
MaColl.Add ItemColl [,Key (s'il y a une clé)]
Set ItemColl = nothing
'
Next
'
' Pour modifier le 2ème élément du 1er item, on peut alors utiliser :
Call MaColl(1).Ecrire("3,2", 2)
'
' ou bien, pour le modifier avec la valeur du 2ème élément du 3ème item :
Call MaColl(1).Ecrire(MaColl(3).Item()(2), 2)
'
' ou encore, pour modifier tout l'item :
MaColl(1).Item = MaColl(3).Item |
L'utilisation des classes fait parfois un peu peur, mais là le gain est impressionnant.
:D
Pièce jointe 138436