Vous utilisez un navigateur obsolète. Il se peut que ce site ou d'autres sites Web ne s'affichent pas correctement. Vous devez le mettre à jour ou utiliser un navigateur alternatif.
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.
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
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.
Ce site utilise des cookies pour personnaliser le contenu, adapter votre expérience et vous garder connecté si vous vous enregistrez.
En continuant à utiliser ce site, vous consentez à notre utilisation de cookies.