Souci d'ajustement d'aperçu avant impression macro a revoir

Bonjour le forum, en vous souhaitant de bonne fêtes de fin d'année.

Je vous expose mon problème dans le fichier joint à la feuille Elève16 quand je fais un aperçu avant impression avec le bouton qui lui est associé pas de problème, toutes les feuilles sont correct par contre vu que je dois cliquer sur le bouton moins rouge (-) pour masquer des lignes là ou c'est écrit "Non travaillé" en colonne E et que je fasse l'aperçu mon aperçu est complètement bancale trop de place perdu cela ne va plus du tout et donc je cherche un moyen pour optimiser cela mais je n'ai plus d'idée. C'est pour cela que j'ai besoin de votre aide. Merci a tous.

10demo.xlsm (276.52 Ko)

Bonjour Arthuro83 merci de ta réponse quand je clique sur moins et que je fais un aperçu j'ai une erreur ici sinon pas d'erreur si il y a les ligne en plus avec le (+)

'Comptage du nombre de sauts de page
    NbLigParPage = ActiveSheet.HPageBreaks.Item(1).Location.Cells.Row - 1

C'est un problème que j'ai rencontré après avoir lancé la macro en pas à pas et l'ayant arrêtée avant quelle ait finie son cycle complet, et en relançant la macro cela s'arrêtait sur cette ligne. En fait c'est parce que le saut de page n'est pas détecté.

Pour contourner cela, j'ai 'imposé une valeur quelconque de sauts de page.

Je vous retourne le fichier et dites-moi si cela se reproduit:

Cdlt

toujours pareil erreur ici

' Définir la plage d'impression sur la feuille active
        ActiveSheet.PageSetup.PrintArea = PlageImprimer.Address

Comment se fait-il que vous me retourniez les mêmes lignes alors que dans le nouveau fichier il y a ceci:

    'Comptage du nombre de sauts de page
    On Error Resume Next
    NbLigParPage = ActiveSheet.HPageBreaks.Item(1).Location.Cells.Row - 1
    If NbLigParPage = vide Then NbLigParPage = 58
    On Error GoTo 0

Ok, j'ai compris, je ne l'ai fait que dans la macro "Aperçu", il faut faire la même chose dans la macro "Impression"

Voilà au complet:

toujours pareil erreur ici pour l'aperçu

' Définir la plage d'impression sur la feuille active
        ActiveSheet.PageSetup.PrintArea = PlageImprimer.Address

Par contre il y a un truc que que je remarque c'est une fois l'erreur passé j'ai la zone d'aperçu ou les saut de page de colonne sont sur E alors qu'il devrais être sur F !

sans titre

il vous faut paramétrer la mise en page

muratime

ici c'est fait

 ' Définir le zoom à 60%
        ActiveSheet.PageSetup.Zoom = 60

et j'ai toujours l'erreur ici

 ' Définir la plage d'impression sur la feuille active
        ActiveSheet.PageSetup.PrintArea = PlageImprimer.Address
ici c'est fait
 ' Définir le zoom à 60%
        ActiveSheet.PageSetup.Zoom = 60

Sauf dans la macro "Imprimer", j'ai dû l'écraser par mégarde.

Pour le reste, je n'arrive pas à reproduire l'erreur, alors j'ai ajouté une ligne de contournement, mais je ne peux pas vérifier .

je n'ai plus d'erreur avec le bouton Aperçu mais rien aucun n'aperçu

Comment est-ce possible, chez moi ça marche bien, la preuve en vidéo

muratime

Merci beaucoup Arthuro le souci j'ai compris sur excel 2007 ton avant dernier fichier là ou tu as modifié les macros Imprimer2 et ApercuAvantImpression2 cela ne fonctionne pas, donc comme tu as dis que chez toi cela fonctionnait j'ai ouvert une VM ou j'ai excel 2016 et effectivement cela fonctionne me reste plus qu'a modifier le Imprimer et le ApercuAvantImpression. Et rajouter la barre grise en bas qui doit être importante

J'ai trouvé le vrai problème en fait le gris sur les séparations que j'ai sur excel 2007 c'est RGB(165, 165, 165) et dans ton code c'est 166, 166, 166 donc il ne trouvais pas la zone d'aperçu par contre bizarrement le rendu sur 2007 est moins bon que sur 2016 sur 2007 il gaspille de la place

