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.
Bonjour,
Essayez ceci:
Cdlt
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
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
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.
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