Impression

Résolu

Bonjour,

Je dois imprimer les pages 1 à 3 en Paysage et 5 à 7 en Portrait. 

Est il possible dans Excel comme dans Word de dire à partir de ce point imprimer en Portrait.

Sinon en VBA je suis preneur.

Merci à vous 


Windows / Edge 142.0.0.0

16 réponses

Résumé de la discussion

Le besoin est d’imprimer les pages 1 à 3 en paysage puis les pages 5 à 7 en portrait dans Excel, idéalement via une macro. La solution la plus directe consiste en une macro qui règle l’orientation sur paysage, imprime le premier bloc, puis bascule en portrait et imprime le bloc suivant. Des échanges soulignent des risques liés aux sauts de pages (manuels ou automatiques) et à l’indice hors plage lorsque la sélection n’est pas sous le saut, ce qui peut faire échouer le script. Des conseils complémentaires recommandent d’ajuster les plages et de privilégier les sauts de page automatiques plutôt que les sélections fixes pour assurer la cohérence des blocs imprimés.

Bobot (l’IA à votre service)
  1. hello,

    vite fait

    Sub Impression_Mixte()
    
        With ActiveSheet.PageSetup
            .Orientation = xlLandscape        ' Pages 1 à 3 en paysage
        End With
        ActiveSheet.PrintOut From:=1, To:=3
    
        With ActiveSheet.PageSetup
            .Orientation = xlPortrait        ' Pages 5 à 7 en portrait
        End With
        ActiveSheet.PrintOut From:=5, To:=7
    
    End Sub
    
    1
    1. Bonjour,

      Dans Word, tu fais des sauts de section. Tu peux configurer chaque section en mode portrait ou paysage (onglet Mise en Page, Orientation).

      Daniel


      0
      1. Merci à vous, 

        je vais prendre la réponse en VBA, cela me servira pour la suite. 

        C'est possible de faire un aperçu impression au lieu d'imprimer directement. 

        Je présume que Oui!

        Merci d'avance

        0
        1. Oui, mais non :-) 

          Comme ce sont 2 impressions l'une à la suite de l'autre on ne peut pas avoir les 2 ensembles.

          A la rigueur l'une après l'autre, à vérifier. 

          0
          1. OK. Cela ne m'arrange pas vraiment.

            J'ai repris ma  mise en forme pour tout mettre en paysage. L'aperçu fonctionne, mais en appuyant sur page suivante, je reste sur la 1ère page. En revanche, toutes les pages sont imprimées. 

            Peut etre qu'il manque un rafraichissement ??

            Merci 

             'Aperçu impression
                Application.PrintCommunication = True
                Range(" A2:Q232").Select
                ActiveSheet.PageSetup.PrintArea = "$A$2:$Q$232"
                ActiveWindow.SelectedSheets.PrintPreview
            0
            1. C'est quoi ce code ? 

              Application.PrintCommunication = True n'est pas nécessaire

              Range(" A2:Q232").Select n'est pas nécessaire non plus

              ActiveSheet.PageSetup.PrintArea = "$A$2:$Q$232"
              ActiveSheet.PageSetup.Orientation = xlLandscape
              ActiveSheet.PrintPreview
              

              Ca ça suffit

              et dans l'aperçu ça fonctionne très bien chez moi, vous pouvez utilisez l'ascenseur , la touche "flèche vers le bas" ou la touche "Page suivante" pour voir les autres pages

              0
              1. Bonjour,

                Pour corriger un bug Microsoft :

                Sub Impression()
                  Dim Adr1, Adr2
                  With ActiveSheet
                    .PageSetup.Orientation = xlLandscape
                    Set Adr1 = .HPageBreaks(3).Location
                    Range("A1", Adr1.Offset(-1)).Select
                    ActiveWorkbook.CustomViews.Add ViewName:="vue1", PrintSettings:=True, _
                      RowColSettings:=True
                    ActiveWorkbook.CustomViews("vue1").Show
                    Selection.PrintPreview
                    rep = MsgBox("Impression ?", vbYesNo)
                    If rep = 6 Then
                      Selection.PrintOut From:=1, To:=3
                    Else
                      Exit Sub
                    End If
                    Range("A10000").Select
                    Set Adr2 = .HPageBreaks(7).Location
                    Range(Adr1, Adr2.Offset(-1)).Select
                    .PageSetup.Orientation = xlPortrait
                    ActiveWorkbook.CustomViews.Add ViewName:="vue2", PrintSettings:=True, _
                      RowColSettings:=True
                    ActiveWorkbook.CustomViews("vue2").Show
                    Selection.PrintPreview
                    rep = MsgBox("Impression ?", vbYesNo)
                    If rep = 6 Then
                      Selection.PrintOut
                    End If
                  End With
                End Sub
                

                Daniel


                0
                1. Bonjour danielc0.

                  de quel bug parlez vous ?

                  Si je ne m'abuse, votre code utilise les sauts de pages manuels, ça plante s'il n'y en a pas.

                  Question supplémentaire : pourquoi des select (fixe qui plus est) ?

                  Merci pour les infos

                  0
                  1. Bonjour,

                    Non, ça fonctionne bien avec des sauts automatiques (cf. fichier joint).

                    Le bug MS : erreur 9 l'indice n'appartient pas à la sélection si la cellule active n'est pas au dessous du saut de page. D'où le :

                    Range("A10000").Select

                    Voir :

                    https://support.microsoft.com/fr-fr/topic/le-message-d-erreur-indice-hors-plage-s-affiche-lorsque-vous-utilisez-hpagebreaks-ou-vpagebreaks-location-dans-excel-ec4a8e22-9b58-349d-b160-f7a4f561c809

                    Fichier de test :

                    https://1fichier.com/?so0nrc90vbz32b1zhodn

                    Daniel

                    0
                2. J'ai oublié :

                  "pourquoi des select (fixe qui plus est) ?"

                  Outre celui du bug, les vues personnalisées (customviews) sont créées à partir des cellules sélectionnées. Pas moyen de faire autrement.

                  Daniel


                  0
                  1. Plus simple, sans vue perso :

                    Sub Impression1()
                      Dim Adr1, Adr2
                      With ActiveSheet
                        .PageSetup.Orientation = xlLandscape
                        Set Adr1 = .HPageBreaks(3).Location
                        Range("A1", Adr1.Offset(-1)).PrintPreview
                        rep = MsgBox("Impression ?", vbYesNo)
                        If rep = 6 Then
                          Range("A1", Adr1.Offset(-1)).PrintOut
                        Else
                          Exit Sub
                        End If
                        Range("A10000").Select
                        Set Adr2 = .HPageBreaks(7).Location
                        .PageSetup.Orientation = xlPortrait
                        Range(Adr1, Adr2.Offset(-1)).PrintPreview
                        rep = MsgBox("Impression ?", vbYesNo)
                        If rep = 6 Then
                          Range(Adr1, Adr2.Offset(-1)).PrintOut
                        End If
                      End With
                    End Sub
                    

                    1
                    1. Bonjour Daniel,

                      Avec le fichier ce serait peut être plus parlant. La feuille de classeur concernée est "Affichage' en appuyant sur "Maj" sur la ligne 1.

                      L'impression se fait en Paysage de la page 1 à 5 et au delà en portait. Mais à ce jour ce n'est pas encore calibré 

                      Chez moi, les aperçus ne fonctionnent pas bien, ni fleche vers le bas, page suivante, ascenseur, ça reste bloqué sur la page 1.

                      Merci par avance

                      https://cijoint.org/r/eHJpdSxF#+qnCcvXuI9UegeZryi24pzjoEMvRqIFrGFSFGgkAo8Q=

                      0
                      1. Bonjour à tous,

                        Comme te l'as demandé Nain_Porte_Quoi, quelle est ta version d'Excel ?

                        Daniel

                        0
                    2. En repartant de mon code et en l'appliquant précisément à votre fichier, voici la macro que je vous propose

                      Sub Aperçu_Immpression_Mixte()
                      
                          With ActiveSheet
                              .PageSetup.PrintArea = "$A$2:$Q$145"
                              .PageSetup.Orientation = xlLandscape
                              .PrintPreview
                              
                              rep = MsgBox("Impression paysage ?", vbYesNoCancel)
                              If rep = vbYes Then
                                  .PrintOut
                              ElseIf rep = vbCancel Then
                                  Exit Sub
                              End If
                              
                              .PageSetup.PrintArea = "$A$148:$M$279"
                              .PageSetup.Orientation = xlPortrait
                              .PrintPreview
                              
                              rep = MsgBox("Impression protrait ?", vbYesNo)
                              If rep = 6 Then
                                  .PrintOut
                              End If
                              
                          End With
                      
                      End Sub
                      

                      Éventuellement vous devrez adapter les zones d'impressions

                      Lors du premier aperçu le bouton "Annuler" fait sortir de l'impression.

                      Voici l'aperçu avant impression chez moi

                      Au fait vous n'avez pas précisé sur quelle version d'Excel vous travaillez

                      0
                      1. Bonjour à Vous

                        Ma version d'excel est office 365

                        Microsoft® Excel® pour Microsoft 365 MSO (Version 2510 Build 16.0.19328.20190) 64 bits

                        0
                        1. Re,

                          Merci pour le code, cela me convient très bien.

                          Chez moi page suivante, précédente etc.. ne fonctionnent pas en mode paysage !! Je ne sais pas pourquoi. En revanche en mode portrait Oui. 

                          Vraiment bizaroid !!

                          Bon diamanche

                          0
                          1. La plage A2:Q32 est trop grande pour tenir sur une page. J'ai redimensionné les "pavés"pour avoir une impression correcte (du moins avec mon imprimante) :

                            https://1fichier.com/?jpmgnyo2udjv3mcdcvt6

                            Sub Impr()
                              Dim Adr1 As Range, Adr2 As Range
                              With Sheets("Affichage")
                                .Activate
                                .[A1].Select
                                .PageSetup.Orientation = xlLandscape
                                Set Adr1 = .HPageBreaks(4).Location
                                .Range("Q2", Adr1.Offset(-1)).PrintPreview
                                rep = MsgBox("Impression ?", vbYesNo)
                                If rep = 6 Then
                                  .Range("Q1", Adr1.Offset(-1)).PrintOut
                                Else
                                  Exit Sub
                                End If
                                .Range("A10000").Select
                                .PageSetup.Orientation = xlPortrait
                                Set Adr1 = Adr1.Offset(1)
                                Set Adr2 = .HPageBreaks(6).Location
                                With .Range(Adr1, Adr2.Offset(-1)).Resize(, 12)
                                  .PrintPreview
                                  rep = MsgBox("Impression ?", vbYesNo)
                                  If rep = 6 Then
                                    .PrintOut
                                  Else
                                    Exit Sub
                                  End If
                                End With
                                .Range("A1").Select
                              End With
                            End Sub

                            Tu peux rajouter des données tant que les plages peuvent tenir sur une feuille.

                            Daniel


                            1