Autre question est nécessaire de rajouter ces variables

    Dim DerLig As Integer
    Dim DerLig1 As Integer
    Dim DerLig2 As Integer
    Dim DerLig3 As Integer
    Dim DerLig4 As Integer
    Dim DerLig5 As Integer

Autre question est nécessaire de rajouter ces variables

 Dim DerLig As Integer
    Dim DerLig1 As Integer
    Dim DerLig2 As Integer
    Dim DerLig3 As Integer
    Dim DerLig4 As Integer
    Dim DerLig5 As Integer
Oui, car chacune détermine la fin de chaque tronçon à imprimer et par la même occasion le début du tronçon suivant.

je demandais car elle ni y sont pas dans le fichier et celle là aussi

 Dim vide As Variant

c'est pour j'ai rajouté ça mais ça fonctionne sans bizarre

 Dim DerLig As Integer
    Dim DerLig1 As Integer
    Dim DerLig2 As Integer
    Dim DerLig3 As Integer
    Dim DerLig4 As Integer
    Dim DerLig5 As Integer
    Dim vide As Variant

Le fait de ne pas déclarer les variables n'empêche pas de fonctionner, seulement comme il n'y a rien de spécifier, elles prennent le type variant par défaut, et ce n'est pas l'idéal car gourmand en mémoire.

Si je ne l'ai pas fait, c'est parce que j'étais tellement absorbé par ce problème de saut de page que j'en ai oublié de le faire, mais vous l'avez fait vous -même donc, c'est parfait.

Bon bah merci Arthuro je pense que j'ai finalisé le fichier grâce a toi. Pour un souci de compatibilité j'ai mis du noir pour les séparations avec RGB(0, 0, 0) et fais l'autre macro pour l'aperçu du cycle 3 avec que 4 pages au lieu de 5 max et mis Empty au lieu de vide même si ça marche quand même.

