Je sors de MSDN et avec les ArrayList, ce n'est pas la peine de chercher une aiguille dans une botte de fouin : aucune méthode pour çà. Disons que si, mais ça dépend comment ces méthodes sont utilisées (IndexOf, Contains).
J'ai fait plusieurs tests :
(paiement a été importé d'une DLL)
Sub Main()
Dim objPmt1 As Paiement
Dim objPmt2 As Paiement
Dim alPmt As New ArrayList
objPmt1 = New Paiement("A", "1") : alPmt.Add(objPmt1)
objPmt1 = New Paiement("B", "2") : alPmt.Add(objPmt1)
objPmt1 = New Paiement("C", "3") : alPmt.Add(objPmt1)
objPmt2 = New Paiement("B", "2")
'objPmt1 = New Paiement("D", "4")
'objPmt1 = alPmt(0)
'objPmt2 = objPmt1
'MsgBox(alPmt(0).libelle.Contains(objPmt2.libelle).ToString)
'MsgBox(ReferenceEquals(objPmt2.type, alPmt(1).type)) ' curieux renvoie True
'MsgBox(ReferenceEquals(objPmt2, alPmt(1))) ' Ici, renvoie False
'MsgBox(alPmt(0).libelle.Equals(objPmt2.libelle))
'MsgBox(alPmt.Item(0).GetType.ToString)
MsgBox(alPmt.IndexOf(objPmt2))
End Sub
Je m'attendais à ce qu'il renvoie 2 et non -1 (pas trouvé). Si je remplace objPmt2 par objPmt1, comme ceci :
MsgBox(alPmt.IndexOf(objPmt1))
Là ça marche. Après tous les tests réalisés, chaque item de l'ArrayList (0...N) pointe sur une référence (en mémoire vive ?). Malgré que mon objPmt2 a été défini/instancié de la même façon --> marche pas car adresses différentes. Ca me rapelle le C.
En revanche avec un objPmt2 = objPmt1, ça marche. Sinon,
ReferenceEquals(objPmt2.type, alPmt(1).type) --> True marche, mais pas un ReferenceEquals(objPmt2, alPmt(1)) --> False
Curieux !
(Bon je parle tout seul
) J'ai appris aussi autre chose en passant : objPmt2 = objPmt1 (objPmt2 ne pointe pas sur objPmt1 du moins au sens du C). La preuve :
Dim objPmt1 As Paiement
Dim objPmt2 As Paiement
objPmt1 = New Paiement("A", "1")
objPmt2 = objPmt1
objPmt1 = New Paiement("B", "2")MsgBox(objPmt2.libelle) --> renvoie "A" et non "B". Si c'était comme le C, il aurait renvoyé "B".
Bon passons à autre chose, sauf qi quequ'un a une soluce. 
_____________________________________________________________
Coder et coder sont 2 choses différentes. La 1ère consiste à arriver au but coûte que coûte. La 2nde est de trouver la solution de manière élégante.