Imprimer le contenu d'une listView

cs_tolt Messages postés 269 Date d'inscription mardi 17 décembre 2002 Statut Membre Dernière intervention 4 avril 2019 - 9 sept. 2008 à 17:21
nadanido Messages postés 1 Date d'inscription mercredi 29 avril 2009 Statut Membre Dernière intervention 30 mai 2009 - 30 mai 2009 à 17:28
Bonjour,

Un bout de code qui imprime une ListView mais ou je peux moi même choisir le saut de page.
Exemple je fait le saut de page toute les 60 lignes via un compteur.

Il existe beaucoup de code qui imprime une ListView mais aucun n'a pensé que l'utilisateur peut éventuellement choisir la rupture de page.Nous n'imprimons pas uniquement sur du A4...

Si vous avez ce petit bout de code MERCI d'avance.

tolt

5 réponses

gillardg Messages postés 3275 Date d'inscription jeudi 3 avril 2008 Statut Membre Dernière intervention 14 septembre 2014 2
9 sept. 2008 à 17:37
c'est à l'utilisateur de choisir le format de papier
commondlg.ShowPrinter
choisir les préferences pour l'impression

Bonjour chez vous !
0
cs_tolt Messages postés 269 Date d'inscription mardi 17 décembre 2002 Statut Membre Dernière intervention 4 avril 2019
9 sept. 2008 à 17:42
Mais non toujours la même réponse...
Il suffit de chosir le nombre de ligne qui fera le saut de page et la ça marche.

J'ai un  source de VBfrance qui imprime une ListView mais j'arrive pas à lui faire gérer le fait de sauter de page à un nombre bien qui j'aurais choisi.

MERC

tolt
0
radcur Messages postés 282 Date d'inscription lundi 29 septembre 2003 Statut Membre Dernière intervention 15 août 2012 2
10 sept. 2008 à 02:14
salut