Sub ApercuAvantImpression()
    Dim PlageImprimer As Range
    Dim Page As Integer
    Dim DerLig As Long
    Dim DerLig1 As Long
    Dim DerLig2 As Long
    Dim DerLig3 As Long
    Dim DerLig4 As Long
    Dim NbLigParPage As Long

    Application.ScreenUpdating = False

    ' Référencer la feuille active
    Dim ws As Worksheet
    Set ws = ActiveSheet

    'Recherche de la dernière ligne
    DerLig = Range("A" & Rows.Count).End(xlUp).Row

    'Comptage du nombre de sauts de page
    On Error Resume Next
    NbLigParPage = ActiveSheet.HPageBreaks.Item(1).Location.Cells.Row - 1
    If NbLigParPage = Empty Then NbLigParPage = 78
    On Error GoTo 0

    ' Boucle pour afficher l'aperçu avant impression pour chaque page
    For Page = 1 To 4
        Select Case Page
            Case 1
                If Range("H7").Value = "x" Then 'c'est que toutes les compétences non travaillées sont affichées
                    Set PlageImprimer = ActiveSheet.Range("A1:F69")
                ElseIf Cells(NbLigParPage * Page, "A").Interior.Color = RGB(0, 0, 0) Then
                    DerLig1 = NbLigParPage * Page
                    Set PlageImprimer = ActiveSheet.Range("A1:F" & DerLig1)
                Else
                    For i = NbLigParPage * Page To 1 Step -1
                        If Cells(i, "A").Interior.Color = RGB(0, 0, 0) Then
                            DerLig1 = i
                            Set PlageImprimer = ActiveSheet.Range("A1:F" & DerLig1)
                            Exit For
                        End If
                    Next i
                End If

            Case 2
                If Range("H7").Value = "x" Then 'c'est que toutes les compétences non travaillées sont affichées
                    Set PlageImprimer = ActiveSheet.Range("A70:F111")
                ElseIf Cells(NbLigParPage * Page, "A").Interior.Color = RGB(0, 0, 0) Then
                    DerLig2 = NbLigParPage * Page
                    Set PlageImprimer = ActiveSheet.Range("A" & DerLig1 + 1 & ":F" & DerLig2)
                Else
                    For i = NbLigParPage * Page To 1 Step -1
                        If Cells(i, "A").Interior.Color = RGB(0, 0, 0) Then
                            DerLig2 = i
                            Set PlageImprimer = ActiveSheet.Range("A" & DerLig1 + 1 & ":F" & DerLig2)
                            Exit For
                        End If
                    Next i
                End If

            Case 3
                If Range("H7").Value = "x" Then 'c'est que toutes les compétences non travaillées sont affichées
                    Set PlageImprimer = ActiveSheet.Range("A112:F167")
                ElseIf Cells(NbLigParPage * Page, "A").Interior.Color = RGB(0, 0, 0) Then
                    DerLig3 = NbLigParPage * Page
                    Set PlageImprimer = ActiveSheet.Range("A" & DerLig2 + 1 & ":F" & DerLig3)
                Else
                    For i = NbLigParPage * Page To 1 Step -1
                        If Cells(i, "A").Interior.Color = RGB(0, 0, 0) Then
                            DerLig3 = i
                            Set PlageImprimer = ActiveSheet.Range("A" & DerLig2 + 1 & ":F" & DerLig3)
                            Exit For
                        End If
                    Next i
                End If

            Case 4
                If Range("H7").Value = "x" Then 'c'est que toutes les compétences non travaillées sont affichées
                    Set PlageImprimer = ActiveSheet.Range("A168:F204")
                ElseIf Cells(NbLigParPage * Page, "A").Interior.Color = RGB(0, 0, 0) Then
                    DerLig4 = NbLigParPage * Page
                    Set PlageImprimer = ActiveSheet.Range("A" & DerLig3 + 1 & ":F" & DerLig4)
                Else
                    For i = NbLigParPage * Page To 1 Step -1
                        If Cells(i, "A").Interior.Color = RGB(0, 0, 0) Then
                            DerLig4 = i
                            Set PlageImprimer = ActiveSheet.Range("A" & DerLig3 + 1 & ":F" & DerLig4)
                            Exit For
                        End If
                    Next i
                End If

        End Select

        ' Définir le zoom à 60%
        ActiveSheet.PageSetup.Zoom = 60

        ' Définir la plage d'impression sur la feuille active
        ActiveSheet.PageSetup.PrintArea = PlageImprimer.Address

        ' Personnaliser les marges d'impression si nécessaire
        With ActiveSheet.PageSetup
            .LeftMargin = Application.InchesToPoints(0.5)
            .RightMargin = Application.InchesToPoints(0.2)
            .TopMargin = Application.InchesToPoints(0.1)
            .BottomMargin = Application.InchesToPoints(0.1)
        End With

        ' Spécifier l'entête A1:F7 pour les pages 2, 3 et 4
        If Page > 1 Then
            With ActiveSheet.PageSetup
                .PrintTitleRows = "$1:$7"
            End With
        End If

        ' Ajouter un numéro de page en bas de chaque page
        With ActiveSheet.PageSetup
            .CenterFooter = "Page " & Page
            .FooterMargin = Application.InchesToPoints(0.1)
        End With

        ' Afficher l'aperçu avant impression pour la plage actuelle
        PlageImprimer.PrintPreview

        ' Réinitialiser la plage d'impression
        ActiveSheet.PageSetup.PrintArea = ""

        ' Réinitialiser l'entête et le numéro de page pour la page suivante
        If Page > 1 Then
            With ActiveSheet.PageSetup
                .PrintTitleRows = ""
                .CenterFooter = ""
            End With
        End If
        If DerLig1 >= DerLig Or DerLig2 >= DerLig Or DerLig3 >= DerLig Or DerLig4 >= DerLig Then GoTo Suite
    Next Page

Suite:
    ' Réinitialiser les paramètres de la page
    With ActiveSheet.PageSetup
        .PrintTitleRows = ""
        .CenterFooter = ""
    End With

    Application.ScreenUpdating = True
End Sub

bonjour Arturo83, muratime,

Sub Muratime()

     With Sheets("elève 16")
          With .PageSetup
               .PrintArea = "A8:F48,A49:G91,A93:F120,A122:G157,A159:F218"
               .PrintTitleRows = "$1:$7"
               .Zoom = False
               .FitToPagesWide = 1
               .FitToPagesTall = 5

               .LeftMargin = Application.InchesToPoints(0.5)
               .RightMargin = Application.InchesToPoints(0.2)
               .TopMargin = Application.InchesToPoints(0.1)
               .BottomMargin = Application.InchesToPoints(0.1)
               .CenterFooter = "Page &P / &N"
               .FooterMargin = Application.InchesToPoints(0.1)

          End With
          .PrintPreview
     End With
End Sub
Rechercher des sujets similaires à "souci ajustement apercu impression macro revoir"