Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Mise en Forme avec VBA | Travail Avec Les Données Excel
VBA Excel Pour l'Automatisation des Entreprises

Mise en Forme avec VBA

Glissez pour afficher le menu

Tout ce que vous pouvez formater manuellement dans Excel peut être formaté par le code.

Polices

With est une abréviation permettant de faire référence au même objet plusieurs fois de suite sans retaper son nom complet à chaque ligne. With obj ... End With signifie simplement que chaque ligne à l'intérieur de ce bloc qui commence par un point (comme .Property = X) est une abréviation pour obj.Property = X — VBA complète automatiquement obj pour chacune d'elles. Il s'agit uniquement d'une facilité de lecture ; cela ne modifie pas le fonctionnement du code.

' Without With — obj repeated on every line
ws.Range("A1:I1").Font.Bold = True
ws.Range("A1:I1").Font.Size = 11
ws.Range("A1:I1").Font.Color = RGB(255, 255, 255)

' With With — the object is stated once, everything else is shorthand
With ws.Range("A1:I1").Font
    .Bold = True
    .Size = 11
    .Color = RGB(255, 255, 255)
    .Name = "Calibri"
End With

Les deux versions font exactement la même chose — With évite simplement de répéter ws.Range("A1:I1").Font trois fois.

Couleurs

ws.Range("A1:I1").Interior.Color = RGB(24, 106, 60)   ' dark green header

Bordures

With ws.Range("A1:I6").Borders
    .LineStyle = xlContinuous
    .Weight = xlThin
    .Color = RGB(200, 200, 200)
End With

Alignement

ws.Range("E2:E6").HorizontalAlignment = xlCenter
ws.Range("C2:C6").HorizontalAlignment = xlLeft

Principes de base du formatage conditionnel

VBA peut appliquer les mêmes règles que celles créées via le ruban :

Dim rng As Range
Set rng = ws.Range("I2:I6")     ' Status column
 
rng.FormatConditions.Delete     ' clear any existing rules first
rng.FormatConditions.Add Type:=xlTextString, String:="Cancelled", _
    TextOperator:=xlContains
rng.FormatConditions(1).Interior.Color = RGB(255, 199, 206)
rng.FormatConditions(1).Font.Color = RGB(156, 0, 6)
Figure 3.4

Exécutez ceci et chaque commande "Cancelled" reçoit automatiquement une surbrillance rouge — et contrairement à un formatage manuel, la règle reste active si la valeur de Status change par la suite.

Tâche

  1. Mettre en gras la ligne d’en-tête (A1:I1), lui appliquer un fond vert foncé (RGB(24, 106, 60)) et rendre la police blanche (RGB(255, 255, 255)) — tout cela par code, pas manuellement.
  2. Ajouter des bordures grises fines (RGB(200, 200, 200)) autour de tout le tableau en utilisant CurrentRegion.
  3. Ajouter un format conditionnel qui met en surbrillance toute commande avec Discount % >= 10 en jaune (RGB(255, 235, 156)).
Indice
expand arrow

1. Mise en forme de la ligne d’en-tête

  • Font.Bold, Interior.Color et Font.Color peuvent tous être définis sur la même plage.
  • Le fond vert foncé nécessite un triplet RGB ; la police blanche est la valeur RGB la plus simple.
  • Un bloc With...End With évite de répéter ws.Range("A1:I1") trois fois.

2. Ajout de bordures avec CurrentRegion

  • CurrentRegion sur A1 sélectionne tout le tableau sans avoir à connaître ou coder en dur le nombre de lignes.
  • Les bordures ont trois propriétés à définir ensemble : LineStyle, Weight et Color — gris fin signifie xlThin et une valeur RGB gris clair.

3. Formatage conditionnel pour Discount % >= 10

  • Il s’agit d’une comparaison numérique, pas textuelle, donc le type de condition est xlCellValue avec xlGreaterEqual — différent de l’exemple sur le texte “Cancelled” vu plus haut dans le chapitre.
  • Point délicat : Discount % est stocké comme un décimal (10% = 0,1), donc la valeur de comparaison dans Formula1 doit être écrite "0.1", et non "10".
  • Toujours effacer les formats conditionnels existants sur cette plage en premier, sinon chaque exécution de votre macro empilera des règles en double.
Solution
expand arrow
Sub FormatOrdersTable()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Orders")

    ' --- 1. Header row formatting ---
    With ws.Range("A1:I1")
        .Font.Bold = True
        .Interior.Color = RGB(24, 106, 60)
        .Font.Color = RGB(255, 255, 255)
    End With

    ' --- 2. Borders around the full table ---
    With ws.Range("A1").CurrentRegion.Borders
        .LineStyle = xlContinuous
        .Weight = xlThin
        .Color = RGB(200, 200, 200)
    End With

    ' --- 3. Conditional format for Discount % >= 10 ---
    Dim discountRange As Range
    Set discountRange = ws.Range("G2:G6")

    discountRange.FormatConditions.Delete
    discountRange.FormatConditions.Add Type:=xlCellValue, _
        Operator:=xlGreaterEqual, Formula1:="0.1"
    discountRange.FormatConditions(1).Interior.Color = RGB(255, 235, 156)
