XL 2010 Imprimer 3 pages depuis une autre page

Orson83

XLDnaute Impliqué
Bonsoir la communauté,
J'aimerai pouvoir imprimer 3 pages depuis une autre page.
Je m'explique : en étant sur l'onglet "Accueil", je souhaiterai que 3 autres onglets soient imprimés.
J'ai préparé du code dans le Module1 mais il ne fonctionne pas.
Merci pour votre aide.
Je joins mon fichier Excel 2010 dans ce post.
PS : ne pas utiliser la position des onglets car ils pourront être déplacés. Merci ;)
François
 

Pièces jointes

  • Print-Xpages.xlsm
    32.4 KB · Affichages: 19

kiki29

XLDnaute Barbatruc
Salut, va voir ici puis adapte à ton contexte.

Possibilité de fusion en 1 seul pdf de l'ensemble des feuilles, ou de génération des feuilles sélectionnées de façon séparée, de gestion des doublons via un indice, le tout dans un dossier créé automatiquement et nommé par défaut Dossier PDFs à la racine de l'application. L'ensemble des feuilles ( visibles ou pas ) est listé via le bouton Récap.
 

Pièces jointes

  • Onglets PDF.png
    Onglets PDF.png
    101.5 KB · Affichages: 25
Dernière édition:

Orson83

XLDnaute Impliqué
Salut, va voir ici puis adapte à ton contexte.

Possibilité de fusion en 1 seul pdf de l'ensemble des feuilles, ou de génération des feuilles sélectionnées de façon séparée, de gestion des doublons via un indice, le tout dans un dossier créé automatiquement et nommé par défaut Dossier PDFs à la racine de l'application. L'ensemble des feuilles ( visibles ou pas ) est listé via le bouton Récap.

Bonsoir,
C'est super compliqué et ça ne m'indique pas comment faire en VBA.
En plus, je ne souhaite pas du PDF mais une prévisualisation dans Excel avant impression.
Il n'y aurait pas une autre solution ?
As-tu regardé mon fichier joint ?

Merci.
 

job75

XLDnaute Barbatruc
Bonjour Tchotchodu31, kiki29,

Le plus simple est d'imprimer les pages une par une :
VB:
Sub ButtonPrintStats()
Dim feuilles, zones, n%
feuilles = Array("Stats population", "Stats métiers", "Stats générales")
zones = Array("C4:M26", "D5:N27", "E6:O28")
For n = 0 To UBound(feuilles)
    With Worksheets(feuilles(n))
        With .PageSetup
            .PrintArea = zones(n)
            .LeftMargin = Application.InchesToPoints(0.5) 'Marge gauche
            .RightMargin = Application.InchesToPoints(0.5) 'Marge droite
            .TopMargin = Application.InchesToPoints(0.8) 'Marge haut de page ou top
            .BottomMargin = Application.InchesToPoints(0.8) 'Marge bas de page si nécessaire
            .Orientation = xlLandscape 'Paysage
        End With
        .PrintPreview 'Aperçu pour tester
        '.PrintOut 'Pour imprimer
    End With
Next
End Sub
A+
 

kiki29

XLDnaute Barbatruc
Re, une version PDF de ton fichier, tu peux basculer OpenAfterPublish:=False à True et modifier en conséquence l'appli. J'ai vu des personnes lancer l'impression papier de mémos de qqs dizaines de pages avant de se rendre compte d'erreurs, bref j'ai pu vérifier que le pdf n'évite pas cela complétement mais peut le freiner.
 

Pièces jointes

  • Test.xlsb
    37.9 KB · Affichages: 0
  • 1.png
    1.png
    3.5 KB · Affichages: 1
Dernière édition:

job75

XLDnaute Barbatruc
On remarque que sur le fichier du post #1 lez zones à imprimer ont une particularité : toutes leurs colonnes ont la même largeur (10,71 standard) et toutes leurs lignes la même hauteur (15).

On peut alors facilement les regrouper et les imprimer sur une même feuille auxiliaire :
VB:
Sub ButtonPrintStats()
Dim feuilles, zones, wb As Workbook, n%, P As Range, Z As Range
feuilles = Array("Stats population", "Stats métiers", "Stats générales")
zones = Array("C4:M26", "D5:N27", "E6:O28")
Set wb = Workbooks.Add 'document auxiliaire
For n = 0 To UBound(feuilles)
    Set P = ThisWorkbook.Worksheets(feuilles(n)).Range(zones(n))
    P.Copy ActiveCell 'Copier-coller
    Set P = ActiveCell.Resize(P.Rows.Count, P.Columns.Count)
    Set Z = Union(IIf(Z Is Nothing, P, Z), P)
    P(1, P.Columns.Count + 2).Select 'nouvelle cellule active
Next
With wb.Sheets(1)
    .Cells.RowHeight = 15 'hauteur à adapter
    .Cells.ColumnWidth = 10.71 'largeur à adapter
    With .PageSetup
        .PrintArea = Z.Address
        .CenterHorizontally = True 'Centrage horizontal
        .CenterVertically = True 'Centrage vertical
        .Orientation = xlLandscape 'Paysage
    End With
    .PrintPreview 'Aperçu pour tester
    '.PrintOut 'Pour imprimer
