Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Général VBA
Général VBA Forum général VBA . Pour les logiciels spécifiques (Access, Excel, Word, ...), postez dans les bons sous forums.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 25/04/2005, 17h21   #1
Invité régulier
 
Inscription : avril 2005
Messages : 17
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 17
Points : 6
Points : 6
Par défaut [Treeview VBA] Liste des fils à partir d'un noeud donné

Bonjour tlm !

Après 3h30 de recherches infructueuses sur le net, je vous expose mon problème. Je dispose dans un treeview d'une liste de familles et de leurs sous familles (et leurs sous-sous-famille, etc ...)
ex:
Code :
1
2
3
4
5
6
7
supFam1
   subfam1
     subfam1.1
     subfam1.2
     subfam1.3
   subfam2
     subfam2.1
Et je souhaite récupérer/afficher, lorsque l'utilisateur clic sur un élément de l'arbre, la liste de toutes les sous familles et sous-sous familles du noeud courant.

Je pense a l'utilisation d'une méthode récursive, mais je ne sais pas comment parcourir récursivement les noeuds fils d'un noeud donné (celui qui a été cliqué).

Je pars sur la base suivante:
Code :
1
2
3
4
5
 
Private Sub TV1_NodeClick(ByVal Nde As Object)
  dim resultat as string 'par exemple
  resultat = ListerSousNoeuds(Nde)
End Sub
et bien entendu c'est la fonction ListerSousNoeuds(ByVal Nde As Object) qui me fait défaut

J'ai tenté d'utiliser des TreeNodes mais VBA/Access 2003 ne semble pas les reconnaître.

Merci de votre aide
NoCoZ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/04/2005, 17h30   #2
Membre chevronné
 
Avatar de Catbull
 
Inscription : avril 2003
Messages : 542
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

Informations forums :
Inscription : avril 2003
Messages : 542
Points : 767
Points : 767
La méthode récursive semble en effet s'imposer. Par contre, ton receveur me semble incongru. Le plus simple est à mon avis de passer en paramètre le tableau devant contenir la liste de tes sous noeuds ou utiliser une variable globale.
__________________
CatBull - Modérateur VB
Catbull est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/04/2005, 23h34   #3
Invité régulier
 
Inscription : avril 2005
Messages : 17
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 17
Points : 6
Points : 6
En fait le receveur est ici plus à titre d'exemple.
En effet, un tableau serait plus adapaté mais là n'est pas le réel problème.

Je ne sais pas comment utiliser les propriété/méthodes du Noeud courant pour pouvoir parcourir ses fils.

Je cherche à pouvoir écrire une fonction du style:

Code :
1
2
3
4
Pour chaque Fils de NoeudCourant Faire
  'ici appel de ma fonction récursive 
  'et autres traitements
Fin Pour
Mon problème est donc de savoir comment coder en VBA : Pour chaque Fils de NoeudCourant Faire

Merci de votre aide !
NoCoZ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2005, 09h15   #4
Invité régulier
 
Inscription : avril 2005
Messages : 17
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 17
Points : 6
Points : 6
Re salut!
Bon après avoir cherché et cherché j'ai trouvé !
Je n'arrivais pas a travailler directement sur mon arbre (il fallait en faire une copie dans mon code pour que cela fonctionne...)

Pour ceux que ça intéresse, voici le source:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Public Sub getSubFamilies(ByVal Nde As Node, ByRef subfamlist As String)
'retrieve the number of the sub families of the current node in the family tree
 
Dim TV1cpy As TreeView
Set TV1cpy = Form_CGDdbBrowser.TV1.Object
 
Dim i As Integer
If Nde.Children > 0 Then
'continue exploration only if the current node has subnodes
    For i = Nde.Child.Index To Nde.Child.Index + Nde.Children - 1
    'browse each subnodes
        subfamlist = subfamlist & Replace(TV1cpy.Nodes.Item(i).Key, "O", "") & ", "
        getSubFamilies TV1cpy.Nodes(i), subfamlist
    Next i
End If
Set TV1cpy = Nothing
 
End Sub
Bien sur, rien ne m'obligeait a utiliser un passage par référence, mais dans mon cas, cela avait son intérêt, voilou !

En espérant avoir pu aider quelqu'un d'autre
NoCoZ est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h20.


 
 
 
 
Partenaires

Hébergement Web