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

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

IHM Discussion :

Impression TreeView aCCESS 2003 [AC-2003]


Sujet :

IHM

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 12
    Points : 14
    Points
    14
    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 : 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
    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

  2. #2
    Membre régulier
    Homme Profil pro
    Technicien biomédical
    Inscrit en
    Mai 2005
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 60
    Points : 81
    Points
    81
    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 : 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
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 !

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 12
    Points : 14
    Points
    14
    Par défaut Impression treeview
    Bonjour
    Merci à Fifi69 pour sa solution. Un 1er test est concluant.
    USAC49

  4. #4
    Membre régulier
    Homme Profil pro
    Technicien biomédical
    Inscrit en
    Mai 2005
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 60
    Points : 81
    Points
    81
    Par défaut
    Avec plaisir...
    Depuis j'ai améliorer un peu le code notamment pour un bête soucis de marges.
    Dans la section "contribuez"

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. VBA Treeview Access 2003
    Par cobaye13 dans le forum VBA Access
    Réponses: 1
    Dernier message: 17/04/2015, 08h50
  2. Rapport Access 2003, pb d'impression
    Par jyvaut75 dans le forum VBA Access
    Réponses: 1
    Dernier message: 08/12/2007, 04h11
  3. Réponses: 3
    Dernier message: 21/08/2006, 13h03
  4. [Access 2003]Problème de Treeview?
    Par steeves5 dans le forum Access
    Réponses: 6
    Dernier message: 29/06/2006, 14h54
  5. [ACCESS 2003] menu impression de rapport
    Par Golzinne dans le forum Access
    Réponses: 2
    Dernier message: 14/02/2006, 16h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo