Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Écrire Votre Première Procédure VBA | Introduction à VBA et au Modèle Objet d'Excel
VBA Excel Pour l'Automatisation des Entreprises

Écrire Votre Première Procédure VBA

Glissez pour afficher le menu

L’enregistrement de macros vous enseigne le vocabulaire ; en écrire une à partir de zéro, c’est commencer à penser comme un programmeur.

Anatomie d’une procédure Sub

Chaque bloc réutilisable de code VBA qui exécute une action (plutôt que de retourner une valeur, ce qui est le rôle d’une Function) s’écrit sous forme de Sub :

Sub ProcedureName()
    ' instructions go here
End Sub

Avec le curseur n’importe où dans une Sub, appuyez sur F5 (ou cliquez sur la flèche verte Exécuter) pour l’exécuter. Les commentaires — toute ligne commençant par une apostrophe (') — sont totalement ignorés par VBA ; utilisez-les généreusement pour expliquer pourquoi le code fait quelque chose, et pas seulement ce qu’il fait, car le « quoi » est généralement évident à la lecture du code.

Bonnes habitudes de mise en forme à adopter immédiatement

  • Tapez Option Explicit tout en haut de chaque module — cela vous oblige à déclarer chaque variable, ce qui permet de détecter les fautes de frappe avant qu’elles ne deviennent des bugs ;
  • Indentez le code à l’intérieur des boucles et des blocs If d’une tabulation — l’éditeur VBE ne vous y obligera pas, mais un code non indenté devient vite illisible ;
  • Utilisez des noms explicites (HighEarnerCount, et non x) — vous vous en remercierez dans trois semaines.

Exemple commenté : mise en surbrillance des hauts revenus

Écrivons, à la main, une procédure qui parcourt chaque employé du tableau et met en surbrillance ceux qui gagnent plus de $55,000 — ce que l’enregistreur de macro ne pourrait jamais faire, car cela nécessite une décision (une instruction If) répétée pour chaque ligne (une boucle).

Option Explicit
 
Sub HighlightTopEarners()
    Dim ws As Worksheet
    Dim i As Long
    Dim lastRow As Long
 
    Set ws = ThisWorkbook.Worksheets("Employees")
    lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
 
    For i = 2 To lastRow
        If ws.Cells(i, 6).Value > 55000 Then
            ws.Cells(i, 6).Interior.Color = RGB(198, 239, 206)
        End If
    Next i
 
    MsgBox "Done — high earners are highlighted."
End Sub
Analyse ligne par ligne
expand arrow
  • Dim ws As Worksheet / Dim i As Long — ces lignes déclarent deux variables : ws contiendra une référence à la feuille Employees, et i servira à compter les lignes ;
  • Set ws = ThisWorkbook.Worksheets("Employees") — c’est la bonne pratique de l’objet-modèle : nommer explicitement la feuille au lieu de dépendre de celle qui est active ;
  • ws.Cells(ws.Rows.Count, 1).End(xlUp).Row — une expression standard pour trouver la dernière ligne utilisée dans la colonne A, quel que soit le nombre d’employés dans le tableau ;
  • For i = 2 To lastRow ... Next i — une boucle qui répète le code pour chaque ligne de données, en commençant à la ligne 2 pour ignorer l’en-tête ;
  • If ws.Cells(i, 6).Value > 55000 Then — une décision : seules les lignes où la colonne Salary (colonne 6) dépasse 55000 sont formatées ;
  • MsgBox — une simple fenêtre pop-up confirmant que la macro est terminée.

Tapez cette procédure dans modIntro, placez votre curseur à l'intérieur et appuyez sur F5. Vérifiez les chiffres vous-même — Emma Davis et Olivia Brown sont les deux employées gagnant plus de 55 000 $ dans la table d'exemple.

Tâche

  1. Tapez HighlightTopEarners exactement comme indiqué dans modIntro et exécutez-la. Vérifiez que deux lignes deviennent vertes.
  2. Dupliquez la procédure sous le nom HighlightITDepartment et modifiez la condition pour qu'elle mette en surbrillance toute ligne où le Département (colonne 3) est égal à "IT" au lieu de vérifier le Salaire.
  3. Ajoutez un commentaire au-dessus de chaque procédure expliquant, en une phrase, ce qu'elle fait — entraînez-vous à écrire des commentaires pour le lecteur, pas pour vous-même.
  4. Enregistrez à nouveau le classeur (il est toujours en .xlsm, donc un simple Ctrl+S suffit).
Indice
expand arrow
  1. Sélectionnez toute la procédure HighlightTopEarners (de Sub à End Sub), copiez-la et collez-la juste en dessous dans modIntro.
  2. Renommez la ligne Sub de la seconde copie en Sub HighlightITDepartment() — chaque procédure dans un module doit avoir un nom unique, sinon VBA ne saura pas laquelle exécuter.
  3. La condition à modifier est la ligne If. Actuellement, elle vérifie un nombre :
If ws.Cells(i, 6).Value > 55000 Then

Vous devez maintenant vérifier un texte — colonne 3 (Department) égal à "IT". Rappelez-vous du chapitre 2 que les comparaisons de texte nécessitent des guillemets autour de la valeur à comparer, et utilisez = au lieu de >. 4. Tout le reste dans la boucle (la ligne Interior.Color, la structure de la boucle elle-même) peut rester identique — seule la condition testée change.

Ajout de commentaires

  1. Une ligne de commentaire commence par une apostrophe (') et se place sur sa propre ligne juste au-dessus de la ligne Sub — pas à l'intérieur de la procédure.
  2. Rédigez-le comme si vous expliquiez la macro à un collègue qui ne l'a jamais vue, et non comme un rappel pour vous-même. Comparez :
    • Peu utile : ' boucle sur les lignes (décrit comment, ce que le code montre déjà)
    • Plus utile : ' Met en surbrillance les employés gagnant plus de 55 000 $ (décrit ce que cela accomplit, ce qui n'est pas évident au premier coup d'œil)
  3. Faites de même pour la seconde procédure — une phrase décrivant ce qu'elle met en surbrillance et pourquoi, en termes d'objectif métier (personnel du département IT), pas la mécanique de la boucle.
Solution
expand arrow
' Highlights employees earning over $55,000, to flag top earners at a glance.
Sub HighlightTopEarners()
    Dim ws As Worksheet
    Dim i As Long
    Dim lastRow As Long

    Set ws = ThisWorkbook.Worksheets("Employees")
    lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

    For i = 2 To lastRow
        If ws.Cells(i, 6).Value > 55000 Then
            ws.Cells(i, 6).Interior.Color = RGB(198, 239, 206)
        End If
    Next i

    MsgBox "Done — high earners are highlighted."
End Sub

' Highlights every employee who works in the IT department.
Sub HighlightITDepartment()
    Dim ws As Worksheet
    Dim i As Long
    Dim lastRow As Long

    Set ws = ThisWorkbook.Worksheets("Employees")
    lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

    For i = 2 To lastRow
        If ws.Cells(i, 3).Value = "IT" Then
            ws.Cells(i, 3).Interior.Color = RGB(198, 239, 206)
        End If
    Next i

    MsgBox "Done — IT department is highlighted."
End Sub

Tapez les deux dans modIntro, exécutez d'abord HighlightTopEarners et vérifiez que exactement deux lignes deviennent vertes (Emma Davis à 62 000 $ et Sophia Miller à 59 000 $ — les trois autres sont à 55 000 $ ou moins), puis exécutez HighlightITDepartment et vérifiez que la ligne de Sophia Miller est surlignée à la place. Enregistrez avec Ctrl+S une fois que les deux fonctionnent.

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 1. Chapitre 6

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

Section 1. Chapitre 6
some-alt