End With
wb.Close False 'fermeture du document auxiliaire
End Sub
Nota : plutôt que de définir des marges il vaut mieux centrer la zone à imprimer.
 

Orson83

XLDnaute Impliqué
Bonjour Tchotchodu31, kiki29,

Le plus simple est d'imprimer les pages une par une :
VB:
Sub ButtonPrintStats()
Dim feuilles, zones, n%
feuilles = Array("Stats population", "Stats métiers", "Stats générales")
zones = Array("C4:M26", "D5:N27", "E6:O28")
For n = 0 To UBound(feuilles)
    With Worksheets(feuilles(n))
        With .PageSetup
            .PrintArea = zones(n)
            .LeftMargin = Application.InchesToPoints(0.5) 'Marge gauche
            .RightMargin = Application.InchesToPoints(0.5) 'Marge droite
            .TopMargin = Application.InchesToPoints(0.8) 'Marge haut de page ou top
            .BottomMargin = Application.InchesToPoints(0.8) 'Marge bas de page si nécessaire
            .Orientation = xlLandscape 'Paysage
        End With
        .PrintPreview 'Aperçu pour tester
        '.PrintOut 'Pour imprimer
    End With
Next
End Sub
A+

Bonjour job75, kiki29,

Merci pour vos propositions.

La Macro de job75 ne permet pas de prévisualiser les 3 pages, cependant, en fouillant sur le Net j'ai trouvé une Macro qui permet de prévisualiser les 3 pages.

Pouvez-vous me donner votre avis ?

Voir fichier joint.

Bonne journée.

François
 

Pièces jointes

  • Print-Xpages.xlsm
    34.7 KB · Affichages: 5

Orson83

XLDnaute Impliqué
Ne racontez pas n'importe quoi, vous croyez que je donne des codes qui ne fonctionnent pas ???

Ce n'est pas mon propos ! Je trouve que vous aidez remarquablement la communauté.

Cependant, dans le fichier Print-xpages(1).xlsm il y a 3 prévisualisations (à mon sens, pas pratique)

et dans le fichier Print-xpages(2).xlsm le réglage des marges "par page" n'est pas optimisé, ceci dit, il fonctionne correctement.

Merci encore pour votre contribution.

Très belle journée.

François
 

job75

XLDnaute Barbatruc
Cela dit ma 2ème macro est inutilement compliquée, il vaut mieux grouper comme ceci :
VB:
Sub ButtonPrintStats()
Dim feuilles, zones, n%
feuilles = Array("Stats population", "Stats métiers", "Stats générales")
zones = Array("C4:M26", "D5:N27", "E6:O28")
For n = 0 To UBound(feuilles)
    With Worksheets(feuilles(n)).PageSetup
        .PrintArea = zones(n)
        .LeftMargin = Application.InchesToPoints(0.8) 'Marge gauche
        .RightMargin = Application.InchesToPoints(0.1) 'Marge droite
        .TopMargin = Application.InchesToPoints(0.8) 'Marge haut de page ou top
        .BottomMargin = Application.InchesToPoints(0.8) 'Marge bas de page si nécessaire
        .Orientation = xlLandscape 'Paysage
    End With
Next
Worksheets(feuilles).PrintPreview 'Aperçu pour tester
'Worksheets(feuil
Edit : enlevé un With/End With.
 

Pièces jointes

  • Print-Xpages(3).xlsm
    35.5 KB · Affichages: 5

Orson83

XLDnaute Impliqué
Effectivement, c'est beaucoup plus simple, mais sans vouloir être tatillon, le réglage des marges "par page"n'est pas possible (dans mon fichier de travail, j'ai une mise en page pour chaque feuille).

Et petite complication, j'ai un problème d'impression si mes onglets sont masqués car j'aimerai les laisser dans le même état de départ, qu'ils soient masqués ou qu'ils soient affichés sans que cela empêche l'impression.

Désolé d'en ajouter ;)

François
 

job75

XLDnaute Barbatruc
mais sans vouloir être tatillon, le réglage des marges "par page"n'est pas possible (dans mon fichier de travail, j'ai une mise en page pour chaque feuille).
Bien sûr que c'est possible, il suffit d'ajouter 4 Arrays, chacun avec les 3 valeurs de chaque marge.

Quant aux feuilles masquées il suffit de les afficher dans la boucle :
VB:
For n = 0 To UBound(feuilles)
    With Worksheets(feuilles(n)).PageSetup
        .Parent.Visible = xlSheetVisible 'si la feuille est masquée
 

Orson83

XLDnaute Impliqué
Ce n'est pas du tout ce que je vous ai dit de faire au post #12, donnez-vous un peu de mal.

Malgré tout le mal que je me donne, je n'y arrive pas.
Je viens de passer ma journée sur cette macro :confused:
Je n'arrive pas à combiner les arguments malgré des dizaines d'essais.
Désolé pour mon faible niveau en codage.
Merci de mettre fin à mes souffrances.
François
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 177
Messages
2 085 972
Membres
103 073
dernier inscrit
MSCHOE16