Imprimer Listview

Résolu
jctgt Messages postés 57 Date d'inscription vendredi 23 décembre 2005 Statut Membre Dernière intervention 27 novembre 2023 - 27 déc. 2006 à 22:45
cs_Exploreur Messages postés 4821 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 - 31 déc. 2006 à 16:54
Bonjours,


J'ai un "listview" sur une "form" avec deux "Label" pour les titres
ainsi que deux "CommandButton" dont une est "Termier" et l'autre
"Imprimer"

Le tout apparait très bien à l'écran:  Les colonnes et la liste des items

J'ai cette commande pour imprimer:  "Me.PrintForm"

La formule s'imprime, mais il manque la liste des items qui ne s'imprime pas. Le titre des colonnes et le contour sont imprimé.

Y-aurait-il quelque chose qui n'est pas correct dans la propriété de la
"listview" ou y a-t-il une commande quelconque qui manque?


Merci de m'aider.

4 réponses

econs Messages postés 4030 Date d'inscription mardi 13 mai 2003 Statut Membre Dernière intervention 23 décembre 2008 24
28 déc. 2006 à 09:52
Salut,

Pour l'impression des données de la listView, c'est un peu plus complexe que cette seule instruction.
Tu peux aller voir dans les sources de VBFrance, celle-ci par exemple.
J'en ai une excellente chez moi ... mais je ne suis pas chez moi





Manu


--------------------------------------------------------------------------------------------
Avant de poster un message, n'oubliez pas de consulter le reglement.
3
jctgt Messages postés 57 Date d'inscription vendredi 23 décembre 2005 Statut Membre Dernière intervention 27 novembre 2023
29 déc. 2006 à 14:02
Merci beaucoup,


Quand tu seras chez-toi, s'il-te-plait, envoie celle que tu as, peut-être est-elle moins compliquée!


Merci encore une fois.
0
cs_Exploreur Messages postés 4821 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 15
31 déc. 2006 à 16:37
Salut,
Moi j'ai récuperé cela :

Private Sub Imprimer_Click()
'Appel de la procédure
 Call ImprimerListview1(Me.ListView1, "Ton titre", "Exemple : Inventaire du : " & StrConv(Format(Now, "dddd dd mmmm yyyy"), vbProperCase))
End Sub
Public Sub ImprimerListview1(ListView1 As ListView, stitre As String, ssoustitre As String, Optional ByVal snompolice As String "MS Sans Serif", Optional ByVal itaillepolice 8)
'Déclaration variable pour vérification qu'il y à bien un résultat dans la listwiev1
 Dim total


'Vérifiaction listwiev1
 For total = 0 To ListView1.ListItems.Count
 
 If ListView1.ListItems.Count = 0 Then
    Msgbox 'Tu informes l'utilisateur qu'il n'y à rien dans la listview
    Exit Sub
 End If


         
 On Error GoTo Err_Main


        Const lNB_MAX_ELEM_PAGE As Long = 35
        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
       
       
        stitre = UCase(Trim(stitre))
        'sApplication = App.Title & " VF " & CStr(App.Major) & "." & CStr(App.Minor) & "." & CStr(App.Revision)
        sDate = Format(Now, "dd/mm/yyyy")
       
        '     Calcul de la largeur totale des colonnes du listview
        lLargTot = 0
        For idxCol = 1 To ListView1.ColumnHeaders.Count
                lLargTot = lLargTot + ListView1.ColumnHeaders(idxCol).Width
        Next
       
        '     Détermination du nombre de pages, initialisation du numéro de la première page
        lNbPages = Int(ListView1.ListItems.Count / lNB_MAX_ELEM_PAGE) + 1
        lNumPageCour = 1
        '     Instancie l'imprimante cible (imprimante par défaut)
        With cmdd1
       
                .CancelError = True
                 On Error GoTo sortie
                .Flags = cdlPDPrintSetup
                .ShowPrinter
                .Orientation = cdlLandscape
                 Set p = Printer
        End With
        '     Initialisation de la page
        p.Orientation = vbPRORLandscape        p.Font snompolice: p.FontSize itaillepolice        p.ScaleHeight 100: p.ScaleWidth 100
                       
        '     Positionne le titre et le sous-titre de la page        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
       
        '     Positionne les en-têtes de colonnes
        p.CurrentX = 0
        For idxCol = 1 To ListView1.ColumnHeaders.Count
                lCurXtmp = p.CurrentX
                p.CurrentY = 10
                If ListView1.ColumnHeaders(idxCol).Width > 0 Then
                        p.FontBold = True: p.Print ListView1.ColumnHeaders(idxCol).Text
                End If
                p.CurrentX = lCurXtmp + (ListView1.ColumnHeaders(idxCol).Width * 100) / lLargTot
        Next
        p.Line (0, 13)-(100, 13)
       
        '     Ajout des éléments
        p.CurrentY = 14
        lComptElem = 0
       
        For Each liItem In ListView1.ListItems
                lCurYtmp = p.CurrentY
                For idxCol = 1 To ListView1.ColumnHeaders.Count
                        If ListView1.ColumnHeaders(idxCol).Width > 0 Then
                       
                                '     Détermine le nombre de caractères affichables
                                p.FontBold = False
                                lNbCarAff = Int(((ListView1.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 + (ListView1.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 + (ListView1.ColumnHeaders(idxCol - 1).Width * 100) / lLargTot
                        End If
                Next
               
                '     Incrémente le nombre d'éléments imprimés
                lComptElem = lComptElem + 1
                               
                If lComptElem = lNB_MAX_ELEM_PAGE Then
                        lComptElem = 0  '     Réinitialise le nomde d'élément ecrits
                        p.Line (0, 90)-(100, 90)        '     Trace la ligne de fin de liste                        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    '     Change de page
                        lNumPageCour = lNumPageCour + 1
                        '     Positionne le titre et le sous-titre de la page                        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
                       
                        '     Positionne les en-têtes de colonnes
                        p.CurrentX = 0
                        For idxCol = 1 To ListView1.ColumnHeaders.Count
                                lCurXtmp = p.CurrentX
                                p.CurrentY = 10
                                If ListView1.ColumnHeaders(idxCol).Width > 0 Then
                                        p.FontBold = True
                                        p.Print ListView1.ColumnHeaders(idxCol).Text
                                        p.FontBold = False
                                End If
                                p.CurrentX = lCurXtmp + (ListView1.ColumnHeaders(idxCol).Width * 100) / lLargTot
                        Next
                        p.Line (0, 13)-(100, 13)
                        p.CurrentY = 14
                End If
        Next liItem
       
        '     Ajoute le pied de page de la dernière page
        p.Line (0, 90)-(100, 90)        '     Trace la ligne de fin de liste        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.EndDoc        '     Lance l'impression du document créé
       
Fin:
        On Error Resume Next
        Set p = Nothing
        Exit Sub
       
Err_Main:
        If Not (p Is Nothing) Then p.KillDoc     'Annule l'impressino du document
        MsgBox err.Description, vbCritical, App.Title
        Resume Fin
       
        'End With
        Next total
       
sortie:

Il y a forcément mieux, mais c'est déjà un début !!
A+
Exploreur
0
cs_Exploreur Messages postés 4821 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 15
31 déc. 2006 à 16:54
Euh..Pardon j'ai pas bien vu le lien de ECONS, c'est la même chose!!Veuillez m'excusez de la précipitation de répondre..Econs es-tu en mesure de supprimer ma réponse.Merci d'avance et bon réveillon.
A+
Exploreur


 
0
Rejoignez-nous