Pagination et saut de page au changement de valeur d'une colonne
Bonjour,
Je souhaite pouvoir créer un saut de page à chaque changement de valeur dans la colonne "C" du fichier joint.
De plus, je souhaiterais si c'est possible pouvoir numéroter les pages 1 sur X page en reprenant la numérotation à 1 à chaque nouveau saut de page.
cette numérotation peut se faire dans une cellule ou en pieds de page, l'important c'est qu'elle soit visible à l'impression.
Le nombre de lignes de mon fichier varie. il peut comporter 50 lignes comme 1000.
Exemple dans le fichier :
Le premier saut de page se fera après le changement de la valeur de la colonne C "70399" la numérotation sera 1 /x pages.
Le deuxième saut de page devra se faire après le changement de la valeur de la colonne C "70411", la numérotion sera 1 / X pages
est-ce possible ?
Je vous remercie par avance pour votre aide à ce sujet.
Cordialement,
Christian.
Bonsoir,
Essayez ceci, lancez la macro, après chaque attribution des sauts de page, on voit l'aperçu de ce qui sera imprimé, fermez l'aperçu et la prochaine feuille à imprimer s'affiche et ainsi de suite jusqu'à la fin. Si tout fonctionne correctement, remplacez la ligne de l'aperçu par la ligne qui commandera l'impression directement.
Sub Sauts_de_page()
Dim LigDeb As Long, DerLig As Long, i As Long
Application.ScreenUpdating = False
LigDeb = 1
DerLig = Range("A" & Rows.Count).End(xlUp).Row
For i = 3 To DerLig + 1
If Cells(i, "C") <> Cells(i - 1, "C") Then
ActiveSheet.PageSetup.PrintArea = "A" & LigDeb & ":P" & i - 1
ActiveWindow.SelectedSheets.PrintPreview 'aperçu avant impression, fermé l'aperçu pour voir la prochoine feuille
ActiveSheet.HPageBreaks.Add Before:=Cells(i, "C")
LigDeb = i
End If
Next i
End SubCdlt
bonjour,
à peut près la même manière que Arturo83, mais en une fois et un maximum de lignes par page
Const PageLines = 10 'combien de lignes par page
Sub Pages()
Dim aOut
Set sh = Sheets("a")
Set c = sh.Range("A1").CurrentRegion
sh.ResetAllPageBreaks
c.Offset(1).Columns(3).Name = "drenek"
aa = [drenek]
ReDim aOut(1 To c.Rows.Count, 1 To 2)
nr = Filter([transpose(if(drenek<>offset(drenek,-1,,,),row(drenek),"~"))], "~", 0)
For i = 0 To UBound(nr) - 1
Delta = nr(i + 1) - nr(i)
pag = (Delta - 1) \ PageLines
For j = 0 To pag
sh.HPageBreaks.Add Before:=c.Cells(nr(i) + j * PageLines, 1)
aOut(nr(i) + j * PageLines, 1) = "page " & j + 1 & " de " & pag + 1
aOut(nr(i) + j * PageLines, 2) = aa(nr(i), 1)
Next
Next
c.Offset(, c.Columns.Count + 1).Resize(, 2).Value = aOut
With sh.PageSetup
MsgBox c.Resize(, c.Columns.Count + 2).Address
.PrintArea = c.Resize(, c.Columns.Count + 3).Address
.Zoom = False
.FitToPagesWide = 1
.FitToPagesTall = False
.Orientation = xlLandscape
End With
sh.PrintPreview
End Sub
Bonjour Arturo83 et BsAlv
Merci pour votre aide.
@BsAlv, le document imprimé est Ok sauf le nombre de ligne. Est-il possible d'augmenter le nombre de ligne par page ?
J'ai essayé en modifiant la ligne :
Const PageLines = 10 'combien de lignes par page
en remplaçant 10 par 30 mais cela ne fonctionne pas.
Pouvez-vous me redire si c'est possible ?
Merci.
Christian.
bonjour, il faut relancer la macro après ce modif, vous l'avez fait ? Parce que cela fonctionne ici chez moi. Alors on voit que la 2ième page est 30 lignes plus bas, etc.
BsAlv,
Oui cela fonctionne en effet. je n'avais pas du relancer du coup !
Désolé pour le dérangement et contrôle inutile.
Merci pour cette macro et votre réactivité, cela va bien nous aider.
Cordialement,
Christian.