Microsoft 365 Ajout d'une en-tete et pied de page via macro

saggigo

XLDnaute Occasionnel
Bonjour les sauveurs,
J'espère que vous allez tous bien et que que vos familles sont en bonne santé.

Je reviens vers vous pour vous demander de l'aide sur une macro.

Voila, j'utilise dans une feuille Excel (offre proforma) une macro d'ajustement de la hauteur ce qui permet de distribuer les lignes de tel sorte qu'elles soient reparti sur une page A4.

Hors aujourd'hui je souhaite ajouter une en-tête et un pied de page a cette feuille de calcul.

J'ai mis en pièce jointe le modèle de l'offre et en fait ce que je souhaite avoir c'est: s'il y a plusieurs page, que les zone en jaune (dans le modèle, se répète au début et a la fin de toutes les pages sans inclure la dernière. la dernière page ce sont des conditions d'achat qui n'ont pas besoin d'avoir un pied de page ou une en-tête sauf le numéro, mais ca j'ai déjà fait).

Je vous remercie pour votre aide vraiment précieuse.


Voici le code de l'Autofit:

VB:
Sub AutoFitMergedCellRowHeight()
 
Dim CurrentRowHeight As Single, MergedCellRgWidth As Single
Dim CurrCell As Range
Dim ActiveCellWidth As Single, PossNewRowHeight As Single
 
 If ActiveCell.MergeCells Then
   With ActiveCell.MergeArea
     .WrapText = True 'enclenche le renvoi à la ligne automatique (modif fs)
     If .Rows.Count = 1 Then 'And .WrapText = True Then
       Application.ScreenUpdating = True
       CurrentRowHeight = .RowHeight
       ActiveCellWidth = ActiveCell.ColumnWidth
       For Each CurrCell In Selection
           MergedCellRgWidth = CurrCell.ColumnWidth + MergedCellRgWidth
       Next
      .MergeCells = False
      .Cells(1).ColumnWidth = MergedCellRgWidth
      .EntireRow.AutoFit
       PossNewRowHeight = .RowHeight
      .Cells(1).ColumnWidth = ActiveCellWidth
      .MergeCells = True
      .RowHeight = IIf(CurrentRowHeight > PossNewRowHeight, CurrentRowHeight, PossNewRowHeight)
     End If
   End With
 End If
 
End Sub
 

Sub AutoFit()
Max_Page_Height = 1500
Foot_Lenght = 270

Set Design_RANGE = Worksheets("PROFORMA").Range("D26:D1515")
Set Items_Range = Worksheets("Cost Sheet A&D").Range("B8:B1508")

Page_height = 0
 
For i = 1 To 25
    Page_height = Page_height + Worksheets("PROFORMA").Cells(i, 1).RowHeight
Next
 
 Design_RANGE.Cells(1, 1).Select
 Call AutoFitMergedCellRowHeight
 Page_height = Page_height + Design_RANGE.Cells(1, 1).RowHeight
 
 Design_RANGE.Cells(2, 1).Select
 Call AutoFitMergedCellRowHeight
 Page_height = Page_height + Design_RANGE.Cells(2, 1).RowHeight
 
For i = 3 To 315
    
    
    If Items_Range.Cells(i, 1) = "" Then
        If (Max_Page_Height - (Page_height - Design_RANGE.Cells(i - 1, 1).RowHeight) - Foot_Lenght) < 0 Then
            Design_RANGE.Cells(i - 2, 1).RowHeight = Max_Page_Height - (Page_height - Design_RANGE.Cells(i - 1, 1).RowHeight - Design_RANGE.Cells(i - 2, 1).RowHeight)
        Else
            If (Max_Page_Height - (Page_height - Design_RANGE.Cells(i - 1, 1).RowHeight) - Foot_Lenght) < 1500 Then
            Design_RANGE.Cells(i - 1, 1).RowHeight = Max_Page_Height - (Page_height - Design_RANGE.Cells(i - 1, 1).RowHeight) - Foot_Lenght
            Else
            'Design_RANGE.Cells(i - 1, 1).RowHeight = 409
            Rest = Max_Page_Height - (Page_height) - Foot_Lenght
                While Rest > 0
                
                Rows(25 + i).Select
                Rows(Selection.Row - 1).Copy
                Selection.Insert Shift:=xlDown
                    If Rest > 1500 Then
                    Design_RANGE.Cells(i, 1).RowHeight = 1500
                    Else
                    Design_RANGE.Cells(i, 1).RowHeight = Rest
                    End If
                
                Rest = Rest - 1500
                i = i + 1
                Wend
            End If
            
        End If
            
            
            
    Exit For
    End If
    
    Rows(25 + i).Select
    Rows(Selection.Row - 1).Copy
    Selection.Insert Shift:=xlDown
    Design_RANGE.Cells(i, 1).RowHeight = 10

    Design_RANGE.Cells(i, 1).Select
    Call AutoFitMergedCellRowHeight
    
    Page_height = Page_height + Design_RANGE.Cells(i, 1).RowHeight
    
    If Page_height > Max_Page_Height Then
        Design_RANGE.Cells(i - 1, 1).RowHeight = Max_Page_Height - (Page_height - Design_RANGE.Cells(i, 1).RowHeight - Design_RANGE.Cells(i - 1, 1).RowHeight)
        Page_height = Design_RANGE.Cells(i, 1).RowHeight
    End If
