Imprimer Listview [Résolu]

Messages postés
38
Date d'inscription
vendredi 23 décembre 2005
Dernière intervention
27 mars 2018
- - Dernière réponse : cs_Exploreur
Messages postés
4824
Date d'inscription
lundi 11 novembre 2002
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.
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
Messages postés
4066
Date d'inscription
mardi 13 mai 2003
Dernière intervention
23 décembre 2008
3
Merci
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.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 106 internautes ce mois-ci

Commenter la réponse de econs
Messages postés
38
Date d'inscription
vendredi 23 décembre 2005
Dernière intervention
27 mars 2018
0
Merci
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.
Commenter la réponse de jctgt
Messages postés
4824
Date d'inscription
lundi 11 novembre 2002
Dernière intervention
15 novembre 2016
0
Merci
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
Commenter la réponse de cs_Exploreur
Messages postés
4824
Date d'inscription
lundi 11 novembre 2002
Dernière intervention
15 novembre 2016
0
Merci
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


 
Commenter la réponse de cs_Exploreur

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.