Impression

Résolu
xavier62000 Messages postés 106 Date d'inscription   Statut Membre Dernière intervention   -  
danielc0 Messages postés 2175 Date d'inscription   Statut Membre Dernière intervention   -

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.

Généré automatiquement par IA
sur la base des meilleures réponses
  1. Nain_Porte_Quoi Messages postés 152 Date d'inscription   Statut Membre Dernière intervention   30
     

    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
  2. danielc0 Messages postés 2175 Date d'inscription   Statut Membre Dernière intervention   286
     

    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
  3. danielc0 Messages postés 2175 Date d'inscription   Statut Membre Dernière intervention   286
     

    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
  4. danielc0 Messages postés 2175 Date d'inscription   Statut Membre Dernière intervention   286
     

    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. xavier62000 Messages postés 106 Date d'inscription   Statut Membre Dernière intervention   3
     

    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
  7. Nain_Porte_Quoi Messages postés 152 Date d'inscription   Statut Membre Dernière intervention   30
     

    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
  8. xavier62000 Messages postés 106 Date d'inscription   Statut Membre Dernière intervention   3
     

    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
  9. Nain_Porte_Quoi Messages postés 152 Date d'inscription   Statut Membre Dernière intervention   30
     

    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
  10. danielc0 Messages postés 2175 Date d'inscription   Statut Membre Dernière intervention   286
     

    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
  11. Nain_Porte_Quoi Messages postés 152 Date d'inscription   Statut Membre Dernière intervention   30
     

    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. danielc0 Messages postés 2175 Date d'inscription   Statut Membre Dernière intervention   286
       

      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
  12. Nain_Porte_Quoi Messages postés 152 Date d'inscription   Statut Membre Dernière intervention   30
     

    OK, merci

    0
  13. danielc0 Messages postés 2175 Date d'inscription   Statut Membre Dernière intervention   286
     

    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
  14. xavier62000 Messages postés 106 Date d'inscription   Statut Membre Dernière intervention   3
     

    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. danielc0 Messages postés 2175 Date d'inscription   Statut Membre Dernière intervention   286
       

      Bonjour à tous,

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

      Daniel

      0
  15. Nain_Porte_Quoi Messages postés 152 Date d'inscription   Statut Membre Dernière intervention   30
     

    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
  16. xavier62000 Messages postés 106 Date d'inscription   Statut Membre Dernière intervention   3
     

    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
  17. xavier62000 Messages postés 106 Date d'inscription   Statut Membre Dernière intervention   3
     

    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