Microsoft 365 macro pour imprimer plusieur feuille d'un classeur

nicoco784

XLDnaute Nouveau
bonjour

je cherche a imprimer un fichier excel avec plusieurs feuilles d'on des cache, que je ne veut pas imprimer et avoir plusieurs copie des certaine feuil de se classeur.
j'aimerais un tableau ou je peut rentrer le nombre de copie désire pour telle feuil

si il avais une personne gentil pour explique ça serais cool

merci de votre aide
 

gbinforme

XLDnaute Impliqué
Bonjour,

Je te propose ce formulaire à importer dans ton classeur et à lancer avec 'impression.show'
il va te lister tes feuilles visibles et tu saisis le nombre de copies que tu veux et tu valides.

J'espère que cela va te convenir.
 

Pièces jointes

  • Impression.zip
    1.7 KB · Affichages: 4

patricktoulon

XLDnaute Barbatruc
Bonjour à tous
@gbinforme je suis plutôt friand de boite de dialog perso
j'aime bien ton truc

cependant on peut pousser un peu plus loin
en effet si on a 30 feuilles par exemple ton userform sera ingérable
en terme de taille
je te propose une adaptation avec une frame scroller uniquement au delà de 10 feuilles pour garder une taille de dialogue raisonnable
rien ne nous empêche de faire un peu de design les entêtes

d'autre part boucler sur les worksheets t'empêcherais de prendre en compte les sheets graphique
on bouclera donc sur les sheets et non la collection worksheets

VB:
Option Explicit
Private Sub UserForm_Activate()
    Dim H&, W&, T&, CtrL, CtrL2, f, a&: H = 15: W = 90: T = 5
    Set CtrL = Me.Controls.Add("Forms.Label.1", "titleFN", True)

    'titre
    With CtrL: .Caption = "Feuille  à imprimer": .Move 5, 1, W, H: .BorderStyle = 1: .TextAlign = 2: .ForeColor = vbWhite: End With
    Set CtrL2 = Me.Controls.Add("Forms.Label.1", "titleNB", True)
    With CtrL2: .Caption = "Nb Copies": .Move CtrL.Left + CtrL.Width + 5, 1, 40, H: .BorderStyle = 1: .TextAlign = 2: .ForeColor = vbWhite: End With

    'Liste des feuilles à imprimer
    For Each f In ThisWorkbook.Sheets
        a = a + 1
        Set CtrL = Me.Frame1.Controls.Add("Forms.Label.1", "title" & a, True)
        With CtrL: .Caption = f.Name & " : ": .Move 5, T, W, H: .BorderStyle = 1: .TextAlign = 2: End With
        Set CtrL2 = Me.Frame1.Controls.Add("Forms.textbox.1", "NBC" & a, True)
        With CtrL2: .Tag = f.Name: .Move CtrL.Left + CtrL.Width + 5, T, 40, H: End With
        T = T + 18
    Next

    'redimensionnement du userform ,de la frame + scrollbars si necessaire, placement du bouton
    'pour un visuel aisé la frame est limité  à  10  feuilles
    'au dela de 10 feuilles  la frame  a une scrollbar verticale
    With Frame1
        .Move 1, 18, CtrL2.Left + CtrL2.Width + 10, Application.Min(185 + 5, CtrL2.Top + H + 5)
        If CtrL2.Top + 20 > (18 * 11) + 5 Then .ScrollBars = 2: .ScrollHeight = CtrL2.Top + 20: .Width = .Width + 10
    End With
    Me.Width = Frame1.Width + 5 + 1
    Me.Height = Frame1.Height + Frame1.Top + 50
    BtImprim.Move ((Me.InsideWidth) - BtImprim.Width) / 2, Me.InsideHeight - 25
End Sub


Private Sub BtImprim_Click()
    Dim CtrLx
    For Each CtrLx In Frame1.Controls
        If CtrLx.Tag <> "" Then If CtrLx.Value <> "" Then Sheets(CtrLx.Tag).PrintOut Copies:=Val(CtrLx.Value), Collate:=False
    Next
End Sub

exemple avec avec 5 feuilles
1711445089692.png


exemple avec avec 10 feuilles
1711444604640.png


avec plus de 10 feuilles
demo.gif
 

Pièces jointes

  • Dialog impression multiple copies V pat 1.0.xlsm
    24.9 KB · Affichages: 8

