VBA : test d'égalité de deux collections?

Choupette -  
eriiic Messages postés 24603 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Je souhaiterai tester l'égalité de deux collections sous VBA :
j'ai une collection, appelée List, dont les éléments sont des vecteurs de taille 2, et une seconde collection, appelée CollectList, dont les éléments sont des collections contenant eux aussi des vecteurs de taille 2.
Je souhaiterai ajouter List à CollectList mais en ayant vérifier au préalable que CollectList ne contient pas déjà une collection égale à List.
J'ai donc essaer de créer une fonction qui teste si il existe une collection dans CollectList qui est égale à List. Voici le code de ma fonction :

1 Function EgaliteListes(CollectList As Collection, List As Collection) As Boolean
2 EgaliteListes = False
3 Dim cl As Variant
4 For Each cl In CollectList
5 If cl = List Then EgaliteListes = True
6 End If
7 Next cl
8 End Function

J'ai ensuite créé une procédure pour tester si ma fonction fonctionne ou pas :
Sub test()
Dim collect As Collection
Dim coltest As Collection
Set collect = New Collection
Set coltest = New Collection
Dim j As Integer
For j = 1 To 5
Dim x(2) As Integer
x(1) = j
x(2) = j + 5
collect.Add x
Next j
Dim test(2) As Integer
test(1) = 1
test(2) = 1
coltest.Add test
Dim res As Boolean
res = EgaliteListes(collect, coltest)
MsgBox "Résultat du test d'égalité : " & res
End Sub


Lorsque je lance cette procédure de test, un message d'erreur apparaît :
"Erreur de compilation : Argument non facultatif" et la variable "List" de la ligne dans la fonction EgaliteListes est soulignée.

Si quelqu'un peut m'aider à trouver la solution à mon problème, ça serait super sympa!

Merci.

2 réponses

michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
Bonjour

Qu'appelles tu "vecteur de taille 2" ?

..."CollectList ne contient pas déjà une collection égale à List."...
peut-^tre veux tu dire
CollectList ne contient pas déjà un membre égal à List.
????
Michel
0
Choupette
 
J'entends par "vecteur de taille 2" un tableau comportant 1 seule ligne et 2 colonnes.

et je voulais insister sur le fait que CollectList est une collection de collections.
0
eriiic Messages postés 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 275
 
Bonjour,

1) Tu as déjà une erreur dans le 1er code.
Si ton then est sur la même ligne que le if il ne faut pas mettre end if
Et tant qu'à faire, met EgaliteListes = True sur la ligne suivante et ajoute exit for (si tu as trouvé, inutile de continuer) et garde le endif,

2) tu compares cl de dimension 1 avec List de dimension 2.

3) j'ai l'impression qu'on est obligé de comparer tous les éléments 1 par 1, et le as Collection en paramètre de la fonction passe mal, j'ai mis en variant en attendant mieux.

Proposition :
Function EgaliteListes(CollectList, List) As Boolean   
    Dim i As Long   
    EgaliteListes = False   
    Dim cl As Variant   
    For Each cl In CollectList   
        For i = 0 To 2   
            If cl(i) <> List(1)(i) Then Exit For   
        Next i   
        If i = 3 Then   
            EgaliteListes = True   
            Exit For   
        End If   
    Next cl   
End Function   

Ajoute la fenêtre Espions (menu Affichage) et fais glisser tes variables dedans pour voir à quoi elles ressemblent (cl et List entre autres)

eric


Jamais tu ne répondras à un mp non sollicité...
Bon, ça c'est fait.
0