Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 Passage d'un sous-objet par référence impossible

Lu76Fer

XLDnaute Occasionnel
Bonjour à toutes et tous,
Je vais vous expliquez mon cas au travers d'un cas concret ce sera plus simple :
Soit on ajoute une classe dans le module de classe : C_Chaine
VB:
Public NextVal As C_Chaine
Public Val As Integer
Objet : tmpCh
Sous-Objet : ch.NextVal
Les objets sont passés par référence par défaut mais je vais tout de même forcé le passage par référence ce qui n'aura aucune utilité en faite !
Voici mon code et le code à regarder : addChaine ch.NextVal
VB:
Sub SubObjByRef1()
Dim ch As New C_Chaine
    ch.Val = 1
    addChaine ch.NextVal
    If ch.NextVal Is Nothing Then
        Debug.Print "Valeur suivante introuvable !!"
    Else
        Debug.Print ch.NextVal.Val
    End If
End Sub

Sub addChaine(ByRef ch As C_Chaine)
    Set ch = New C_Chaine
    ch.Val = 2
End Sub
On voit que cela ne fonctionne pas alors qu'en corrigeant comme ceci, cela fonctionne :
Code à regarder : addChaine tmpCh: Set ch.NextVal = tmpCh
VB:
Sub SubObjByRef2()
Dim ch As New C_Chaine, tmpCh As C_Chaine
    ch.Val = 1
    addChaine tmpCh: Set ch.NextVal = tmpCh
    If ch.NextVal Is Nothing Then
        Debug.Print "Valeur suivante introuvable !!"
    Else
        Debug.Print ch.NextVal.Val
    End If
End Sub
Connaissez-vous une autre façon de coder cela plus simplement ?
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
re
exactement le même codé façon patosh(moi)
la classe
VB:
Public child As New Collection
Public nom As String
Public pere As Classe2

Public Function AddChild(n)
   Dim c As Classe2
    Set c = New Classe2
    c.nom = n
    Set c.pere = Me
  Me.child.Add c
End Function
le module standard
VB:
Dim clsx As New Classe2

Sub test2()
    clsx.nom = "robert"

    x = Array("gaston", "paul", "henry")
    
    For i = 0 To 2
        clsx.AddChild CStr(x(i))
    Next


    y = Array("kevin", "edouard", "imann")

    For i = 1 To 3
        clsx.child(i).AddChild CStr(y(i - 1))
    Next
 
 MsgBox "le petit fil de """ & clsx.nom & """ se nommant """ & y(2) & """  est le fils de'" & clsx.child(3).child(1).pere.nom

End Sub
 

patricktoulon

XLDnaute Barbatruc
et si l'on veut s'amuser a remonter ou chercher les cousins
(valable pour les deux exemple
Code:
MsgBox "le petit fil de """ & cls.nom & """ se nommant """ & y(2) & """  est le fils de'" & cls.child(3).child(1).pere.nom

    MsgBox "le grand-père de edourd s'appelle " & cls.child(2).child(1).pere.pere.nom

    MsgBox "les  cousins de edouard  s'appellent " & cls.child(1).child(1).nom & " et " & cls.child(3).child(1).nom
on est bien dans une structure hiérarchique
 

Lu76Fer

XLDnaute Occasionnel
D'ailleurs on pourrait placer toute le famille et sur plusieurs génération sur un Arbre AVL bien que je pense q'un Arbre ARN serait plus adapté
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…