Variable pour impression a partir d'un userform

brionfred

XLDnaute Nouveau
Bonjour tout le monde

J'aurais besoin de vos lumières pour modifier le code suivant, j'ai parcouru plusieurs forum mais je n'ai pas trouvé la solution :

Dans mes Userforms je fais appel au module ci-dessous ["Private Sub Imp_ListviewModelClient()"] pour une impression, et pour cela je souhaiterais intégrer une variable au niveau de l'instruction "With".
Cette variable serais renseignée par la valeur d'une cellule comportant le nom de l'userform et le nom de la listview. Afin de me permettre l'utilisation de ce code pour plusieurs Userform.

Est-ce possible ???

Code:
Private Sub Imp_ListviewModelClient()
' Impression listing Modèles par Clients
' 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:N").Select
    Selection.Clear
    Columns("A:N").Select
    Selection.NumberFormat = "@"
'---------------------------------------------------------------------------------------
'Copie en-têtes et données de la listview
'---------------------------------------------------------------------------------------
'
With USFListeModeleClient.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
Columns("A:A").Delete
'---------------------------------------------------------------------------------------
'Mise en forme de la page
'---------------------------------------------------------------------------------------
'
'Formatage des colonnes
    With Selection
        .HorizontalAlignment = xlGeneral
        .VerticalAlignment = xlCenter
        .WrapText = False
    End With
    Columns("A:N").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""&16BARDUSCH" 'En-tête gauche en Arial taille 16 gras
        .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

  Application.Dialogs(xlDialogPrintPreview).Show
End Sub

Merci de vos conseils et solutions

Cordialement
 

Discussions similaires