End Sub
Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 3. Chapitre 4

Demandez à l'IA

expand

Demandez à l'IA

ChatGPT

Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion

Mise en Forme avec VBA

Tout ce que vous pouvez formater manuellement dans Excel peut être formaté par le code.

Polices

With est une abréviation permettant de faire référence au même objet plusieurs fois de suite sans retaper son nom complet à chaque ligne. With obj ... End With signifie simplement que chaque ligne à l'intérieur de ce bloc qui commence par un point (comme .Property = X) est une abréviation pour obj.Property = X — VBA complète automatiquement obj pour chacune d'elles. Il s'agit uniquement d'une facilité de lecture ; cela ne modifie pas le fonctionnement du code.

' Without With — obj repeated on every line
ws.Range("A1:I1").Font.Bold = True
ws.Range("A1:I1").Font.Size = 11
ws.Range("A1:I1").Font.Color = RGB(255, 255, 255)

' With With — the object is stated once, everything else is shorthand
With ws.Range("A1:I1").Font
    .Bold = True
    .Size = 11
    .Color = RGB(255, 255, 255)
    .Name = "Calibri"
End With

Les deux versions font exactement la même chose — With évite simplement de répéter ws.Range("A1:I1").Font trois fois.

Couleurs

ws.Range("A1:I1").Interior.Color = RGB(24, 106, 60)   ' dark green header

Bordures

With ws.Range("A1:I6").Borders
    .LineStyle = xlContinuous
    .Weight = xlThin
    .Color = RGB(200, 200, 200)
End With

Alignement

ws.Range("E2:E6").HorizontalAlignment = xlCenter
ws.Range("C2:C6").HorizontalAlignment = xlLeft

Principes de base du formatage conditionnel

VBA peut appliquer les mêmes règles que celles créées via le ruban :

Dim rng As Range
Set rng = ws.Range("I2:I6")     ' Status column
 
rng.FormatConditions.Delete     ' clear any existing rules first
rng.FormatConditions.Add Type:=xlTextString, String:="Cancelled", _
    TextOperator:=xlContains
rng.FormatConditions(1).Interior.Color = RGB(255, 199, 206)
rng.FormatConditions(1).Font.Color = RGB(156, 0, 6)
Figure 3.4

Exécutez ceci et chaque commande "Cancelled" reçoit automatiquement une surbrillance rouge — et contrairement à un formatage manuel, la règle reste active si la valeur de Status change par la suite.

Tâche

  1. Mettre en gras la ligne d’en-tête (A1:I1), lui appliquer un fond vert foncé (RGB(24, 106, 60)) et rendre la police blanche (RGB(255, 255, 255)) — tout cela par code, pas manuellement.
  2. Ajouter des bordures grises fines (RGB(200, 200, 200)) autour de tout le tableau en utilisant CurrentRegion.
  3. Ajouter un format conditionnel qui met en surbrillance toute commande avec Discount % >= 10 en jaune (RGB(255, 235, 156)).
Indice
expand arrow

1. Mise en forme de la ligne d’en-tête

  • Font.Bold, Interior.Color et Font.Color peuvent tous être définis sur la même plage.
  • Le fond vert foncé nécessite un triplet RGB ; la police blanche est la valeur RGB la plus simple.
  • Un bloc With...End With évite de répéter ws.Range("A1:I1") trois fois.

2. Ajout de bordures avec CurrentRegion

  • CurrentRegion sur A1 sélectionne tout le tableau sans avoir à connaître ou coder en dur le nombre de lignes.
  • Les bordures ont trois propriétés à définir ensemble : LineStyle, Weight et Color — gris fin signifie xlThin et une valeur RGB gris clair.

3. Formatage conditionnel pour Discount % >= 10

  • Il s’agit d’une comparaison numérique, pas textuelle, donc le type de condition est xlCellValue avec xlGreaterEqual — différent de l’exemple sur le texte “Cancelled” vu plus haut dans le chapitre.
  • Point délicat : Discount % est stocké comme un décimal (10% = 0,1), donc la valeur de comparaison dans Formula1 doit être écrite "0.1", et non "10".
  • Toujours effacer les formats conditionnels existants sur cette plage en premier, sinon chaque exécution de votre macro empilera des règles en double.
Solution
expand arrow
Sub FormatOrdersTable()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Orders")

    ' --- 1. Header row formatting ---
    With ws.Range("A1:I1")
        .Font.Bold = True
        .Interior.Color = RGB(24, 106, 60)
        .Font.Color = RGB(255, 255, 255)
    End With

    ' --- 2. Borders around the full table ---
    With ws.Range("A1").CurrentRegion.Borders
        .LineStyle = xlContinuous
        .Weight = xlThin
        .Color = RGB(200, 200, 200)
    End With

    ' --- 3. Conditional format for Discount % >= 10 ---
    Dim discountRange As Range
    Set discountRange = ws.Range("G2:G6")

    discountRange.FormatConditions.Delete
    discountRange.FormatConditions.Add Type:=xlCellValue, _
        Operator:=xlGreaterEqual, Formula1:="0.1"
    discountRange.FormatConditions(1).Interior.Color = RGB(255, 235, 156)
End Sub
Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 3. Chapitre 4
some-alt