Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > IHM
IHM Ce forum est dédié aux questions relatives à la création de formulaires et d'états, avec ou sans code VBA, et macros.
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 28/11/2010, 11h58   #1
Invité régulier
 
Inscription : janvier 2005
Messages : 12
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 12
Points : 6
Points : 6
Par défaut Impression TreeView aCCESS 2003

Bonjour au forum
J'utilise le composant Treeview dans 1 formulaire Access 2003. Le Treeview est dépendant d'une requête préalablement construite en SQL. Pas de souci concernant la visualisation du Treeview mais par contre je n'arrive pas à à imprimer mon résultat d'arborescence. J'ai essayé de reprendre le code de la FAQ Treeview, voir ci-dessous, mais j'ai du mal à interpréter le code. Ok pour le click bouton , mais après ? Comment faire référence à l'état ? Comment installer la réf VB6.olb ? Comment identifier mon Treeview ?
Pouvez-vous m'aider SVP ou y a-il d'autres méthodes qui permettent d'imprimer 1 résultat identique...
Merci à tous.
USAC49

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
Option Compare Database
Option Explicit
 
Const COORDINATE_XY As Integer = 1440
Const TEXT_HEIGHT As Integer = 192
Const OFFSET_TORIGHT As Integer = 256
Const OFFSET_TODOWN As Integer = 128
 
Private Sub cmdPrint_Click()
'***************************************************
' Faire référence à VB6.olb (C:\Program Files\Microsoft Visual Studio\VB98)
'***************************************************
Dim oTreeView As TreeView
 
    Set oTreeView = TreeViewMain.Object
    Printer.CurrentX = COORDINATE_XY
    Printer.CurrentY = COORDINATE_XY
    PrintTreeView oTreeView , Printer, COORDINATE_XY
    Printer.EndDoc
    Set oTreeView = Nothing
    MsgBox "Impression de l'arborescence terminée !", 64
End Sub
 
Private Sub PrintTreeView(ByVal TVWObject As TreeView, ByVal DevicePrinter As Object, DeviceCoordinates As Integer)
Dim oNode As Node
 
  'Préparation de l'impression du Treeview
  Set oNode = TVWObject.Nodes(1)
  Do Until oNode Is Nothing
      DevicePrinter.CurrentX = DeviceCoordinates
      PrintCurrentNode oNode, DevicePrinter
      Set oNode = oNode.Next
  Loop
  Set oNode = Nothing
End Sub
 
Private Sub PrintCurrentNode(ByVal TVWNode As Node, ByVal DevicePrinter As Printer)
Dim sngNodeChildOffset As Single
Dim sngX1 As Single
Dim sngY1 As Single
Dim sngX2 As Single
Dim sngY2 As Single
Dim sngTreeLineHeight As Single
 
    ' Arboresence...
    With DevicePrinter
      sngNodeChildOffset = .CurrentX + OFFSET_TORIGHT
      sngX1 = .CurrentX + OFFSET_TORIGHT / 2
      sngTreeLineHeight = TEXT_HEIGHT + OFFSET_TODOWN
      Printer.Print TVWNode.Text
      sngY1 = DevicePrinter.CurrentY
    End With
    ' Noeuds enfants
    Set TVWNode = TVWNode.Child
    Do Until TVWNode Is Nothing
        ' Dessine une ligne pour chaque noeud...
        sngX2 = DevicePrinter.CurrentY
        sngY2 = sngX2 + sngTreeLineHeight / 2
        DevicePrinter.Line (sngX1, sngY1)-(sngX1, sngY2)
        DevicePrinter.Line -Step(OFFSET_TORIGHT / 2, 0)
        ' ...de façon recursive
        DevicePrinter.CurrentY = sngX2
        DevicePrinter.CurrentX = sngNodeChildOffset
        PrintCurrentNode TVWNode, DevicePrinter
        Set TVWNode = TVWNode.Next
    Loop
End Sub
usac49 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2010, 08h33   #2
Membre régulier
 
Homme Philippe
Technicien biomédical
Inscription : mai 2005
Messages : 59
Détails du profil
Informations personnelles :
Nom : Homme Philippe
Âge : 49
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Technicien biomédical
Secteur : Santé

Informations forums :
Inscription : mai 2005
Messages : 59
Points : 72
Points : 72
Par défaut Imprimer treeview sans VB6.olb

Bonjour

