Imprimer le contenu d'une listview

SSI83000

XLDnaute Occasionnel
Bonjour faisant suite à mon projet je souhaiterais integrer un bouton imprimer.

j'ai trouver pas mal d'exemple sur le forum mon soucis est le rapatriment des lignes de ma listview vers la feuil imp(feuil temp pour imprimer).

en effet ma listview se charge grace à plusieur Base de donnée nomée à la suite BDD1 BDD2....)

ma question est comment rapatrier les lignes de ma listview vers la feuil imp en vue d'etre imprimer svp.

en Pj un exemple .
merci à bientot.
 

Pièces jointes

  • Imprimer.xls
    34.5 KB · Affichages: 176
  • Imprimer.xls
    34.5 KB · Affichages: 158
  • Imprimer.xls
    34.5 KB · Affichages: 202
G

Guest

Guest
Re : Imprimer le contenu d'une listview

Bonjour,

Code:
Private Sub CommandButton1_Click()
    Dim sh As Worksheet
    Dim i As Long, lg As Long
    Set sh = ThisWorkbook.Sheets("Imp")
    With Me.ListView1
        For i = 1 To .ListItems.Count
            lg = sh.Range("A" & Application.Rows.Count).End(xlUp).Row + 1
            With .ListItems(i)
                sh.Cells(lg, 1) = .Text
                sh.Cells(lg, 2) = .SubItems(1)
                sh.Cells(lg, 3) = .SubItems(2)
                sh.Cells(lg, 4) = .SubItems(3)
            End With
        Next i
    End With
End Sub

A+
 

Gael

XLDnaute Barbatruc
Re : Imprimer le contenu d'une listview

Bonjour SSI83000, salut Hasco,

J'avais déjà eu cette demande pour une application et donc créé une procédure adaptée que je t'envoie ci-joint.

L'avantage est que la feuille impression est formatée et prête à être imprimée avec l'en-tête (nom de société et date), le pied de page (page 1/x) et la répétition des en-têtes de colonne sur chaque page. Pour la présentation, les colonnes sont en ajustement auto et un format automatique est appliqué.

il ne reste plus qu'à faire une impression, et la commande peut être rajoutée en fin de macro.

La copie des données du listview respecte l'ordre de tri des colonnes, on peut faire plusieurs impressions différentes avec des tris différents.

@+

Gael

Code:
'---------------------------------------------------------------------------------------
' Procedure : Imp_Listview
' Objet     :
'---------------------------------------------------------------------------------------
'
Private Sub Imp_Listview()
' Sauvegarde des résultats dans une feuille Excel
Dim i As Byte
Dim j As Byte
Dim textecom As String
Dim ligne As Integer
Application.EnableEvents = False
Application.ScreenUpdating = False
ligne = 1
Sheets("imp").Activate
'---------------------------------------------------------------------------------------
'Effacement de la sauvegarde précédente
'---------------------------------------------------------------------------------------
'
    Columns("A:H").Select
    Selection.Clear
    Columns("A:H").Select
    Selection.NumberFormat = "@"
'---------------------------------------------------------------------------------------
'Copie en-têtes et données de la listview
'---------------------------------------------------------------------------------------
'
With Me.ListView1
    'mise en place des entetes dans la première ligne
    For i = 1 To .ColumnHeaders.Count
        Sheets("imp").Cells(ligne, i) = .ColumnHeaders(i)
        Next i
    'Mise en, place des données dans les lignes suivantes
        For i = 1 To .ListItems.Count 'il y aura autant de lignes que d'items dans la listview
            ligne = ligne + 1
            Sheets("imp").Cells(ligne, 1) = .ListItems(i) 'on écrit le contenu de la première cellule
            For j = 1 To .ListItems(i).ListSubItems.Count 'puis les autres cellules à partir de 1 (premier index=0)
            textecom = .ListItems(i).ListSubItems(j)
            Sheets("imp").Cells(ligne, j + 1) = textecom 'on boucle sur chaque donnée
            Next j
        Next i
End With
'---------------------------------------------------------------------------------------
'Mise en forme de la page
'---------------------------------------------------------------------------------------
'
'Formatage des colonnes
    With Selection
        .HorizontalAlignment = xlGeneral
        .VerticalAlignment = xlCenter
        .WrapText = False
    End With
    Columns("A:H").Select
    Selection.Columns.AutoFit 'largeur des colonnes A à F déterminée en fonction du contenu
'---------------------------------------------------------------------------------------
'Application d'un format automatique "xlRangeAutoFormatList1"
'---------------------------------------------------------------------------------------
'
Range("A2").Select
If ActiveCell.Value = "" Then ActiveCell.Value = "111111" 'si la cellule est à blanc, le format va l'inclure dans le titre
                                                          'donc on force la valeur à une constante
Selection.AutoFormat Format:=xlRangeAutoFormatList1, Number:=True, Font _
        :=True, Alignment:=True, Border:=True, Pattern:=True, Width:=True 'on applique le format automatique du tableau
If ActiveCell.Value = "111111" Then ActiveCell.Value = "" '(si la valeur de la cellule a été forcée, on la remet à blanc
'---------------------------------------------------------------------------------------
'Définition de la mise en page (en mode paysage) Changer le paramètre si portrait
'---------------------------------------------------------------------------------------
'
    With ActiveSheet.PageSetup
        .PrintTitleRows = "$1:$1" 'Ligne à imprimer sur chaque page
        .PrintTitleColumns = ""
        .PrintArea = ""           'pas de définition de zone d'impression ==> on imprime toutes les données
        .LeftHeader = "&""Arial,Gras""&16SOCIETE" 'En-tête gauche en Arial taille 16 gras
        .CenterHeader = "&""Arial,Gras""&14" & Listview.Caption 'titre central en arial 14 gras = en-tête de la listview
        .RightHeader = "Le &D"    'on met la date en partie droite
        .CenterFooter = "Page &P / &N" 'et la pagination en pied de page
        'puis on définit les marges
        .LeftMargin = Application.InchesToPoints(0.8)
        .RightMargin = Application.InchesToPoints(0.8)
        .TopMargin = Application.InchesToPoints(1)
        .BottomMargin = Application.InchesToPoints(0.8)
        .HeaderMargin = Application.InchesToPoints(0.5)
        .FooterMargin = Application.InchesToPoints(0.5)
        .CenterHorizontally = True 'résultat centré horizontalement dans la page
        .Orientation = xlLandscape 'mode paysage
        .PaperSize = xlPaperA4     'papier A4: Instruction à mettre en commentaires si l'imprimante ne permet pas ce choix
                                   'sinon il y aura une erreur à l'exécution
        .Zoom = False              'pas de zoom
        .FitToPagesWide = 1        'l'impression s'adapte à une page de large
        .FitToPagesTall = False    'nombre de pages en fonction des données
    End With
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 371
Messages
2 087 697
Membres
103 644
dernier inscrit
bsalah