Bonjour à tous,

J'essaie de me lancer dans l'écriture de classes personnalisées sur VBA Excel. Désolé pour le manque de vocabulaire sur le sujet. J'ai besoin de créer une liste chaînée personnalisée qui va contenir des noeuds d'une classe personnalisée également.

Je vous présente un exemple minimaliste de mon problème. Voici les deux classes (une pour la liste chaînée et une pour les noeuds). Je ne souhaite pas de curseur dans la classe "Chaine" (variante "xCourant" par exemple) et je souhaite utiliser une méthode "initialise" dans la classe "Chaine" qui va initialiser une longue chaine de noeuds grâce à une boucle.

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
'Classe Chaine
Option Base 1
 
'---------------------------------------------Variables------------------------------------------------------
Private xPremier As Noeud
 
'--------------------------------------------Propriétés------------------------------------------------------
Property Get Premier() As Noeud
    Set Premier = xPremier
End Property
Property Let Premier(newPremier As Noeud)
    Set xPremier = newPremier
End Property
 
'----------------------------------------------Méthodes-------------------------------------------------------
Sub initialise()
    'Initialisation de liste
    Dim tmp As New Noeud
    tmp.Valeur = 1
    Set xPremier = tmp
    Dim i As Integer
    For i = 2 To 5 'valid
        tmp.Suivant = New Noeud
        tmp.Suivant.Valeur = i
        Set tmp = tmp.Suivant
    Next i
 
    'Parcours de liste (pour vérification ici)
    Set tmp = xPremier
    Do While Not tmp Is Nothing 'doit s'arrêter lorsque les 5 noeuds sont parcourus
        MsgBox "Valeur: " & tmp.Valeur
        Set tmp = tmp.Suivant
    Loop
End Sub
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
'Classe Noeud
Option Base 1
 
'---------------------------------------------Variables------------------------------------------------------
Private xValeur As Integer
Private xSuivant As Noeud
 
'--------------------------------------------Propriété------------------------------------------------------
Property Get Valeur() As Integer
    Valeur = xValeur
End Property
Property Let Valeur(newValeur As Integer)
    xValeur = newValeur
End Property
 
Property Get Suivant() As Noeud
    Set Suivant = xSuivant
End Property
Property Let Suivant(newSuivant As Noeud)
    Set xSuivant = newSuivant
End Property
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
'Macro à exécuter
Sub main()
    Dim chaine1 As New chaine
    chaine1.initialise
End Sub
Le code que je vous présente lance une boucle infini. Je comprends que le problème vient de l'utilisation d'une unique variable temporelle (instance de classe "Noeud") qui créer une chaîne d'un seul maillon qui se mord la queue.

Jusqu'ici je m'en suis toujours sorti avec les questions posées par d'autres utilisateurs mais là je sèche complétement.

Merci d'avance pour votre aide.

EDIT: Correction de la propriété "Valeur" (merci à Philippe)