Non pas de modifications, et j'ai pris les remarques dans le bon sens, je suis !
Voici ma proposition :
Sub SautDePageLRD()
Dim NbLigne, I
NbLigne = Range("A" & Rows.Count).End(xlUp).Row + 1
For I = 1 To NbLigne
If Rows(I).PageBreak <> xlNone Then
Do
If Cells(I - 1, 1) = Cells(I, 1) Then
I = I - 1
Else
Exit Do
End If
Loop
Rows(I).PageBreak = xlPageBreakManual
End If
Next I
End Sub
En fait au départ, la feuille est sans saut de page, seuls les pointillés de découpage automatique d'impression sont visible suite à une visu avant impression.
La boucle VBA va détecter ces découpages automatiques, les uns après les autres.
S'il y en a un, on vérifie qu'il ne se trouve pas dans un bloc.
S'il est dans un bloc, alors on remonte d'une ligne et ce jusqu'à sortir du bloc.
A ce moment là uniquement on insert un saut de page Manuel.
De ce fait, le découpage automatique va se "recalculer".
La boucle continue leur recherche et continue leur déplacement en créant un saut de page manuel.
Au final le tableau est découpé par feuille sans découper les blocs, sans connaître à l'avance le nombre de ligne à afficher du fait que la hauteur de chacune est différente.
Le fichier :
Seul le cas d'un bloc plus grand qu'une feuille n'est pas prise en compte. Pour cela il faudrait faire un test sur le fait que lors d'une "remonté" de ligne on ne dépasse pas la valeur de la précédente.
@ bientôt
LouReeD