Impressions pages formats différents

roms27

XLDnaute Nouveau
Bonjour,

sur une feuille excel j'ai plusieurs pages d'impressions (Page1, page2).
Je souhaite pourvoir définir à chaque page une orientation d'impression différente : "Paysage" ou "Portrait" et pourvoir lancer l'impression des 2 pages d'un seul coup.
Lorsque que je modifie l'orientation dans l'onglet mise en page, l'orientation choisie s'applique toujours sur l'ensemble des pages à imprimer.

Merci de votre aide.
 

kjin

XLDnaute Barbatruc
Re : Impressions pages formats différents

Bonjour et bienvenu(e),
Il faut redéfinir l'orientation pour chaque page ou groupe de pages (xl2000)
Code:
Sub Impr()
With ActiveSheet
    .PageSetup.Orientation = xlLandscape
    .PrintOut From:=1, To:=1
    .PageSetup.Orientation = xlPortrait
    .PrintOut From:=2, To:=2
End With

End Sub
A+
kjin
 

PMO2

XLDnaute Accro
Re : Impressions pages formats différents

Bonjour,

Voici, en VBA, une manière (plutôt compliquée) de faire.

Dans la fenêtre de code de ThisWorkbook copiez le code suivant
Code:
Private Sub Workbook_Activate()
Call AddItemMenu
End Sub

Private Sub Workbook_Deactivate()
Call DelItemMenu
End Sub

Dans un module standard copiez le code suivant
Code:
Sub AddItemMenu(Optional dummy As Byte)
Dim CP As CommandBarPopup
Dim CC As CommandBarControl
Call DelItemMenu
Set CP = Application.CommandBars(1).FindControl(ID:=30002)
Set CC = CP.Controls.Add(Type:=msoControlButton, before:=CP.Controls("&Zone d'impression").Index)
With CC
  .Caption = "Multi zones d'impression"
  .OnAction = "Launch"
  .Tag = "___pmo"
End With
End Sub

Sub DelItemMenu(Optional dummy As Byte)
Dim CP As CommandBarPopup
Dim CC As CommandBarControl
Set CP = Application.CommandBars(1).FindControl(ID:=30002)
For Each CC In CP.Controls
  If CC.Tag = "___pmo" Then
    CC.Delete
    Exit Sub
  End If
Next CC
End Sub

Sub Launch(Optional dummy As Byte)
UserForm1.Show
End Sub

Créez un UserForm (propriété (Name) UserForm1) et ajoutez y les contrôles suivants
1) un contrôle RefEdit (propriété (Name) RefEdit1)
si vous ne trouvez pas ce contrôle dans la boîte à outils faites clic droit sur cette boîte
et cliquez gauche sur Contrôles supplémentaires… puis cochez la case RefEdit.Ctrl
2) deux contrôles Bouton d'option (propriété (Name) respectivement OptionButton1 et OptionButton2)
3) quatre contrôles Bouton de commande (propriété (Name) respectivement CommandButton1,
CommandButton2, CommandButton3, CommandButton4)
4) un contrôle Zone de liste (propriété (Name) ListBox1)
5) dans la fenêtre de code du UserForm copiez le code suivant
Code:
Dim LB As MSForms.ListBox

'/// Inscrit les plages dans la ListBox ///
Private Sub CommandButton1_Click()
Dim RF ''As RefEdit.RefEdit
Dim S As Worksheet
Dim R As Range
Dim T()
Dim i&
Dim lig&
Dim Opt$
Set S = ActiveSheet
Set RF = Me.RefEdit1
On Error Resume Next
Set R = Range(RF.Text)
If R.Parent.Name <> S.Name Then Set R = Nothing
On Error GoTo 0
If R Is Nothing Then
  RF.Text = ""
  RF.SetFocus
  Exit Sub
End If
R.Select
If Me.OptionButton1 Then
  Opt$ = "Portrait"
Else
  Opt$ = "Paysage"
