ligne à repeter en bas excel

RONIBO

XLDnaute Impliqué
Bonjour,

Je viens vers vous suite à un problème que je n'arrive pas à résoudre.

J'ai crée un modèle de facture, malheureusement parfois il peut arriver que mes factures fassent plusieurs pages.

Afin de faciliter la création de ma facture à plusieurs pages, j'ai crée un bouton qui ajoute des lignes sur cette partie :


Mon problème est quand j'arrive à la dernière ligne deux ma facture et qu'il me manque quelques lignes (exemple 7 lignes) pour finaliser ma facture, je suis obliger d'ajouter 31 lignes pour rendre ma facture compréhensible, sinon j'obtiens ceci :

Première page :


Deuxième page :


Lorsque j'ajoute 31 lignes pour créer la prochaine page alors qu'il m'en fallait que 7 (par exemple), voici s'que j'obtiens.
Première page :


Deuxième page :


En gros la deuxième page ne sert à rien car il y a aucune donnée mise à part les totaux.

Je voulais savoir si l'on peut utiliser la répétition des lignes du bas comme j'ai fais pour les lignes du haut. (Mise en page > Feuille > Ligne à répéter en haut)

Ou avez vous une autre solution à me proposer via vba.

J'ai pensé à un modèle comme ceci (C'est juste une idée)
Première page :


Deuxième page :


J'espère que je me suis fais comprendre :)

Je remercie par avance

Bonne journée
 

Pièces jointes

  • Exemple.xlsm
    55.5 KB · Affichages: 147
  • Exemple.xlsm
    55.5 KB · Affichages: 149
  • Exemple.xlsm
    55.5 KB · Affichages: 148

Dranreb

XLDnaute Barbatruc
Re : ligne à repeter en bas excel

Connais pas les manœuvres en Excel 2007.
Alors essayez aussi ça :
VB:
Sub TestSP()
SautsDePages Feuil1, 20
Feuil1.PrintPreview
End Sub

Sub SautsDePages(ByVal F As Worksheet, ByVal NbLignesPPageMax As Long)
Dim ZImpr As Range, ZEnt As Range, LDéb As Long, LAprèsFin As Long, _
   NbLignes As Long, NbPg As Long, NbLpP As Long, L As Long
On Error Resume Next
Set ZImpr = F.Range(F.PageSetup.PrintArea)
If Err Then MsgBox "Veuillez définir une zone d'impression" _
   & vbLf & "sur la feuille """ & F.Name & """.", vbCritical, "SautsDePages": Exit Sub
Set ZEnt = F.Range(F.PageSetup.PrintTitleRows)
On Error GoTo 0
If Not ZEnt Is Nothing Then LDéb = ZEnt.Row + ZEnt.Rows.Count Else LDéb = ZImpr.Row
LAprèsFin = ZImpr.Row + ZImpr.Rows.Count
NbLignes = LAprèsFin - LDéb
NbPg = ((NbLignes + NbLignesPPageMax - 1) \ NbLignesPPageMax)
NbLpP = NbLignes \ NbPg: If NbLpP * NbPg < NbLignes Then NbLpP = NbLpP + 1
F.ResetAllPageBreaks
L = LDéb: Do: L = L + NbLpP: If L >= LAprèsFin Then Exit Sub
   F.HPageBreaks.Add F.Rows(L): Loop
End Sub
 

Dranreb

XLDnaute Barbatruc
Re : ligne à repeter en bas excel

Définir une zone d'impression.
En Excel 2003 menus Fichier, Mise en page…, onglet Feuille, rubrique Zone d'impression.
Vous avez bien défini des lignes à répéter en haut sur chaque page. Ça doit être à peu près au même endroit.
 

Dranreb

XLDnaute Barbatruc
Re : ligne à repeter en bas excel

F:=Feuil1 c'est un objet Worksheet dont le nom est repris de la rubrique Microsoft Excel Objet du projet VBA, à gauche du nom Excel de la feuille rappelé entre parenthèses.
NbLignesPPageMax:=20 est le nombre de ligne maxi qu'on souhaite dans chaque page.
 

Dranreb

XLDnaute Barbatruc
Re : ligne à repeter en bas excel

Je ne comprend pas la question. Il n'y a pas à définir de cellule. Il y a la plage rectangulaire à imprimer qu’il faut définir comme zone d'impression pour qu'on en connaisse la fin pour calculer le nombre de pages nécessaires en fonction du nombre de lignes maxi désirées dans chacune. Pour la définir sur la plage utilisée de la feuille vous pouvez utiliser cette macro :
VB:
Sub ZImpPlageUtilisée()
ActiveSheet.PageSetup.PrintArea = ActiveSheet.UsedRange.Address
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 765
Messages
2 091 892
Membres
105 084
dernier inscrit
lca.pertus