begin process at 2012 02 11 11:32:59
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Imprimante

 > IMPRIMER LE CONTENU D'UN LISTVIEW

IMPRIMER LE CONTENU D'UN LISTVIEW


 Information sur la source

Note :
9,44 / 10 - par 9 personnes
9,44 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Imprimante Niveau :Initié Date de création :03/10/2002 Date de mise à jour :03/10/2002 15:26:36 Vu :12 100

Auteur : vbfab

Ecrire un message privé
Commentaire sur cette source (19)
Ajouter un commentaire et/ou une note

 Description

IMPRESSION DU CONTENU D'UN LISTVIEW

Mode opératoire :
1/ Créer un nouveau projet VB6 avec un feuille (Form1)
2/ Sur la feuille, créer un listview (nom = ListView1)
3/ Sur la feuille, créer un bouton de commande (nom = Command1)
4/ Copier le code source suivant dans la zone de code de la feuille
5/ Exécuter puis cliquer sur le bouton Command1


Remarques :
- Ne nécessite pas de controle ActiveX ou API spécifique
- Utilisation du ratio des tailles des colonnes du listview

Source

  • Option Explicit
  • Private Sub Command1_Click()
  • ' Appel de la fonction d'impression
  • Call ImprimerListView(Me.ListView1, "Ceci est le titre", "Ceci est le sous-titre")
  • End Sub
  • Private Sub Form_Load()
  • Dim i As Long
  • ' Sélection du mode détaillé
  • Me.ListView1.View = lvwReport
  • ' Création des colonnes
  • Me.ListView1.ColumnHeaders.Add 1, , "Colonne 1"
  • Me.ListView1.ColumnHeaders.Add 2, , "Colonne 2"
  • Me.ListView1.ColumnHeaders.Add 3, , "Colonne 3"
  • ' Remplissage du listview
  • For i = 1 To 20
  • Me.ListView1.ListItems.Add i, , "Valeur " & CStr(i) & ",1"
  • Me.ListView1.ListItems(i).SubItems(1) = "Valeur " & CStr(i) & ",2"
  • Me.ListView1.ListItems(i).SubItems(2) = "Valeur " & CStr(i) & ",3"
  • Next i
  • End Sub
  • Public Sub ImprimerListView(lvwSource As ListView, sTitre As String, sSousTitre As String, Optional ByVal sNomPolice As String = "Arial", Optional ByVal iTaillePolice As Integer = 10)
  • 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 & " v" & 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 lvwSource.ColumnHeaders.Count
  • lLargTot = lLargTot + lvwSource.ColumnHeaders(idxCol).Width
  • Next
  • ' Détermination du nombre de pages, initialisation du numéro de la première page
  • lNbPages = Int(lvwSource.ListItems.Count / lNB_MAX_ELEM_PAGE) + 1
  • lNumPageCour = 1
  • ' Instancie l'imprimante cible (imprimante par défaut)
  • Set p = Printer
  • ' 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 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
  • End If
  • p.CurrentX = lCurXtmp + (lvwSource.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 lvwSource.ListItems
  • lCurYtmp = p.CurrentY
  • For idxCol = 1 To lvwSource.ColumnHeaders.Count
  • If lvwSource.ColumnHeaders(idxCol).Width > 0 Then
  • ' Détermine le nombre de caractères affichables
  • 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
  • ' 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 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
  • ' 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 Sub
Option Explicit

Private Sub Command1_Click()
    '   Appel de la fonction d'impression
    Call ImprimerListView(Me.ListView1, "Ceci est le titre", "Ceci est le sous-titre")
End Sub

Private Sub Form_Load()
    Dim i As Long

    ' Sélection du mode détaillé
    Me.ListView1.View = lvwReport
    ' Création des colonnes
    Me.ListView1.ColumnHeaders.Add 1, , "Colonne 1"
    Me.ListView1.ColumnHeaders.Add 2, , "Colonne 2"
    Me.ListView1.ColumnHeaders.Add 3, , "Colonne 3"    
    '   Remplissage du listview
    For i = 1 To 20
        Me.ListView1.ListItems.Add i, , "Valeur " & CStr(i) & ",1"
        Me.ListView1.ListItems(i).SubItems(1) = "Valeur " & CStr(i) & ",2"
        Me.ListView1.ListItems(i).SubItems(2) = "Valeur " & CStr(i) & ",3"
    Next i

End Sub

Public Sub ImprimerListView(lvwSource As ListView, sTitre As String, sSousTitre As String, Optional ByVal sNomPolice As String = "Arial", Optional ByVal iTaillePolice As Integer = 10)
    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 & " v" & 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 lvwSource.ColumnHeaders.Count
        lLargTot = lLargTot + lvwSource.ColumnHeaders(idxCol).Width
    Next
    '   Détermination du nombre de pages, initialisation du numéro de la première page
    lNbPages = Int(lvwSource.ListItems.Count / lNB_MAX_ELEM_PAGE) + 1
    lNumPageCour = 1
        
    '   Instancie l'imprimante cible (imprimante par défaut)
    Set p = Printer

    '   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 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
        End If
        p.CurrentX = lCurXtmp + (lvwSource.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 lvwSource.ListItems
        lCurYtmp = p.CurrentY
        For idxCol = 1 To lvwSource.ColumnHeaders.Count
            If lvwSource.ColumnHeaders(idxCol).Width > 0 Then
                '   Détermine le nombre de caractères affichables
                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
        
        '   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 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
    
    '   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 Sub



 Sources de la même categorie

Source avec Zip Source avec une capture Source .NET (Dotnet) PARAMETRES_IMPRIMANTE par Le Pivert
Source avec Zip Source .NET (Dotnet) IMPRESSION FACILE EN ÉVITANT LES BUGS DU FRAMEWORK par circular
Source avec Zip Source .NET (Dotnet) CLASSE POUR AJOUTER/CONNECTER/DECONNECTER UNE IMPRIMANTE RÉS... par radcur
Source avec Zip Source avec une capture IMPRESSION AU FIL DE L'EAU VERS IMPRIMANTE MATRICIELLE par rimas10
Source avec Zip Source avec une capture IMPRIMER CODE BARE par StetechCove

Commentaires et avis

Commentaire de PROGRAMMIX le 07/11/2002 12:02:49

Tant qu'à nous mâcher la besogne, pourquoi ne pas mettre ton projet dans un zip (tu le sors bien de quelque part ton code, je doute que tu l'ais tapé dans Word) et faire une capture pour montrer ce que ça donne... 7/10

Commentaire de phenneaux le 16/02/2003 15:09:07

Source excellente

Commentaire de Frank339 le 04/04/2003 14:28:17

run time error / type mismatch ???
oula a parement ca marche chez les zautres mais pas chez moua :-s

Windoz 2k / vb6

Commentaire de bigbosstheone le 12/05/2003 09:16:53

Très bon code mais le seul hic (et je suis novice donc ca vient p-e de là ... ;-) est que si le texte estb plus long que la colonne, l'impression coupe ma saisie ce qui est assez embetant lorsque l'on veut imprimer un listing d'adresse par exemple et que à l'impression on a que la moitié de l'adresse. Doit-on fixer les largeurs des colonnes de la listview? Comment faire ?

Commentaire de Dghi le 10/07/2003 15:47:23

Je trouve que ça déchire.
Merci.

Commentaire de EricEure le 05/11/2003 16:49:13

Extra pour gestion imprimante
Merci

Commentaire de Frank339 le 10/02/2004 02:52:33

je regrette juste qqc sur ta source... pourquoi avoir modifier du style set p=print ? pourquoi n'as tu pas gardé les valeurs de base, ca aurait tout autant bien fonctionné et ca aurait permis de mieux comprendre au nouveaux du VB... :-s

Commentaire de italalouise le 22/03/2005 10:48:00

je trouve que c'est une bonne source mais mon probleme est le suivant est ce qu'on pourrait imprimer le contenu de plusieurs listview sur une feuille ou deux feuilles max histoire d'eviter l'utilisation de plusieurs feuilles.
autre chose est il possible de spécifier l'emplacement exacte de notre listview à l'impressionen utilisant des signets.je suis débutante

merçi chers amis

Commentaire de harzer le 21/12/2005 11:24:07

Je résume la totalité du code en un seul mot : EXCELLENT
De plus, le code source est modifiable à volonté sans risque de perturber le reste des autres paramètres déjà codés.
Merci et Bravo.  

Commentaire de alfamick le 20/01/2006 16:58:20

Bravo pour ce code !!! impecable et facile à réutiliser. Merci de partager avec les autres. 10/10

Commentaire de wortmany le 08/03/2007 16:29:26

Super ca ma permis d'economiser du temps Merci beaucoup

Commentaire de charl42 le 25/01/2008 17:33:11 10/10

Super!! Très bon rendu et simple à utiliser :)

