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

Choupette -  
eriiic Messages postés 24581 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

  1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
    1. 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
  2. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    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