Aller au contenu

Comment automatiser la mise en page A4 d’une facture sur Excel avec VBA (Zéro Sélection)

Bienvenue dans cette deuxième partie de notre série sur la création d’un système de facturation professionnel. Après avoir géré la structure globale, nous passons à la vitesse supérieure : l’automatisation complète de l’espace de travail.

Si vous êtes débutant, rassurez-vous. Vous n’aurez pas à modifier le code ou à configurer manuellement vos lignes à chaque fois. Ce guide vous montre comment intégrer un script VBA qui s’exécute en un clic pour formater instantanément votre feuille au format A4 parfait.

Pourquoi utiliser ce script VBA ?

  • Précision absolue : Vos colonnes et lignes s’adaptent automatiquement aux dimensions exactes d’une facture.
  • Optimisation de l’impression : Les marges sont fixées à 0 pour garantir un rendu PDF impeccable, sans coupure.
  • Calculs préparés : Les cellules de calcul pour le « Total HT » (Lignes 25 à 41) sont automatiquement fusionnées et centrées.

Étape 1 : Activer l’onglet Développeur sur Excel

Par défaut, Excel masque l’onglet dédié à la programmation. Voici comment le faire apparaître :

  1. Cliquez sur Fichier en haut à gauche, puis sur Options.
  2. Dans la fenêtre qui s’ouvre, sélectionnez Personnaliser le ruban.
  3. Sur la liste de droite, cochez la case Développeur et cliquez sur OK. L’onglet apparaît désormais dans votre menu principal.

Étape 2 : Insérer et exécuter le code

  1. Ouvrez l’éditeur de code à l’aide du raccourci clavier Alt + F11 (ou cliquez sur Développeur > Visual Basic).
  2. Dans la barre de menus supérieure, cliquez sur Insertion > Module.
  3. Copiez l’intégralité du code ci-dessous et collez-le dans la grande page blanche qui vient de s’ouvrir.
  4. Pour l’exécuter, cliquez simplement sur le petit triangle vert (Exécuter) en haut ou appuyez sur F5.

⚠️ Note importante : Ce code sert à préparer votre espace de travail. Vous n’avez besoin de l’exécuter qu’une seule fois. Après son exécution, vous pouvez effectuer vos ajustements visuels directement dans Excel, à condition de rester strictement dans la zone C8 à M64 pour ne pas casser le format A4.

💻 Le Code VBA à copier

VBA