nicoco784

XLDnaute Nouveau
Bonjour à tous
@gbinforme je suis plutôt friand de boite de dialog perso
j'aime bien ton truc

cependant on peut pousser un peu plus loin
en effet si on a 30 feuilles par exemple ton userform sera ingérable
en terme de taille
je te propose une adaptation avec une frame scroller uniquement au delà de 10 feuilles pour garder une taille de dialogue raisonnable
rien ne nous empêche de faire un peu de design les entêtes

d'autre part boucler sur les worksheets t'empêcherais de prendre en compte les sheets graphique
on bouclera donc sur les sheets et non la collection worksheets

VB:
Option Explicit
Private Sub UserForm_Activate()
    Dim H&, W&, T&, CtrL, CtrL2, f, a&: H = 15: W = 90: T = 5
    Set CtrL = Me.Controls.Add("Forms.Label.1", "titleFN", True)

    'titre
    With CtrL: .Caption = "Feuille  à imprimer": .Move 5, 1, W, H: .BorderStyle = 1: .TextAlign = 2: .ForeColor = vbWhite: End With
    Set CtrL2 = Me.Controls.Add("Forms.Label.1", "titleNB", True)
    With CtrL2: .Caption = "Nb Copies": .Move CtrL.Left + CtrL.Width + 5, 1, 40, H: .BorderStyle = 1: .TextAlign = 2: .ForeColor = vbWhite: End With

    'Liste des feuilles à imprimer
    For Each f In ThisWorkbook.Sheets
        a = a + 1
        Set CtrL = Me.Frame1.Controls.Add("Forms.Label.1", "title" & a, True)
        With CtrL: .Caption = f.Name & " : ": .Move 5, T, W, H: .BorderStyle = 1: .TextAlign = 2: End With
        Set CtrL2 = Me.Frame1.Controls.Add("Forms.textbox.1", "NBC" & a, True)
        With CtrL2: .Tag = f.Name: .Move CtrL.Left + CtrL.Width + 5, T, 40, H: End With
        T = T + 18
    Next

    'redimensionnement du userform ,de la frame + scrollbars si necessaire, placement du bouton
    'pour un visuel aisé la frame est limité  à  10  feuilles
    'au dela de 10 feuilles  la frame  a une scrollbar verticale
    With Frame1
        .Move 1, 18, CtrL2.Left + CtrL2.Width + 10, Application.Min(185 + 5, CtrL2.Top + H + 5)
        If CtrL2.Top + 20 > (18 * 11) + 5 Then .ScrollBars = 2: .ScrollHeight = CtrL2.Top + 20: .Width = .Width + 10
    End With
    Me.Width = Frame1.Width + 5 + 1
    Me.Height = Frame1.Height + Frame1.Top + 50
    BtImprim.Move ((Me.InsideWidth) - BtImprim.Width) / 2, Me.InsideHeight - 25
End Sub


Private Sub BtImprim_Click()
    Dim CtrLx
    For Each CtrLx In Frame1.Controls
        If CtrLx.Tag <> "" Then If CtrLx.Value <> "" Then Sheets(CtrLx.Tag).PrintOut Copies:=Val(CtrLx.Value), Collate:=False
    Next
End Sub

exemple avec avec 5 feuilles
Regarde la pièce jointe 1193550

exemple avec avec 10 feuilles
Regarde la pièce jointe 1193547

avec plus de 10 feuilles
Regarde la pièce jointe 1193549
merci de ta réponse
j'aime beaucoup avec ta boite de dialogue
je te donne plus de detail sur mon fichier alors j'ai 18 feuil visible sur 42 le reste es masquer
peut tu me dire comme integrer a mon ficher et comment modifier la boite de dialogue pour quelle soit plus grande sur ma version elle est trop petite on voie même pas le nombre de copie et feuille a imprimer

merci pour ton aide
 

patricktoulon