Next


End Sub
 

Pièces jointes

  • Feuille de calcul.xlsx
    20.8 KB · Affichages: 6

chris

XLDnaute Barbatruc
Bonjour

La mise ne page dans Excel obéit aux règle générales de tout document : on peut différencier
  • la 1ère page des autres
  • les pages paires des impaires
mais pas la dernière

On peut, en plus dans Excel, ajouter en haut de page la répétition de lignes, de même à gauche la répétition de colonnes
Ce que tu fais n'est pas un en-tête.

Tu peux placer tes conditions sur un autre onglet mais l'imprimer en même temps que le premier avec une pagination continue.
 

saggigo

XLDnaute Occasionnel
Bonjour

La mise ne page dans Excel obéit aux règle générales de tout document : on peut différencier
  • la 1ère page des autres
  • les pages paires des impaires
mais pas la dernière

On peut, en plus dans Excel, ajouter en haut de page la répétition de lignes, de même à gauche la répétition de colonnes
Ce que tu fais n'est pas un en-tête.

Tu peux placer tes conditions sur un autre onglet mais l'imprimer en même temps que le premier avec une pagination continue.
Je te remercie Chris pour ta réponse. je ne vais pas te mentir, j'ai compris 80% de ce que tu as écris😅
J'ai pensé a pied et en-tete car j'ai penser à la répétition, mais si ce n'est pas possible alors est-il possible de copier la zone en jaune (cellules en gardant la forme des cellules) vers les autres pages lorsque j'active l'autofit?

et en fait ce que je n'ai pas compris c'est la pagination continue. mais c'est pas un soucis, je sais qu'il y a un moyen d'ajouter un bouton et de faire en sorte d'imprimer les pages qu'on veut en PDF.

Peux-tu s'il te plait m'aider pour la première partie?
 

chris

XLDnaute Barbatruc
RE

Pour la répétition des lignes jaunes en haut de page il suffit dans mise en page de le préciser
exemple
1654090651432.png

Pour le bas le mettre dans le pied de page : tu peux en faire une image car 8 lignes de texte, ce n'est pas toléré
Sinon cela oblige à le dupliquer comme faisant partie du corps de document ce qui n'est pas très propre.

Attention au coefficient de zoom de pages. Les parties en-tête et pied peuvent garder leur échelle de 100% indépendemment du corps du document pour éviter des variations assez moches de ces parties donnant l'image de l'entreprise.

Pour imprimer 2 onglets avec une pagination continue il suffit sélectionner les 2 avant de lancer l'impression.
Chacun garde ses options de configuration d'en-tête et pied mais la numérotation cours à travers les onglets
 

Pièces jointes

  • 1654090479926.png
    1654090479926.png
    24.7 KB · Affichages: 26

saggigo

XLDnaute Occasionnel
Bonjour chris,
Merci pour l'info sur l'en-tête ca marche et c'est vraiment simple. par contre pour l'image en pied de page, ca ne va pas la faire car elle se met sur les dernières lignes de ma proforma.

Aussi, serait-il possible de faire en sorte que ma macro d'auto-adaptation intègre les lignes a répéter en pied-de page? ca serai vraiment sympa., ou alors une autre macro qui ferait ca ca sera bien aussi.
 

Discussions similaires