IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Les meilleures sources Access

Les meilleures sources AccessConsultez toutes les sources

Nombre d'auteurs : 44, nombre de sources : 147, création le 19 mars 2013 

 
OuvrirSommaireFormulairesTreeviews

Versions : 2000 et supérieures

Pour fonctionner, ce code nécessite une référence Microsot ActiveX Data Object

 
Sélectionnez
Dim WithEvents rsCli As ADODB.Recordset
Dim WithEvents rsEmp As ADODB.Recordset
Dim WithEvents rsCde As ADODB.Recordset
 
Private Sub cmdUpdate_Click()
        'déclaration des variables
        Dim x As Node
        'Réaffectation des recordsets pour mise à jour
        If rsCli.State = adStateClosed Then rsCli.Open "Clients", _
           CurrentProject.Connection, adOpenStatic
        If rsEmp.State = adStateClosed Then rsEmp.Open "Employés", _
           CurrentProject.Connection, adOpenStatic
        rsCli.Requery: rsCli.MoveFirst
        rsEmp.Requery: rsEmp.MoveFirst
        'Définition du treeview
 
        ocxTree.Nodes.Clear
        '--Clients
        Set x = ocxTree.Nodes.Add(, , "c", "Clients", 1)
        x.ExpandedImage = 2
        Do Until rsCli.EOF
            Set x = ocxTree.Nodes.Add("c", tvwChild, "C-" & rsCli(0), rsCli(1) & _
              " (" & rsCli(2) & ")", 1)
            rsCli.MoveNext
        Loop
        '--Employés
        Set x = ocxTree.Nodes.Add(, , "e", "Employés", 1)
        x.ExpandedImage = 2
        Do Until rsEmp.EOF
            Set x = ocxTree.Nodes.Add("e", tvwChild, "E-" & rsEmp(0), rsEmp(1) & _
              " " & rsEmp(2), 1)
            rsEmp.MoveNext
        Loop
End Sub
Créé le 27 août 2004  par Maxence Hubiche

Page de l'auteur


Contexte : Application de gestion de personnel. Le directeur souhaite pouvoir consulter la hiérarchie directe entre ses employés :
Exemple:
Le dessinateur dépend du responsable du bureau d'études qui lui-même dépend du responsable technique qui dépend du directeur général.

Spécificité : Chaque employé est sous les ordres d'un seul et unique chef. Le TreeView ne permet pas de gérer les héritages multiples.

Structure:
Une seule table : tblEmploye(NumEmploye,NomEmploye,PrenomEmploye,RoleEmploye,ResponsableEmploye#)
ResponsableEmploye correspond au numéro de l'employé qui le dirige. Il s'agit donc d'une clé étrangère.

Jeu d'essai:

tblEmploye

NumEmploye NomEmploye PrenomEmploye RoleEmploye ResponsableEmploye
1 MARTIN Paul Secrétaire Commerciale 3
2 DUPONT Marthe Commerciale 3
3 JEAN Lucie Responsable Commerciale 4
4 ETIENNE Dominique Directeur Général 0
5 RENNE Stephanie Responsable technique 4
6 LUCY Marc Responsable Chauffage 5
7 VIAUD Raymond Technicien Chauffage 6
8 LOUIS Remy Technicien Chauffage 6
9 TERNIER Sebastien Responsable Bureau Etude 5
10 KOFFER Fabien Dessinateur 9


Principe : Parcourir la liste des employés pour remplir le treeview. Ce parcours est dit récursif :
On commence à l'empoyé qui n'a pas de responsable, puis ceux sous ses ordres, etc.

Ajouter la référence Microsoft DAO x.x Object Library


Code à placer dans un module :

 
Sélectionnez
'********************************************************************************
'     Procédure de remplissage de Treeview
'
'       @oT : Controle Treeview qui affichera les données
'       @oDb : Objet database.
'       @intEmploye : Numéro de l'emloyé responsable
'
'********************************************************************************
 
Public Sub remplissageTreeView(oT As Object, odb As DAO.Database, Optional intEmploye As Integer = 0)
 
    Dim strSQL As String
    Dim oRst As DAO.Recordset
    Dim strLibelle As String
 
    strSQL = "SELECT NumEmploye,NomEmploye,PrenomEmploye,RoleEmploye " & _
	 			"FROM tblemploye WHERE Responsableemploye=" & intEmploye
    Set oRst = odb.OpenRecordset(strSQL)
    With oRst
        While Not .EOF
            'Récupère le nom, le prénom et le role
            strLibelle = .Fields(1).Value & " " & .Fields(2).Value & _
							" (" & .Fields(3).Value & ")"
            'Test le cas de la racine
            If intEmploye = 0 Then
                oT.Nodes.Add Key:="Emp" & .Fields(0).Value, _
                     Text:=strLibelle
            Else
                oT.Nodes.Add "Emp" & intEmploye, tvwChild, "Emp" & _
					.Fields(0).Value, strLibelle
            End If
            'Lance le même traitement avec ce responsable
            remplissageTreeView oT, odb, .Fields(0).Value
            'Passe à l'enregistrement suivant
            .MoveNext
        Wend
    End With
    'Ferme le recordset
    oRst.Close: Set oRst = Nothing
 
End Sub


Code à placer sur l'évènement 'Sur Chargement' du formulaire contenant le treeview :

 
Sélectionnez
Private Sub Form_Load()
 
    Dim odb As DAO.Database
    Set odb = CurrentDb
    remplissageTreeView tvwEmploye, odb
 
End Sub
Créé le 16 janvier 2007  par Tofalu

Page de l'auteur

Exemple d'une base Clients. Un formulaire principal et un sous formulaire.
Quand on ajoute une commande au client, pour qu'elle s'affiche dans le treeview :
Sur l'evenement AfterUpdate du sous formulaire :

 
Sélectionnez
Private Sub Form_AfterUpdate()
 
    Ajouter Parent.TreeView0, Me.Code_client.Value, "C" & Me.N°_commande.Value, Me.Date_commande.Value
 
End Sub

Fonction d'ajout du noeud au treeview

 
Sélectionnez
' Ajoute la nouvelle commande au Treeview
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
Créé le 16 janvier 2007  par Tofalu

Page de l'auteur

Exemple d'une base Clients. Un formulaire principal et un sous formulaire.
En cliquant sur un noeud, on filtre le formulaire principal qui affiche les clients. 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

 
Sélectionnez
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
Créé le 16 janvier 2007  par Tofalu

Page de l'auteur

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2013 Maxence Hubiche Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.