montre le bout de code qui ne fonctionne pas, on pourra surement mieux t'aider
0
cs_tolt Messages postés 269 Date d'inscription mardi 17 décembre 2002 Statut Membre Dernière intervention 4 avril 2019
10 sept. 2008 à 07:27
Voilà le code.
Encore une fois je veux juste pouvoir choisir le nombre de ligne avant le saut de page.
Le passer en paramètre dans la fonction.Moi j'y arrive pas...
(Le code n'est pas de moi)

MERCI BEAUCOUP
Public Sub ImprimerListViewZV(lvwSource As ListView, sTitre As String, sSousTitre As String, Optional ByVal sNomPolice As String "Arial", Optional ByVal iTaillePolice As Integer 10, Optional Ori As String)
    On Error GoTo Err_Main
    Dim lNB_MAX_ELEM_PAGE As Long
    Dim P As Printer
    Dim lComptElem As Long
    Dim liItem As ListItem
    Dim idxCol As Integer
    Dim lLargTot As Long
    Dim lCurXtmp As Long, lCurYtmp As Long
    Dim lNumPageCour As Long, lNbPages As Long
    Dim sApplication As String, sDate As String
    Dim lNbCarAff As Long
   
    lNB_MAX_ELEM_PAGE = 50    If Ori "P" Then lNB_MAX_ELEM_PAGE 70
   
    sTitre = UCase(Trim(sTitre))
    sApplication = "Le logiciel " & titre
    sDate = Format(Now, "dddd d mmmm yyyy")
   
    lLargTot = 0
    For idxCol = 1 To lvwSource.ColumnHeaders.Count
        If lvwSource.ColumnHeaders(idxCol).Width <> 0 Then
            lLargTot = lLargTot + lvwSource.ColumnHeaders(idxCol).Width
        End If
    Next
   
    lNbPages = Int(lvwSource.ListItems.Count / lNB_MAX_ELEM_PAGE) + 1
    lNumPageCour = 1
       
    Set P = Printer

    If Ori = "P" Then
        P.Orientation = vbPRORPortrait
    Else
        P.Orientation = vbPRORLandscape
    End If
            P.Font sNomPolice: P.FontSize iTaillePolice    P.ScaleHeight 100: P.ScaleWidth 100
                P.FontBold True: P.CurrentX 50 - (P.TextWidth(sTitre) / 2): P.CurrentY = 3: P.Print sTitre    P.FontBold False: P.CurrentX 90: P.CurrentY = 3: P.Print "Page " & CStr(lNumPageCour) & "/" & CStr(lNbPages)    P.FontBold False: P.CurrentX 50 - (P.TextWidth(sSousTitre)) / 2: P.CurrentY = 5: P.Print sSousTitre
   
    P.CurrentX = 0
    For idxCol = 1 To lvwSource.ColumnHeaders.Count
        If lvwSource.ColumnHeaders(idxCol).Width <> 0 Then
            lCurXtmp = P.CurrentX
            P.CurrentY = 10
            If lvwSource.ColumnHeaders(idxCol).Width > 0 Then
                P.FontBold = True: P.Print lvwSource.ColumnHeaders(idxCol).Text
            End If
            P.CurrentX = lCurXtmp + (lvwSource.ColumnHeaders(idxCol).Width * 100) / lLargTot
        End If
    Next
    P.Line (0, 13)-(100, 13)
   
    P.CurrentY = 14
    lComptElem = 0
    For Each liItem In lvwSource.ListItems
        If liItem.Index > 50 Then Exit For
        lCurYtmp = P.CurrentY
        For idxCol = 1 To lvwSource.ColumnHeaders.Count

            If lvwSource.ColumnHeaders(idxCol).Width > 0 Then
                P.FontBold = False
                lNbCarAff = Int(((lvwSource.ColumnHeaders(idxCol).Width * 100) / lLargTot) / P.TextWidth("A"))
                If idxCol = 1 Then
                    lCurXtmp = 0
                    P.CurrentX = lCurXtmp
                    P.CurrentY = lCurYtmp
                    P.FontBold = False: P.Print Left(liItem.Text, lNbCarAff)
                Else
                    lCurXtmp = lCurXtmp + (lvwSource.ColumnHeaders(idxCol - 1).Width * 100) / lLargTot
                    P.CurrentX = lCurXtmp
                    P.CurrentY = lCurYtmp
                    P.FontBold = False: P.Print Left(liItem.SubItems(idxCol - 1), lNbCarAff)
                End If
            Else
                lCurXtmp = lCurXtmp + (lvwSource.ColumnHeaders(idxCol - 1).Width * 100) / lLargTot
            End If
        Next
       
        lComptElem = lComptElem + 1
               
        If lComptElem = lNB_MAX_ELEM_PAGE Then
            lComptElem = 0
            P.Line (0, 90)-(100, 90)            P.CurrentX 5: P.CurrentY 93: P.FontBold = True: P.Print sApplication            P.CurrentX 85: P.CurrentY 93: P.FontBold = False: P.Print sDate
       '     P.NewPage
            lNumPageCour = lNumPageCour + 1
                        P.FontBold True: P.CurrentX 50 - (P.TextWidth(sTitre) / 2): P.CurrentY = 3: P.Print sTitre            P.FontBold False: P.CurrentX 90: P.CurrentY = 3: P.Print "Page " & CStr(lNumPageCour) & "/" & CStr(lNbPages)            P.FontBold False: P.CurrentX 50 - (P.TextWidth(sSousTitre)) / 2: P.CurrentY = 5: P.Print sSousTitre
            P.CurrentX = 0
            For idxCol = 1 To lvwSource.ColumnHeaders.Count

                lCurXtmp = P.CurrentX
                P.CurrentY = 10
                If lvwSource.ColumnHeaders(idxCol).Width > 0 Then
                    P.FontBold = True
                    P.Print lvwSource.ColumnHeaders(idxCol).Text
                    P.FontBold = False
                End If
                P.CurrentX = lCurXtmp + (lvwSource.ColumnHeaders(idxCol).Width * 100) / lLargTot
            Next
            P.Line (0, 13)-(100, 13)
            P.CurrentY = 14
        End If
    Next liItem
   
    P.Line (0, 90)-(100, 90)    P.CurrentX 5: P.CurrentY 93: P.FontBold = True: P.Print titre    P.CurrentX 85: P.CurrentY 93: P.FontBold = False: P.Print sDate
   
    P.EndDoc

   
fin:
    On Error Resume Next
    Set P = Nothing
    Exit Sub
   
Err_Main:
    If Not (P Is Nothing) Then P.KillDoc
    MsgBox Err.Description, vbCritical, App.Title
    Resume fin

End Sub

tolt
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
nadanido Messages postés 1 Date d'inscription mercredi 29 avril 2009 Statut Membre Dernière intervention 30 mai 2009
30 mai 2009 à 17:28
Bjr
merci bien Tolt Pour le code,
0
Rejoignez-nous