Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Contribuez
Contribuez Access : Vos contributions. Postez ici vos codes sources, conseils, astuces et autres propositions. Ce forum n'est pas un forum technique mais destiné aux contributions pour www.developpez.com
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 08/05/2005, 12h31   #1
Membre régulier
 
Inscription : mars 2003
Messages : 111
Détails du profil
Informations forums :
Inscription : mars 2003
Messages : 111
Points : 94
Points : 94
Par défaut [Sources]Mise à jour Treeview

Bonjour,
Dans un formulaire, j'ai un contrôle Treeview à gauche et un sous form à droite avec lequel je peux ajouter des branches correspondant à la racine sélectionnée.
Je voudrais que la branche créée apparaisse dans l'abre en dessous des autres dès qu'un nouvel enreg est créé dans le ssfrm.
Pour l'instant je réalimente l'arbre dès que j'ajoute un enreg (Après MAJ) donc une branche mais le pb est que l'arbre se réduit automatiquement, pas très pratique pour l'utilisateur.
J'espère avoir été assez clair...
Merci de votre aide
Sinclar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/05/2005, 12h33   #2
Rédacteur

 
Avatar de Tofalu
 
Christophe Warin
Inscription : octobre 2004
Messages : 8 635
Détails du profil
Informations personnelles :
Nom : Christophe Warin
Âge : 28

Informations forums :
Inscription : octobre 2004
Messages : 8 635
Points : 13 718
Points : 13 718
Pourquoi recharger l'arbre complet ? Il suffit de mettre à jour la collection Nodes du treeview
Tofalu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/05/2005, 12h42   #3
Membre régulier
 
Inscription : mars 2003
Messages : 111
Détails du profil
Informations forums :
Inscription : mars 2003
Messages : 111
Points : 94
Points : 94
Merci pour ta réponse, mais comment fait on pour mettre à jour la collection nodes
Sinclar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/05/2005, 12h50   #4
Rédacteur

 
Avatar de Tofalu
 
Christophe Warin
Inscription : octobre 2004
Messages : 8 635
Détails du profil
Informations personnelles :
Nom : Christophe Warin
Âge : 28

Informations forums :
Inscription : octobre 2004
Messages : 8 635
Points : 13 718
Points : 13 718
Et bien par exemple pour ajouter un noeud à l'élément sélectionner, il faut utiliser la méthode Add de la collections nodes de l'élément sélectionné (selectedItem je crois)
Tofalu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/05/2005, 12h59   #5
Membre régulier
 
Inscription : mars 2003
Messages : 111
Détails du profil
Informations forums :
Inscription : mars 2003
Messages : 111
Points : 94
Points : 94
Excuse moi d'insister mais comme j'ai adapté le code d'un livre d'exemples, je ne maîtrise pas toute les subtilités.Je ne vois donc pas exactement ce que tu veux dire.
Voici le code pour alimenter l'arbre:

Code :
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
Dim cnn As ADODB.Connection
Dim rstZONE As ADODB.Recordset
Dim rstDETZONE As ADODB.Recordset
Dim rstSSDETZONE As ADODB.Recordset
Dim strSQL As String
Dim strClefZONE As String
Dim strClefDETZONE As String
Dim strClefSSDETZONE As String
Dim strTexte As String
 
 
Set cnn = CurrentProject.Connection
Set rstZONE = New ADODB.Recordset
Set rstDETZONE = New ADODB.Recordset
Set rstSSDETZONE = New ADODB.Recordset
strSQL = "SELECT * FROM [tbl_Zone] WHERE [N° opération] =" & [N° opération]
rstZONE.Open strSQL, cnn, adOpenForwardOnly, adLockReadOnly
 
