Partager via


Structures de contrôle imbriquées

Mise à jour : novembre 2007

Vous pouvez insérer des instructions de contrôle dans d'autres instructions de contrôle, par exemple un bloc If...Then...Else dans une boucle For...Next. Dans ce cas, l'instruction de contrôle est imbriquée dans une autre instruction de contrôle.

Niveaux d'imbrication

Dans Visual Basic, les structures de contrôle peuvent être imbriquées sur autant de niveaux que nécessaire. Il est courant de mettre en retrait le corps de chaque structure imbriquée afin d'accroître la lisibilité. L'éditeur d'environnement de développement intégré le fait automatiquement.

Dans l'exemple suivant, la procédure sumRows additionne les éléments positifs de chaque ligne de la matrice.

Public Sub sumRows(ByVal a(,) As Double, ByRef r() As Double)
    Dim i, j As Integer
    For i = 0 To UBound(a, 1)
        r(i) = 0
        For j = 0 To UBound(a, 2)
            If a(i, j) > 0 Then
                r(i) = r(i) + a(i, j)
            End If
        Next j
    Next i
End Sub

Dans l'exemple précédent, la première instruction Next ferme la boucle For interne et la dernière instruction Next ferme la boucle For externe.

De même, dans les instructions If imbriquées, les instructions End If s'appliquent automatiquement à l'instruction If précédente la plus proche. Les boucles Do imbriquées fonctionnent de la même manière, dans le sens où l'instruction Loop la plus profonde correspond à l'instruction Do la plus profonde.

Imbrication de genres de structures de contrôle différents

Vous pouvez imbriquer un genre de structure de contrôle dans un autre. L'exemple suivant utilise un bloc With à l'intérieur d'une boucle For Each et des blocs If imbriqués à l'intérieur du bloc With.

For Each ctl As System.Windows.Forms.Control In Me.Controls
    With ctl
        .BackColor = System.Drawing.Color.Yellow
        .ForeColor = System.Drawing.Color.Black
        If .CanFocus Then
            .Text = "Colors changed"
            If Not .Focus() Then
                ' Insert code to process failed focus.
            End If
        End If
    End With
Next ctl

Chevauchement de structures de contrôle

Vous ne devez pas faire en sorte que des structures de contrôle se chevauchent. Cela signifie que toute structure imbriquée doit être entièrement contenue dans la structure la plus profonde suivante. Par exemple, la disposition suivante est non valide car la boucle For se termine avant la fin du bloc With interne.

Imbrication non valide de structures For et With

Le compilateur Visual Basic détecte ces chevauchements de structures de contrôle et signale une erreur de compilation.

Voir aussi

Tâches

Comment : transférer un contrôle hors d'une structure de contrôle

Concepts

Structures de décision

Structures de boucle

Autres structures de contrôle

Autres ressources

Flux de contrôle en Visual Basic