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 :

cellules 1 100 boucles suite

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 :

cellules ligne 1 boucles suite

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 :

10 lignes boucles suite

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

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 :

carre 1 100 boucles suite

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

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 :

carre 10 quadrille vba boucles suite

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

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.