Bonjour,
Attention, tu tombes dans un piège classique de VB/VBA:
Dans la déclaration d'une liste de variables, chaque variable a un type distinct de celui des autres variables de la liste.
Ne pas spécifier un type revient à spécifier le type Variant.
La déclaration suivante:
Dim c1, c2 As New Collection
est équivalente à:
Dim c1 As Variant, c2 as New Collection
Donc, si tu veux vraiment que c1 soit une collection, tu dois corriger ta déclaration ainsi (où l'opérateur New n'est pas forcément nécessaire):
Dim c1 As New Collection, c2 as New Collection
Ensuite...
![Citation](https://forum.developpez.be/images/misc/quote_icon.png)
Envoyé par
docv266
J'ai 2 collections c1 et c2.
Je souhaite à un moment donné, conserver l'une des deux dans l'autre
->
puis modifier la première
->
et enfin retrouver ma valeur d'origine
->
VB/VBA ne sait pas faire la copie d'un objet dans un autre.
Il faut programmer la copie, par exemple comme ceci:
1 2 3 4 5 6 7 8 9 10
| Dim c1 As New Collection, c2 As Collection , v As Variant
... ton code ...
' et puis tu veux "sauver" c1 en copiant son contenu dans c2
Set c2 = New Collection
For Each v In c1
c2.Add v
Next v |
Enfin, tu veux "récupérer" dans c1 ton objet tel qu'il a été sauvé dans c2...
Le plus simple est de "jeter" l'objet actuellement référencé par c1 et de faire "pointer" c1 sur l'objet collection créé au moment de la copie.
Enfin, éventuellement tu peux "libérer" c2 pour qu'il ne référence pas le même objet que c1.
1 2
| Set c1 = c2
Set c2 = Nothing |
Partager