
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 :
- Cliquez sur Fichier en haut à gauche, puis sur Options.
- Dans la fenêtre qui s’ouvre, sélectionnez Personnaliser le ruban.
- 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
- Ouvrez l’éditeur de code à l’aide du raccourci clavier Alt + F11 (ou cliquez sur Développeur > Visual Basic).
- Dans la barre de menus supérieure, cliquez sur Insertion > Module.
- Copiez l’intégralité du code ci-dessous et collez-le dans la grande page blanche qui vient de s’ouvrir.
- 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