Confronté au même problème... Comment imprimer un treeview sans la VB6.olb ?
Voici ma solution : il faut se créer un état vierge nommé ETreeView, puis un module avec la fonction récursive ci-dessous.

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
' Pour rappel : 1cm = 567 tiwps
Private Const Retrait = 300 ' marge gauche entre chaque niveau en twips
Private Const Espacement = 225 ' Espacement des lignes en twips
Private Const EncrageTrait = 100 ' Hauteur entre le coin supérieur du label et le trait en twips
Dim Ligne As Integer
 
Public Function ImprimeTreeView(oTree As TreeView, Optional TVNode As Node, Optional Niveau As Integer = 0)
On Error GoTo Fin:
'Initialisation des variables et de l'état
If Niveau = 0 Then
    Ligne = 0
    Niveau = 1
    If TVNode Is Nothing Then
        Set TVNode = oTree.Nodes(1)
    Else
        Set TVNode = oTree.Nodes(TVNode.Key)
        BrancheLimit = 1
    End If
 
    DoCmd.OpenReport "ETreeView", acViewDesign
    ' Effacement des objets de l'état et redimensionnement
        Do While Reports![ETreeView].Count > 0
        St = Reports![ETreeView].Controls.Item(0).Name
        DeleteReportControl "ETreeView", St
        Loop
 
    Reports![ETreeView].Section(acDetail).Height = 567
    Reports![ETreeView].Width = 567 * 19 ' Rétablit la largeur à 19 cm
End If
 
'Recherche des éléments du TreeView
HautLigne = Ligne
Do Until TVNode Is Nothing
    Ligne = Ligne + 1
    ' Dessine une ligne pour chaque noeud...
    Set tBox = CreateReportControl("EtreeView", acLabel, acDetail, "", TVNode.Text, Retrait * Niveau, Espacement * (Ligne - 1))
 
    With tBox
        .FontSize = 8
        .FontName = "Arial"
        .Height = Espacement
        '.Weight = (567 * 17) - Retrait * Niveau
        .ForeColor = TVNode.ForeColor
         If TVNode.Bold = True Then .FontWeight = 700
    End With
    Set Li = CreateReportControl("ETreeView", acLine, acDetail, , , Retrait * Niveau - 300, Espacement * (Ligne - 1) + EncrageTrait, 300, 0)
    BasLigne = Ligne
    ' Recherche des enfants si vue non limitée
    If TVNode.Expanded = True Then
        ImprimeTreeView oTree, TVNode.Child, Niveau + 1
    End If
    Set TVNode = TVNode.Next
    If BrancheLimit = 1 Then Exit Do
Loop
If BasLigne > HautLigne Then
    Set Li = CreateReportControl("ETreeView", acLine, acDetail, , , Retrait * Niveau - 300, Espacement * HautLigne, 0, Espacement * (BasLigne - HautLigne) - EncrageTrait)
End If
 
If Niveau = 1 Then
    ' Fin de la création de l'état
    DoCmd.Close acReport, "EtreeView", acSaveYes
    ' Affichage
    DoCmd.OpenReport "ETreeView", acViewPreview
    Set oTree = Nothing
End If
Exit Function
 
Fin:
A = MsgBox("Nb de lignes : " & Ligne & vbCrLf _
        & "L'état ne peut pas s'afficher correctement, choississez une branche plus courte", vbCritical + vbOKOnly, "Dépassement de capacité")
End Function
L'appel se fait par :
Code :
Call ImprimeTreeView(Me.TVRisque.Object, Me.TVRisque.SelectedItem)
L'argument Me.TVRisque.SelectedItem est facultatif. Il permet de limiter la vue à la branche sélectionnée et ses enfants. Un Treeview peut rapidement dépasser les 140 éléments qu'un état peut afficher !
Fifi69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2011, 17h19   #3
Invité régulier
 
Inscription : janvier 2005
Messages : 12
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 12
Points : 6
Points : 6
Par défaut Impression treeview

Bonjour
Merci à Fifi69 pour sa solution. Un 1er test est concluant.
USAC49
usac49 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2011, 18h10   #4
Membre régulier
 
Homme Philippe
Technicien biomédical
Inscription : mai 2005
Messages : 59
Détails du profil
Informations personnelles :
Nom : Homme Philippe
Âge : 49
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Technicien biomédical
Secteur : Santé

Informations forums :
Inscription : mai 2005
Messages : 59
Points : 72
Points : 72
Avec plaisir...
Depuis j'ai améliorer un peu le code notamment pour un bête soucis de marges.
Dans la section "contribuez"
Fifi69 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 22h55.


 
 
 
 
Partenaires

Hébergement Web