With Me.treeview
 
    .Nodes.Clear
 
 
    While Not rstZONE.EOF
        strClefZONE = "ZON" & rstZONE("N° enreg ZONE")
        strTexte = rstZONE("N° zone") & " - " & rstZONE("Intitulézone")
 
       .Nodes.Add Key:=strClefZONE, Text:=strTexte, _
            Image:="fermé", SelectedImage:="fermé"
 
 
        strSQL = "SELECT [N° enreg DETZONE], [N° enreg ZONE], [N° détail zone], [Intitulédétailzone] FROM [tbl_Détail_zone]" & _
            " WHERE [N° enreg ZONE]=" & rstZONE("N° enreg ZONE") & _
            " ORDER BY [N° détail zone];"
        rstDETZONE.Open strSQL, cnn, adOpenForwardOnly, adLockReadOnly
        While Not rstDETZONE.EOF
            strClefDETZONE = "DET" & rstDETZONE("N° enreg DETZONE")
            strTexte = rstDETZONE("N° détail zone") & " - " & rstDETZONE("Intitulédétailzone")
 
            .Nodes.Add strClefZONE, tvwChild, strClefDETZONE, strTexte, _
                "flechebas", "flechebas"
 
 
        strSQL = "SELECT * FROM [tbl_Ssdétail_zone]" & _
            " WHERE [N° enreg DET ZONE]=" & rstDETZONE("N° enreg DETZONE") & _
            " ORDER BY [N° ssdétailzone];"
        rstSSDETZONE.Open strSQL, cnn, adOpenForwardOnly, adLockReadOnly
        While Not rstSSDETZONE.EOF
            strClefSSDETZONE = "SSD" & rstSSDETZONE("N° enreg SSDET ZONE")
            strTexte = rstSSDETZONE("N° ssdétailzone") & " - " & rstSSDETZONE("Intituléssdétailzone")
 
            .Nodes.Add strClefDETZONE, tvwChild, strClefSSDETZONE, strTexte, _
                "fleche", "fleche"
 
 
                rstSSDETZONE.MoveNext
            Wend
            rstSSDETZONE.Close
 
 
            rstDETZONE.MoveNext
        Wend
        rstDETZONE.Close
 
 
        rstZONE.MoveNext
    Wend
End With
 
 
Set rstDETZONE = Nothing
rstZONE.Close
Set rstZONE = Nothing
cnn.Close
Set cnn = Nothing
Sinclar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/05/2005, 16h07   #6
Membre régulier
 
Inscription : mars 2003
Messages : 111
Détails du profil
Informations forums :
Inscription : mars 2003
Messages : 111
Points : 94
Points : 94
Sur l'évènement Après MAJ du ss frm j'ai mis ce code, mais ça marche toujours pas.
Code :
1
2
3
4
5
6
Private Sub Form_AfterUpdate()
With Forms![frm12_Localisation_prestations]![treeview]
    .Nodes.Clear
    .Nodes.Add strClefZONE, tvwChild, strClefDETZONE, strTexte, _
                "flechebas", "flechebas"
End With
Quelqu'un a une idée...
Sinclar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/05/2005, 17h07   #7
Rédacteur

 
Avatar de Tofalu
 
Christophe Warin
Inscription : octobre 2004
Messages : 8 635
Détails du profil
Informations personnelles :
Nom : Christophe Warin
Âge : 28

Informations forums :
Inscription : octobre 2004
Messages : 8 635
Points : 13 718
Points : 13 718
Là tu vide complètement le treeview ... es tu sûr que c'est ce que tu souhaites ?
Tofalu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/05/2005, 17h25   #8
Membre régulier
 
Inscription : mars 2003
Messages : 111
Détails du profil
Informations forums :
Inscription : mars 2003
Messages : 111
Points : 94
Points : 94
Oui tu as raison, ça va pas du tout; j'enlève le .Nodes.Clear et
ERREUR:Elément not found

Aïe,Aïe,Aïe, je pagaie à fond.
Sinclar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/05/2005, 17h28   #9
Rédacteur

 
Avatar de Tofalu
 
Christophe Warin
Inscription : octobre 2004
Messages : 8 635
Détails du profil
Informations personnelles :
Nom : Christophe Warin
Âge : 28

Informations forums :
Inscription : octobre 2004
Messages : 8 635
Points : 13 718
Points : 13 718
Arf j'avais pas vu ton bloc de code au dessus

En fait qu'est ce que tu souhaite faire ? Ajouter un nouvel élement en dessous de celui sélectionné ?
Tofalu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/05/2005, 17h39   #10
Membre régulier
 
Inscription : mars 2003
Messages : 111
Détails du profil
Informations forums :
Inscription : mars 2003
Messages : 111
Points : 94
Points : 94
En fait je crée les troncs de l'arbre par un frm indépendant et pour ça il n'y a pas de pb.
Ensuite je voudrais créer les branches par un sous frm qui s'ouvre lorsque je clique sur le tronc père.
Donc tout cela fonctionne sauf que pour que ce soit plus convivial je voudrais qu'à chaque fois que je crée un enreg (nouvelle branche) ds le ssfrm celle ci apparaisse dans l'arbre sans modifier l'effet Réduction/Développement de l'arbre
Sinclar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/05/2005, 18h08   #11
Rédacteur

 
Avatar de Tofalu
 
Christophe Warin
Inscription : octobre 2004
Messages : 8 635
Détails du profil
Informations personnelles :
Nom : Christophe Warin
Âge : 28

Informations forums :
Inscription : octobre 2004
Messages : 8 635
Points : 13 718
Points : 13 718
Arf ... en effet ça se complique.

Le challenge est assez interessant.

