Private Sub CommandButton7_Click()
Application.ScreenUpdating = False
Dim tableau() As Variant
hauteur_max_par_feuille = 2000
nombre_ligne_totale = Range("C65000").End(xlUp).Row 'rechercher la derniere ligne de la colonne C
'RAZ tous les sauts de page
ActiveSheet.ResetAllPageBreaks
With ActiveSheet.PageSetup 'paramêtrer l'impression :
.Zoom = False 'aucun zoom
.FitToPagesWide = 1 'sur une page en largeur
.FitToPagesTall = 1 'sur 10 pageS en hauteur
End With
'cacher/compter les lignes, ajouter les sauts de page
saut_page = 9 'saut initial, d'où commence le premier tableau APRES LE TITRE (le nom n'est pas le bon donc.)
nb_saut = 1
n = 1
ReDim Preserve tableau(1 To 4, 1 To n)
For i = 1 To saut_page
tableau(4, 1) = tableau(4, 1) + Rows(i).Height 'hauteur des en-têtes
Next i
'remplir un tableau contenant le nombre de ligne des tableaux
For i = saut_page To nombre_ligne_totale 'pour toutes les lignes jusqu'à la fin
'If Cells(i, 1).Value = "" And Cells(i, 3).Value = "" Then
If Cells(i, 3).Value = "" Then
Rows(i).EntireRow.Hidden = False 'cacher les lignes inutiles
Else
If Left(Cells(i, 3), 1) <> "*" Then 'si il n'y a pas le chiffre 3 dans la colonne 3, alors c'est que l'on est dans le tableau actuel (i) :
tableau(1, n) = tableau(1, n) + 1 'j'ajoute une ligne au tableau en cours
tableau(4, n) = tableau(4, n) + Rows(i).Height
derniere_ligne = i 'j'identifie la dernière ligne
End If
End If
If Left(Cells(i, 3), 1) = "*" Then 'si il y a présence du CHIFFRE 3 : nouveau tableau
n = n + 1 'un tableau de plus
ReDim Preserve tableau(1 To 4, 1 To n) 'j'agrandi ma variable tableau
tableau(4, n) = tableau(4, n) + Rows(i).Height
tableau(2, n - 1) = derniere_ligne 'j'ajoute au tableau précedent le numéros de la dernière ligne, de manière à le borner
tableau(3, n) = i 'j'ajoute au tableau actuel le numéro de la ligne actuel pour lui définir sa première ligne
End If
Next i
ActiveWindow.View = xlPageBreakPreview 'je casse toutes les sauts de pages
nb_tab = 0
print_area = "$A$1:" 'je définis une variable qui sera ma zone d'impression
For i = 1 To UBound(tableau, 2) 'pour tous les tableaux :
hauteur_lignes = hauteur_lignes + tableau(4, i) 'j'incrémente mon nombre de ligne à imprimer
nb_tab = nb_tab + 1
If hauteur_lignes > hauteur_max_par_feuille Then 'si ce nombre dépasse le nombre max :
If nb_tab > 1 Then i = i - 1 'si la taille dépasse une seul tableau, je suis forcé de l'imprimer tel quel, sinon, je revien en arrière de 1, pour rajouter une zone
If i = UBound(tableau, 2) Then 'si c'est le dernier tableau, je clos ma zone d'impression (enfin la variable)
print_area = print_area & "$N$" & CStr(derniere_ligne)
Else 'si ce n'est pas le dernière tableau : j'incrémente ma variable zone d'impression avec les lignes du tableau en cours et du tableau suivant
print_area = print_area & "$N$" & CStr(tableau(2, i)) & ",$A$" & CStr(tableau(3, i + 1)) & ":"
hauteur_lignes = 0 'du coup, je repasse à 0 ligne
nb_tab = 0
End If
Else
If i = UBound(tableau, 2) Then 'si c'est le dernier tableau, je clos la variable
print_area = print_area & "$N$" & CStr(derniere_ligne)
End If
End If
Next i
ActiveWindow.View = xlNormalView
ActiveSheet.PageSetup.PrintArea = print_area 'j'attribue à la zone d'impression la variable que j'ai crée ! et voila !
'Cells(1, 1) = print_area
End Sub