econs
Messages postés4030Date d'inscriptionmardi 13 mai 2003StatutMembreDernière intervention23 décembre 200824 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.
cs_Exploreur
Messages postés4821Date d'inscriptionlundi 11 novembre 2002StatutMembreDernière intervention15 novembre 201615 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
' 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
cs_Exploreur
Messages postés4821Date d'inscriptionlundi 11 novembre 2002StatutMembreDernière intervention15 novembre 201615 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