Déjà dans le choix de l'évenement. Il faudrait surement utiliser l'évenement Current du formulaire. Là dessus, tenter d'insérer le nouveau node en récupérant la clé correspondant au formulaire principal. je ne vois pas ce que ça va donner. Le meilleur moyen est de tester

Je m'y met de ce pas.
Tofalu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/05/2005, 18h19   #12
Membre régulier
 
Inscription : mars 2003
Messages : 111
Détails du profil
Informations forums :
Inscription : mars 2003
Messages : 111
Points : 94
Points : 94
Merci beaucoup pour ta participation;
Je crois que tu as raison pour l'évènement Current
J'étais en train d'essayer la piste suivante:
le nouveau noeud étant créé à partir du ssfrm, ne faut il pas créer la clé, le texte à partir des données du nouvel enreg; sinon le .Nodes.Add à l'air de tomber du ciel
Sinclar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/05/2005, 18h28   #13
Rédacteur

 
Avatar de Tofalu
 
Christophe Warin
Inscription : octobre 2004
Messages : 8 635
Détails du profil
Informations personnelles :
Nom : Christophe Warin
Âge : 28

Informations forums :
Inscription : octobre 2004
Messages : 8 635
Points : 13 718
Points : 13 718
Citation:
Envoyé par Sinclar
En fait je crée les troncs de l'arbre par un frm indépendant et pour ça il n'y a pas de pb.
Ensuite je voudrais créer les branches par un sous frm qui s'ouvre lorsque je clique sur le tronc père.
Donc tout cela fonctionne sauf que pour que ce soit plus convivial je voudrais qu'à chaque fois que je crée un enreg (nouvelle branche) ds le ssfrm celle ci apparaisse dans l'arbre sans modifier l'effet Réduction/Développement de l'arbre
Tu utilises des controles et formulaires dépendant ou indépendant ? En gros tu te sert de la propriété source du formulaire ?
Tofalu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/05/2005, 18h35   #14
Membre régulier
 
Inscription : mars 2003
Messages : 111
Détails du profil
Informations forums :
Inscription : mars 2003
Messages : 111
Points : 94
Points : 94
Non les ss frm sont indépendants, alimentés par du code
Sinclar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/05/2005, 18h57   #15
Rédacteur

 
Avatar de Tofalu
 
Christophe Warin
Inscription : octobre 2004
Messages : 8 635
Détails du profil
Informations personnelles :
Nom : Christophe Warin
Âge : 28

Informations forums :
Inscription : octobre 2004
Messages : 8 635
Points : 13 718
Points : 13 718
Dans ce cas, le form current ne passera pas. Bon moi j'ai fait avec formulaire dépendant. L'ajout fonctionne sans provoquer le repliage.

ftp://ftp-developpez.com/warin/bd7.zip

Essaye de voir comment ça marche. En fait le principe sera quelque peut le même. Y aura juste l'évenement qui change
Tofalu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/05/2005, 19h06   #16
Rédacteur

 
Avatar de Tofalu
 
Christophe Warin
Inscription : octobre 2004
Messages : 8 635
Détails du profil
Informations personnelles :
Nom : Christophe Warin
Âge : 28

Informations forums :
Inscription : octobre 2004
Messages : 8 635
Points : 13 718
Points : 13 718
Pour tout ceux que ça intéresse je donne le code. En effet un exemple de remplissage de treeview, ça n'a jamais fait de mal à personne

Le treeview se base sur :

On affiche les clients et dans la génération inférieure leur commande

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Private Sub remplirTreeview(oTree As Object)
Dim SQL As String
Dim oCnx As ADODB.Connection
Dim oRstClient As New ADODB.Recordset
Dim oRstCommande As New ADODB.Recordset
Set oCnx = CurrentProject.Connection
oTree.Nodes.Clear
oRstClient.Open "SELECT * FROM Clients ORDER BY Société", oCnx, adOpenDynamic, adLockPessimistic
With oRstClient
While Not .EOF
  oTree.Nodes.Add , , .Fields("Code Client").Value, .Fields("Société").Value
  oRstCommande.Open "SELECT * FROM Commandes " & _
                    "WHERE [Code Client]=" & Chr(34) & .Fields("Code client").Value & Chr(34), oCnx, adOpenDynamic, adLockPessimistic
  With oRstCommande
    While Not .EOF
      oTree.Nodes.Add .Fields("Code Client").Value, tvwChild, "C" & .Fields("N° Commande"), .Fields("Date Commande")
      .MoveNext
    Wend
  .Close
  End With
  .MoveNext
Wend
End With
End Sub
En cliquant sur un noeud, on filtre le formulaire principal qui affiche les clients :