Sub Appliquer_Mise_En_Page_Exacte()
    Dim ws As Worksheet
    Dim SH As Shape
    Dim plage As String
    Dim i As Integer
    
    Set ws = ActiveSheet
    plage = "$C$8:$M$64"
    
    ' 1. Bloquer la mise à jour visuelle pour maximiser la vitesse d'exécution
    Application.ScreenUpdating = False
    
    ' 2. Arrière-plan global de la feuille (Fond gris clair épuré)
    With ws.Cells.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .ThemeColor = xlThemeColorLight2
        .TintAndShade = 0.899990844447157
        .PatternTintAndShade = 0
    End With
    
    ' 3. Zone centrale de la facture en Blanc Pur (Format de la page A4 : C8 à M64)
    With ws.Range(plage).Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .ThemeColor = xlThemeColorDark1
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
    
    ' 4. Largeur exacte des colonnes (Structure optimisée pour votre facture)
    ws.Columns("C:D").ColumnWidth = 4
    ws.Columns("E:E").ColumnWidth = 21
    ws.Columns("F:G").ColumnWidth = 25
    ws.Columns("H:H").ColumnWidth = 10.14
    ws.Columns("I:I").ColumnWidth = 18
    ws.Columns("J:K").ColumnWidth = 5
    ws.Columns("L:M").ColumnWidth = 10
    
    ' 5. Hauteur des lignes stratégiques
    ws.Rows("8:11").RowHeight = 14
    ws.Rows("12:12").RowHeight = 30
    ws.Rows("14:14").RowHeight = 14
    ws.Rows("15:16").RowHeight = 15.75
    ws.Rows("24:24").RowHeight = 25  ' Ligne d'en-tête du tableau produit
    ws.Rows("25:37").RowHeight = 35.5 ' Hauteur pour la saisie des articles
    ws.Rows("43:47").RowHeight = 20   ' Hauteur des lignes de bas de tableau
    ws.Rows("52:52").RowHeight = 30  ' Ligne pour la zone de signature
    ws.Rows("53:64").RowHeight = 12
    
    ' 6. Remplissage et style de l'en-tête du Tableau Produit (Ligne 24)
    ws.Range("E24").Value = "REF"
    ws.Range("F24").Value = "DESCRIPTION"
    ws.Range("H24").Value = "Qté"
    ws.Range("I24").Value = "PRIX HT"
    ws.Range("J24").Value = "Total HT"
    
    ' Fusion des cellules J24 à L24 pour la colonne de calcul du Total
    ws.Range("J24:L24").Merge
    
    ' Application du style de fond de l'en-tête (Bleu/Gris contrasté)
    With ws.Range("E24:L24").Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .ThemeColor = xlThemeColorLight2
        .TintAndShade = 0.249977111117893
    End With
    
    ' Écriture de l'en-tête du tableau produit et alignement centré vertical
    With ws.Range("E24:L24")
        .VerticalAlignment = xlCenter
        With .Font
            .Name = "Aptos Narrow"
            .Size = 12
            .Bold = msoTrue
            .ThemeColor = xlThemeColorDark1
        End With
    End With
    
    ' Alignements horizontaux précis des titres du tableau
    ws.Range("E24:F24").HorizontalAlignment = xlLeft
    ws.Range("H24:J24").HorizontalAlignment = xlCenter
    
    ' --- FUSION DES LIGNES DE CALCUL TOTAL HT (Lignes 25 à 41) ---
    For i = 25 To 41
        With ws.Range("J" & i & ":L" & i)
            .Merge
            .HorizontalAlignment = xlCenter
            .VerticalAlignment = xlBottom
        End With
    Next i
    
    ' 7. Configuration de l'affichage de la colonne cachée de contrôle M
    With ws.Range("M9:M64")
        .Font.ColorIndex = xlAutomatic
        .Font.TintAndShade = 0
        .Interior.ThemeColor = xlThemeColorDark1
        .Interior.TintAndShade = 0
    End With
    
    ' 8. Création du titre principal "FACTURE" en zone I12 (FORCÉ EN NOIR PUR)
    On Error Resume Next
    ws.Shapes("TextBox_Titre_Facture").Delete
    On Error GoTo 0
    
    Set SH = ws.Shapes.AddTextbox(msoTextOrientationHorizontal, 520, 45, 150, 40)
    With SH
        .Name = "TextBox_Titre_Facture"
        .Fill.Visible = msoFalse
        .Line.Visible = msoFalse
        With .TextFrame2
            .VerticalAnchor = msoAnchorMiddle
            With .TextRange
                .Text = "FACTURE"
                .ParagraphFormat.Alignment = msoAlignCenter
                With .Font
                    .Name = "Aptos Narrow"
                    .Size = 24
                    .Bold = msoTrue
                    .Kerning = 5
                    .Fill.Visible = msoTrue
                    .Fill.Solid
                    .Fill.ForeColor.RGB = RGB(0, 0, 0)
                End With
            End With
        End With
    End With
    
    ' 9. Textes fixes, fusions et formules par défaut (FORCÉS EN NOIR)
    ws.Range("I15").Value = "Date :"
    ws.Range("I16").Value = "N° :"
    
    ws.Range("J15:L15").Merge
    ws.Range("J15").FormulaR1C1 = "=TODAY()"
    ws.Range("J16:L16").Merge
    
    ws.Range("I15:I16").HorizontalAlignment = xlRight
    ws.Range("J15:L16").HorizontalAlignment = xlCenter
    
    ' Bloc signatures et mentions de bas de page
    ws.Range("J52").Value = "La direction"
    ws.Range("E50:L51").Merge
    ws.Range("E50:L51").HorizontalAlignment = xlCenter
    ws.Range("E50:L51").VerticalAlignment = xlBottom
    
    ' Application de la police et de la couleur noire sur la zone d'en-tête et signatures
    With ws.Range("I15:L16,J52").Font
        .Name = "Aptos Narrow"
        .Size = 12
        .Bold = msoTrue
        .ThemeColor = msoThemeColorLight1
        .TintAndShade = 0
    End With
    
    ' 10. CONFIGURATION STRICTE DES PARAMÈTRES D'IMPRESSION A4 (Marges à 0)
    With ws.PageSetup
        .PrintArea = plage
        .FitToPagesTall = 1
        .FitToPagesWide = 1
        .LeftMargin = Application.InchesToPoints(0)
        .RightMargin = Application.InchesToPoints(0)
        .TopMargin = Application.InchesToPoints(0)
        .BottomMargin = Application.InchesToPoints(0)
        .Zoom = False
        .CenterHorizontally = False
        .CenterVertically = False
        .Orientation = xlPortrait
        .PaperSize = xlPaperA4
        .PrintHeadings = False
        .PrintGridlines = False
    End With
    
    ' 11. Rétablir les mises à jour de l'écran Excel
    Application.ScreenUpdating = True
    
    ' Repositionner la sélection sur une case neutre
    ws.Range("F12").Select
    MsgBox "Mise en page et fusion des cellules de calcul appliquées !", vbInformation, "Savoir et Partage"
End Sub

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *