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 PropertyLe 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.
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
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)
Partager