End If
lig& = LB.ListCount
ReDim T(0 To 1, 0 To lig&)
If lig& = 0 Then
  T(0, 0) = R.Address
  T(1, 0) = Opt$
Else
  For i& = 0 To lig& - 1
    T(0, i&) = LB.Column(0, i&)
    T(1, i&) = LB.Column(1, i&)
  Next i&
  T(0, i&) = R.Address
  T(1, i&) = Opt$
End If
LB.Column() = T
RF.Text = ""
RF.SetFocus
End Sub

'/// Supprime des plages de la ListBox ///
Private Sub CommandButton2_Click()
Dim i&
Set LB = Me.ListBox1
With LB
  For i& = 0 To .ListCount - 1
    If .Selected(i&) Then
      .RemoveItem (.ListIndex)
      Exit For
    End If
  Next i&
End With
End Sub

'/// Imprime les plages selon l'orientation définie ///
Private Sub CommandButton3_Click()
Dim PS As PageSetup
Dim i&
i& = MsgBox("Veuillez confirmer l'impression", vbOKCancel + vbDefaultButton2)
If i& <> vbOK Then Exit Sub
If LB.ListCount = 0 Then Exit Sub
Set PS = ActiveSheet.PageSetup
For i& = 0 To LB.ListCount - 1
  PS.PrintArea = LB.Column(0, i&)
  If LB.Column(1, i&) = "Portrait" Then
    PS.Orientation = xlPortrait
  ElseIf LB.Column(1, i&) = "Paysage" Then
    PS.Orientation = xlLandscape
  End If
  ActiveSheet.PrintOut
Next i&
ActiveSheet.PageSetup.PrintArea = ""
End Sub

'/// Réglages du formulaire ///
Private Sub UserForm_Initialize()
Set LB = Me.ListBox1
With LB
  .ColumnCount = 2
  .ColumnWidths = "5cm;1cm"
End With
With Me.OptionButton1
  .Value = True
  .Caption = "Portrait"
  .AutoSize = True
End With
With Me.OptionButton2
  .Value = False
  .Caption = "Paysage"
  .AutoSize = True
End With
With Me
  .CommandButton1.Caption = "Valider la zone d'impression"
  .CommandButton2.Caption = "Supprimer des zones"
  .CommandButton3.Caption = "Impression"
  .CommandButton4.Caption = "Annuler"
  .Caption = "Zones d'impression (orientation variable)"
End With
End Sub

'/// Bouton Annuler ///
Private Sub CommandButton4_Click()
Set LB = Me.ListBox1
LB.Clear
With Me.RefEdit1
  .Text = ""
  .SetFocus
End With
ActiveSheet.PageSetup.PrintArea = ""
Me.Hide
End Sub

FONCTIONNEMENT
L'idée est de créer plusieurs zones d'impression avec, pour chacune d'elles, sa propre plage définie
ainsi que sa propre orientation (portrait ou paysage).
Supposons une feuille renseignée de A1 à G117 qu'on veut imprimer en 4 plages différentes (voir feuille "test")
1) sélectionnez la feuille "test" et faites menu Fichier/Multi zones d'impression
2) sélectionnez la plage "A1:G49" optez pour "Portrait" et cliquez sur "Valider la zone d'impression"
3) sélectionnez la plage "A50:K76" optez pour "Paysage" et cliquez sur "Valider la zone d'impression"
4) sélectionnez la plage "A77:K104" optez pour "Paysage" et cliquez sur "Valider la zone d'impression"
5) sélectionnez la plage "A105:G117" optez pour "Portrait" et cliquez sur "Valider la zone d'impression"
6) cliquez sur "Impression"

J'espère que c'est compréhensible et que cela fonctionnera chez vous.

Cordialement.

PMO
Patrick Morange
 

Statistiques des forums

Discussions
314 655
Messages
2 111 605
Membres
111 217
dernier inscrit
aladinkabeya2