Cours VBA : les boucles (exercice)
Pour mettre en pratique ce qui a été vu jusque-là, nous allons créer étape par étape une macro qui va numéroter de 1 à 100 une plage de cellules carrée de 10 par 10 et colorer une cellule sur 2, aperçu :

Voici le point de départ de l'exercice :
Sub exerciceBoucles()
'...
End Sub
Pour commencer, ajoutez une boucle For qui va numéroter de 1 à 10 les cellules de la ligne 1, aperçu :

Prenez quelques instants pour créer cette boucle avant de passer à la solution ...
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
La solution :
Sub exerciceBoucles()
Dim colonne As Integer
'Boucle des colonnes
For colonne = 1 To 10
Cells(1, colonne) = colonne
Next
End Sub
Créez maintenant une seconde boucle qui va répéter la première boucle sur 10 lignes, aperçu :

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
La solution :
Sub exerciceBoucles()
Dim colonne As Integer, ligne As Integer
'Boucle des lignes
For ligne = 1 To 10
'Boucle des colonnes
For colonne = 1 To 10
Cells(ligne, colonne) = colonne
Next
Next
End Sub
Les lignes sont pour le moment numérotées de 1 à 10.
Trouvez maintenant une solution pour obtenir une numérotation de 1 à 100, aperçu :

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Une solution "simple" consiste à utiliser une variable qui sera incrémentée de 1 après chaque entrée dans une cellule :
Sub exerciceBoucles()
Dim colonne As Integer, ligne As Integer, valeur As Integer
'Valeur de la première cellule
valeur = 1
'Boucle des lignes
For ligne = 1 To 10
'Boucle des colonnes
For colonne = 1 To 10
Cells(ligne, colonne) = valeur
valeur = valeur + 1 'Valeur incrémentée de 1
Next
Next
End Sub
Une autre solution consiste à calculer la valeur à insérer dans la cellule à l'aide des numéros de colonne et de ligne :
Sub exerciceBoucles()
Dim colonne As Integer, ligne As Integer
'Boucle des lignes
For ligne = 1 To 10
'Boucle des colonnes
For colonne = 1 To 10
Cells(ligne, colonne) = (ligne - 1) * 10 + colonne
Next
Next
End Sub
Pour terminer l'exercice, il reste encore à colorer le fond d'une cellule sur 2 à l'aide d'une instruction If et de l'opérateur Mod (qui retourne le reste d'une division), aperçu :

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
La solution :
Sub exerciceBoucles()
Dim colonne As Integer, ligne As Integer
'Boucle des lignes
For ligne = 1 To 10
'Boucle des colonnes
For colonne = 1 To 10
Cells(ligne, colonne) = (ligne - 1) * 10 + colonne
'Coloration d'une cellule sur 2
If (ligne + colonne) Mod 2 = 0 Then 'Si le reste de la division par 2 = 0
Cells(ligne, colonne).Interior.Color = RGB(220, 220, 220)
End If
Next
Next
End Sub
La condition (ligne + colonne) Mod 2 = 0 est vraie si le reste de la division de (ligne + colonne) par 2 est égal à 0 (sachant que le reste de la division d'un nombre entier positif par 2 ne peut être que 0 ou 1).
Pour prendre un exemple plus simple, si l'objectif de l'exercice était de colorer les lignes paires (sans tenir compte des colonnes), la condition aurait été ligne Mod 2 = 0.