XLDnaute Barbatruc
re
le voici un peu plus gros
et tu a désormais les variables H,W ecx et VueMax pour paramétrer la taille
change tout le code du userform
VB:
Private Sub UserForm_Initialize()

    Dim H&, W&, T&, CtrL, CtrL2, f, a&, ecX&, VueMax
    H = 25    'hauteur des controls
    W = 150    'largeur des controls de gauche(les noms de feuille)
    T = 5    'le top de depart
    ecX = 3    'espaces  entre les controls
    VueMax = 10    'nombre de feuille visible dans le dialogue avant la scroll

    'titre
    Set CtrL = Me.Controls.Add("Forms.Label.1", "titleFN", True)
    With CtrL: .Caption = "Feuille  à imprimer": .Move 5, 1, W, H: .BorderStyle = 1: .TextAlign = 2: .ForeColor = vbWhite
        .Font.Size = 14: End With
    Set CtrL2 = Me.Controls.Add("Forms.Label.1", "titleNB", True)
    With CtrL2: .Caption = "Copies": .Move CtrL.Left + CtrL.Width + 5, 1, 60, H: .BorderStyle = 1: .TextAlign = 2: .ForeColor = vbWhite
        .Font.Size = 14: End With

    'Liste des feuilles à imprimer
    For Each f In ThisWorkbook.Sheets
        a = a + 1

        Set CtrL = Me.Frame1.Controls.Add("Forms.Label.1", "title" & a, True)
        With CtrL: .Caption = f.Name & " : ": .Move 5, T, W, H: .BorderStyle = 1: .TextAlign = 2: .Font.Size = 14: End With
        Set CtrL2 = Me.Frame1.Controls.Add("Forms.textbox.1", "NBC" & a, True)
        With CtrL2: .Tag = f.Name: .Move CtrL.Left + CtrL.Width + 5, T, 60, H: .Font.Size = 14: End With
        T = T + H + ecX
    Next

    'VueMax = a   'pour faire peter la limite de vuemax bien sur si l'ecran le permet

    'redimensionnement du userform ,de la frame + scrollbars si necessaire, placement du bouton
    'pour un visuel aisé la frame est limité  à  10  feuilles
    'au dela de 10 feuilles  la frame  a une scrollbar verticale
    With Frame1
        .Move 1, (H + ecX), CtrL2.Left + CtrL2.Width + 10, (H + ecX) * VueMax
        If CtrL2.Top + H > ((H + ecX) * VueMax) + 5 Then .ScrollBars = 2: .ScrollHeight = CtrL2.Top + H: .Width = .Width + 10
    End With
    Me.Width = Frame1.Width + 5 + 1
    Me.Height = Frame1.Height + Frame1.Top + 50
    BtImprim.Move 0, Me.InsideHeight - H - 2, Me.Width, H
BtImprim.Font.Size = 14
End Sub


Private Sub BtImprim_Click()
    Dim CtrLx
    For Each CtrLx In Frame1.Controls
        If CtrLx.Tag <> "" Then If CtrLx.Value <> "" Then Sheets(CtrLx.Tag).PrintOut Copies:=Val(CtrLx.Value), Collate:=False
    Next
End Sub
 

gbinforme

XLDnaute Impliqué
peut tu me dire comme integrer a mon ficher et comment modifier la boite de dialogue pour quelle soit plus grande sur ma version elle est trop petite on voie même pas le nombre de copie et feuille a imprimer
Voilà un formulaire avec des textes plus grands.
Les feuilles non visibles ne peuvent pas être imprimées et donc ne sont pas affichées.
Pour l'intégrer dans ton classeur il suffit de sélectionner la feuille du formulaire dans l'éditeur VBE et de la tirer dans ton classeur ouvert simultanément.
Ensuite pour le lancer tu as un exemple dans "Thisworbook"
 

Pièces jointes

  • Formulaire_impression.xlsm
    39.4 KB · Affichages: 1
Dernière édition:

patricktoulon

XLDnaute Barbatruc
re
Bonjour à tout les deux
nouvelle version avec Bouton inséré dans le ruban dynamiquement en premier dans l'onglet accueil
je dis tout dans la vidéo
au final il vous suffit de régler la hauteur de la variable "H" et tout le reste s'ajuste

pour l'intégrer dans votre projet
il vous suffit de :
  1. faire glisser dans la fenêtre VBE , l'userform dans votre projet
  2. copier les deux subs du module thisworkbook dans le votre
  3. copier la sub show du module standard dans un des vôtres

terminé c'est réglé ;)
 

Pièces jointes

  • Dialog impression multiple copies V pat 1.0.xlsm
    61 KB · Affichages: 3

Discussions similaires

Statistiques des forums

Discussions
312 215
Messages
2 086 326
Membres
103 180
dernier inscrit
Vcr