Commentaire de zokot30 le 12/05/2008 23:27:53

Super ! continue de partager pour mieux grandir

Commentaire de gridha le 12/12/2008 21:32:28

salut
novice en la matiere j'ai procede comme indique
-feuille
-creation list box appelee listview au lieu de list1
-bouton commande
a l'execution message " erreur de compilation type defini par l'utilisateur non defini"
au debogage ""Public Sub ImprimerListView(lvwSource As Listview, sTitre As String, sSousTitre As String, Optional ByVal sNomPolice As String = "Arial", Optional ByVal iTaillePolice As Integer "" en surbrillance
comment definir le type demande
merci pour eclaicissements pas à pas
gridha

Commentaire de alfamick le 13/12/2008 08:49:37

gridha, avant de modifier le code utilise le tel que l'auteur l'a décrit... en l'occurence cré un listview et nomme le tel qu'indiquer dans les commentaire de l'auteur. Il est évident que si tu as remplacer le listview par un listbox ça ne peut pas marcher ...Depuis que j'ai découvert ce oode je l'ai utilisé à toute les sauces et maintes fois modifié et il fonctionne parfaitement c'est vraiment un super code pour les impressions encore bravo à l'auteur

Commentaire de vbfab le 13/12/2008 10:41:27

salut a tous,
je suis content de voir que le code source que j'ai déposé il y a 6 ans est toujours dispo et utilisé.
A l'époque, à chaque fois que j'ajoutais un listview dans un logiciel, y-avait toujours qqun pour dire "on pourrait pas imprimer la liste?"... aussi au lieu de concevoir à chaque fois un 'état' pour chaque listview, j'ai conçu ce code qui s'addapte à tous les listviews (nb de colonnes/nb de lignes avec un rendu identique au listview pour les largeurs de colonnes).
merci.

Commentaire de alfamick le 13/12/2008 11:20:40

VBFAB, ormis toutes les critiques que tu as pu recevoir sur cette source via le super site vbfrance, je pense que beaucoup (et c'est pas sympa) ont du l'utiliser, le trouver fantastique et très utile mais n'ont pas eu la plume facile pour laisser un simple merci. Honteusement et en leurs noms je te remercie de mettre ton expérience au service des autres (meme ceux qui ne disent pas merci). Cordialement Alfamick

Commentaire de gridha le 13/12/2008 20:23:39

att  alfamick
merci pour ton conseil mais mon post porte sur
1) erreur " ImprimerListView " que visual ne trouve pas
comment ajouter ce composant à visual ???
2)le controle listview doit etre ajoute sur la barre des outils pour etre saisi sur la forme
l'outil qui a ete ajoute represente un appreil photo est ce bien ca qu'il faut mettre ou autre chose
novice et debutant m'aider svp
merci a toi pour l'assistance et à VBFAB pour son projet
gridha

Commentaire de gridha le 13/12/2008 21:05:28

ALFAMICK
suite mon post
installation list view reussi
plus d'erreur
probleme resolu
je vais mettre en application et essayer de comprendre ce que je dois mettre dans ma listview
si necassaire je solliciterai ton aide
merci encore
gridha

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,577 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales