Leçon 1 / 7 — Chapitre 3: Manipuler les objets Excel par code
Manipuler cellules et plages avec Range et Cells
Pour qu'une macro soit vraiment utile, elle doit lire et écrire dans les cellules de la feuille. VBA propose deux façons principales de désigner une cellule : Range et Cells. Elles se complètent bien plus qu'elles ne s'opposent.
Range utilise l'adresse classique de la cellule, comme dans Excel :
Sub ExempleRange()
Range("A1").Value = "Rapport de stock"
Range("B2:B10").Font.Bold = True
Range("A1:D1").Interior.Color = RGB(220, 230, 241)
End Sub
Pratique pour cibler une plage précise ou appliquer une mise en forme d'un coup.
Cells(ligne, colonne) utilise des numéros, ce qui est indispensable dès qu'on travaille avec des boucles :
Sub ExempleCells()
Cells(1, 1).Value = "Article"
Cells(2, 1).Value = "Riz 50kg"
Cells(2, 2).Value = 27500
End Sub
Cells(2, 1) correspond à A2, Cells(2, 2) à B2. L'avantage : la ligne et la colonne peuvent être des variables, donc calculées automatiquement.
Exemple combiné, pour une boutique de quincaillerie qui veut marquer en rouge tous les articles dont le stock est inférieur à 10 :
Sub AlerteStockFaible()
Dim i As Integer
For i = 2 To 20
If Cells(i, 3).Value < 10 And Cells(i, 3).Value <> "" Then
Cells(i, 3).Font.Color = RGB(255, 0, 0)
Cells(i, 3).Font.Bold = True
End If
Next i
End Sub
Cette macro parcourt la colonne C (quantités) et met en rouge et en gras chaque quantité inférieure à 10, sans qu'on ait besoin de vérifier ligne par ligne à la main.
Autre propriété utile : Range("A1").End(xlDown).Row renvoie le numéro de la dernière ligne remplie sous A1, très pratique pour adapter une boucle à un tableau dont la taille change chaque mois.
À vous de jouer
À faireVoici un extrait de code, où la colonne D contient : D2=8, D3=15, D4=3 (lignes 2 à 4) :
Sub AlerteStock()
Dim i As Integer
Dim compteurAlertes As Integer
compteurAlertes = 0
For i = 2 To 4
If Cells(i, 4).Value < 10 Then
compteurAlertes = compteurAlertes + 1
End If
Next i
MsgBox compteurAlertes
End Sub
Que va afficher le MsgBox lors de l'exécution ?
Réalisez la tâche, puis saisissez votre réponse ci-dessous pour vérification.
💡 Une instruction VBA complète.
À vous de jouer
À faireQuelle propriété VBA, appliquée à Range("A1"), renvoie le numéro de la dernière ligne remplie sous A1 ?
Réalisez la tâche, puis saisissez votre réponse ci-dessous pour vérification.
💡 Une propriété VBA (avec .End).