Bonjour tout le monde

Je souhaite créer un tableau dynamique d'objet qui eux même possèdent un attribut tableau dynamique d'un autre type d'objet...
Par exemple, j'ai créé la classe qui recense les caractéristiques des cartes réseaux physiques (et actives). Un de ses attributs contient la liste des adresses IP avec les masques qui peuvent lui être affectés, j'ai donc définit cet attribut comme un tableau dynamique d'objet de type adresse IP, pour mieux hiérarchiser ces données, qui elle même ne contient que deux attributs : IP et masque.
Oui, je sais, cela parait bien compliqué, je joins donc le source épuré pour exposer le problème rencontré :
J'arrive bien à affecter des valeurs à des attributs basiques (que j'ai supprimé ici par ne pas rendre trop indigeste mon source), mais lorsque je tente de passer mes valeurs à une méthode pour renseigner ma sous classe, ça coince (à la fin du source)

Vous remerciant de toute l'aide que vous pourriez m'apporter,
Bien cordialement

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
 
option explicit
dim objWMIService : set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
dim objShell : set objShell = WScript.CreateObject("WScript.shell")
dim tabCarte()
dim nics, ip, subnet
dim i, j, m ' Petites variables temporaires servant d'indice
 
' Récupération des cartes réseau physiques qui sont Ethernet (protocole 802.3)
set nics = objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapter WHERE PhysicalAdapter=TRUE AND  ConfigManagerErrorCode=0")
' On va alimenter la collection d'éléments de carte réseau avec les éléments trouvés
for each m in nics ' Liste toutes les interfaces physiques. Attention, les cartes réseau WIFI y sont également inclus
	' Si on est dans la boucle, c'est qu'une carte a été relevée
	if(tableauVide(tabCarte)) then i = Ubound(tabCarte) + 1 else i = 0 ' Récupère la taille courant du tableau
	redim preserve tabCarte(i) ' Augmentation de la taille du tableau de 1
	set tabCarte(i) = new C_CarteReseau ' On instancie un nouvel objet C_CarteReseau et on l'affecte dans le tableau
	tabCarte(i).setMac = m.MACAddress ' On sauvegarde l'adresse MAC de la carte réseau
	on error resume next ' Cas où la clef IPAddress ou SubnetMask n'existerait pas
	ip = objShell.RegRead("HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\" & m.GUID & "\IPAddress") ' Liste des adresses IP
	subnet = objShell.RegRead("HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\" & m.GUID & "\SubnetMask") ' Liste des masques
	for j = 0 to ubound(ip) step 1  ' Alors on parcours les deux tableaux et on sauvegarde les adresses IP et leur masque réseau
		tabCarte(i).addIP ip(j), subnet(j)
	next
next
 
function tableauVide(testTab) ' Fonction qui permet de vérifier qu'un tableau n'est pas vide
	dim a
	on error resume next
	a = ubound(testTab)
	tableauVide = CBool(a = 0)
end function
 
class C_AdresseIP ' Classe Adresse IP
	' Attributs
	private attIp ' adresse IP
	private AttMasque ' masque de sous réseau
 
	' Méthodes
	sub Class_Initialize() ' Initialisation
	end sub
 
	sub Class_Terminate() ' Terminaison (affectation de Nothing à l'objet)
	end sub
 
	public property let SetIP(adresseIP)
		attIp = adresseIP
	end property
 
	public property let SetMasque(masque)
		attMasque = masque
	end property
 
	public property get GetIP()
		GetIP = attIp
	end property
 
	public property get GetMasque()
		GetMasque = attMasque
	end property
end class
 
class C_CarteReseau ' Classe Carte réseau
	' Attributs
	private attIp() ' Tableau des adresses IP/Masque (tableau d'objet C_AdresseIP)
 
	' Méthodes
	sub Class_Initialize() ' Initialisation
	end sub
 
	sub Class_Terminate() ' Terminaison (affectation de Nothing à l'objet)
	end sub
 
	public sub addIp(adresseIp, masque) ' Récupération de la liste des adresses IP
		dim i1
		if(tableauVide(attIp)) then i1 = ubound(attIp) else i1 = 0
		redim preserve attIp(i1)
		set attIp(i1) = new C_AdresseIP
		attIp(i1).SetIP(adresseIp) ' <==== Cela coince ici
		attIp(i1).SetMasque(masque) ' <==== Cela coince ici
	end sub
end class