Code :
1
2
3
4
5
6
7
8
9
Private Sub TreeView0_NodeClick(ByVal Node As Object)
Dim nodClient As Node
If Node.Parent Is Nothing Then
  Set nodClient = Node
Else
  Set nodClient = Node.Parent
End If
Me.RecordSource = "SELECT * FROM CLIENTS WHERE [Code Client]=" & Chr(34) & nodClient.Key & Chr(34)
End Sub
Ce qui provoque (via la liaison champ pere / champ fils sur le n° Client )pour la commande l'affichage des commandes du client dans le sous formulaire

Et pour que quand j'ajoute une commande au clien, qu'elle s'affiche dans le treeview :

Sur l'evenement Current du sous formulaire :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Private Sub Form_Current()
On Error GoTo err
Dim oTree As Object
Set oTree = Parent.TreeView0
Dim N As Node
If IsNull(Me.N°_commande) Then Exit Sub
Set N = oTree.Nodes("C" & Me.N°_commande)
Exit Sub
err:
Ajouter oTree, Me.Code_client.Value, "C" & Me.N°_commande.Value, Me.Date_commande.Value
End Sub
Private Sub Ajouter(oTree As Object, strParent As String, StrKey As String, strValue As String)
On Error GoTo err
oTree.Nodes.Add strParent, tvwChild, StrKey, strValue
oTree.Refresh
err:
End Sub
On peut aussi utiliser l'evenement After Insert ou after update. D'ailleurs ils seraient plus appropriés pour lancer la sub ajouter

EDIT : Aller une version avec le form After Update :

Tout simplement :

Code :
1
2
3
4
5
6
7
8
9
10
Private Sub Form_AfterUpdate()
Ajouter Parent.TreeView0, Me.Code_client.Value, "C" & Me.N°_commande.Value, Me.Date_commande.Value
End Sub
 
Private Sub Ajouter(oTree As Object, strParent As String, StrKey As String, strValue As String)
On Error GoTo err
oTree.Nodes.Add strParent, tvwChild, StrKey, strValue
oTree.Refresh
err:
End Sub
Et on vire le form_current

Voilà

Bon courage
Tofalu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/05/2005, 19h10   #17
Membre régulier
 
Inscription : mars 2003
Messages : 111
Détails du profil
Informations forums :
Inscription : mars 2003
Messages : 111
Points : 94
Points : 94
Ok merci beaucoup, je vais puiser là dedans
Sinclar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/05/2005, 20h21   #18
Membre régulier
 
Inscription : mars 2003
Messages : 111
Détails du profil
Informations forums :
Inscription : mars 2003
Messages : 111
Points : 94
Points : 94
Ca marche à merveille je te remercie encore; dans le bloc que j'avais posté il y avait également des icones affectés aux branches. Je n'arrive pas à les intégrer dans la syntaxe. dans la déclaration je dois rajouter un paramètre pour l'image

Code :
1
2
3
Private Sub Ajouter(oTree As Object, strParent As String, StrKey As String, strValue As String)
On Error GoTo err
oTree.Nodes.Add strParent, tvwChild, StrKey, strValue
Mais bon c du fignolage
Sinclar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/05/2005, 20h33   #19
Rédacteur

 
Avatar de Tofalu
 
Christophe Warin
Inscription : octobre 2004
Messages : 8 635
Détails du profil
Informations personnelles :
Nom : Christophe Warin
Âge : 28

Informations forums :
Inscription : octobre 2004
Messages : 8 635
Points : 13 718
Points : 13 718
Et bien il faut que tu passes l'image à la procédure il s'agit je crois d'un entier qui correspond à l'index dans l'imaglist

Code :
1
2
3
Private Sub Ajouter(oTree As Object, strParent As String, StrKey As String, strValue As String,monImage as integer) 
On Error GoTo err 
oTree.Nodes.Add strParent, tvwChild, StrKey, strValue, MonImage,MonImage

Si tu lui passes le nom de l'image fleche remplace le Integer par String

Puis quand tu appelles la sub ajouter, tu lui passe en plus le numéro de l'image

Code :
Ajouter ...................., "Fleche"
Tofalu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/05/2005, 20h40   #20
Membre régulier
 
Inscription : mars 2003
Messages : 111
Détails du profil
Informations forums :
Inscription : mars 2003
Messages : 111
Points : 94
Points : 94
Oui désolé comme c une image je pensais qu'il fallait la déclarer avec qq chose du genre OLE mais strImage As String ça marche

Merci

Dès que je termine tout ça je pense proposer un projet de tuto sur le sujet, qu'est ce qe tu en penses?
Sinclar 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 16h36.


 
 
 
 
Partenaires

Hébergement Web