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’étude 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
Principe : Parcourir la liste des employés pour remplir le treeview. Ce parcours est dit récursif :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 ResponsableChauffage 5
7 VIAUD Raymond Technicien Chauffage 6
8 LOUIS Remy Technicien Chauffage 6
9 TERNIER Sebastien Responsable Bureau Etude 5
10 KOFFER Fabier Dessisnateur 9
On commence à l’empoyé qui n’a pas de responsable, puis ceux sous ses ordres, etc.
Dans un module :
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
35
36
37
38
39
40 Option Compare Database Option Explicit '******************************************************************************** ' 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
Le code qui déclenchera cette procédure sera écrit dans l’événement Load du formulaire contenant le TreeView :
Vous remarquerez que pour que ce code fonctionne vous devez ajouter la référence Microsoft Data Access Object Library à votre projet.Private Sub Form_Load()
Dim odb As DAO.Database
Set odb = CurrentDb
remplissageTreeView tvwEmploye, odb
End Sub
Partager