Recherche…


Sélectionner un cas

Select Case peut être utilisé lorsque plusieurs conditions différentes sont possibles. Les conditions sont vérifiées de haut en bas et seul le premier cas correspondant sera exécuté.

Sub TestCase()
    Dim MyVar As String

    Select Case MyVar    'We Select the Variable MyVar to Work with
        Case "Hello"     'Now we simply check the cases we want to check
            MsgBox "This Case"
        Case "World"
            MsgBox "Important"
        Case "How"
            MsgBox "Stuff"
        Case "Are"
            MsgBox "I'm running out of ideas"
        Case "You?", "Today"  'You can separate several conditions with a comma
            MsgBox "Uuuhm..." 'if any is matched it will go into the case
        Case Else             'If none of the other cases is hit
            MsgBox "All of the other cases failed"
    End Select

    Dim i As Integer
    Select Case i
        Case Is > 2 '"Is" can be used instead of the variable in conditions.
            MsgBox "i is greater than 2"
        'Case 2 < Is '"Is" can only be used at the beginning of the condition.
        'Case Else is optional
    End Select
End Sub

La logique du bloc Select Case peut être inversée pour prendre en charge également le test de différentes variables. Dans ce type de scénario, nous pouvons également utiliser des opérateurs logiques:

Dim x As Integer
Dim y As Integer

x = 2
y = 5

Select Case True
    Case x > 3
        MsgBox "x is greater than 3"
    Case y < 2
        MsgBox "y is less than 2"
    Case x = 1
        MsgBox "x is equal to 1"
    Case x = 2 Xor y = 3
        MsgBox "Go read about ""Xor"""
    Case Not y = 5
        MsgBox "y is not 5"
    Case x = 3 Or x = 10
        MsgBox "x = 3 or 10"
    Case y < 10 And x < 10
        MsgBox "x and y are less than 10"
    Case Else
        MsgBox "No match found"
End Select

Les instructions de cas peuvent également utiliser des opérateurs arithmétiques. Lorsqu'un opérateur arithmétique est utilisé avec la valeur Select Case , il doit être précédé du mot Is clé Is :

Dim x As Integer

x = 5

Select Case x
    Case 1
        MsgBox "x equals 1"
    Case 2, 3, 4
        MsgBox "x is 2, 3 or 4"
    Case 7 To 10
        MsgBox "x is between 7 and 10 (inclusive)"
    Case Is < 2
        MsgBox "x is less than one"
    Case Is >= 7
        MsgBox "x is greater than or equal to 7"
    Case Else
        MsgBox "no match found"
End Select

Pour chaque boucle

La construction de boucle For Each est idéale pour itérer tous les éléments d’une collection.

Public Sub IterateCollection(ByVal items As Collection)

    'For Each iterator must always be variant
    Dim element As Variant

    For Each element In items
        'assumes element can be converted to a string
        Debug.Print element
    Next

End Sub

Utilisez For Each lors de l'itération de collections d'objets:

Dim sheet As Worksheet
For Each sheet In ActiveWorkbook.Worksheets
    Debug.Print sheet.Name
Next

Eviter For Each lors de itérations de tableaux; une boucle For offrira des performances nettement meilleures avec les tableaux. À l'inverse, une boucle For Each offrira de meilleures performances lors de l'itération d'une Collection .

Syntaxe

For Each [item] In [collection]
    [statements]
Next [item]

Le mot clé Next peut éventuellement être suivi de la variable iterator; Cela peut aider à clarifier les boucles imbriquées, bien qu'il existe de meilleurs moyens de clarifier le code imbriqué, tel que l'extraction de la boucle interne dans sa propre procédure.

Dim book As Workbook
For Each book In Application.Workbooks

    Debug.Print book.FullName

    Dim sheet As Worksheet
    For Each sheet In ActiveWorkbook.Worksheets
        Debug.Print sheet.Name
    Next sheet
Next book

Faire une boucle

 Public Sub DoLoop()
    Dim entry As String
    entry = ""
    'Equivalent to a While loop will ask for strings until "Stop" in given
    'Prefer using a While loop instead of this form of Do loop
    Do While entry <> "Stop"
        entry = InputBox("Enter a string, Stop to end")
        Debug.Print entry
    Loop

    'Equivalent to the above loop, but the condition is only checked AFTER the
    'first iteration of the loop, so it will execute even at least once even 
    'if entry is equal to "Stop" before entering the loop (like in this case)
    Do
        entry = InputBox("Enter a string, Stop to end")
        Debug.Print entry
    Loop While entry <> "Stop"

    
    'Equivalent to writing Do While Not entry="Stop"
    '
    'Because the Until is at the top of the loop, it will
    'not execute because entry is still equal to "Stop"
    'when evaluating the condition
    Do Until entry = "Stop"
        entry = InputBox("Enter a string, Stop to end")
        Debug.Print entry
    Loop

    'Equivalent to writing Do ... Loop While Not i >= 100
    Do
        entry = InputBox("Enter a string, Stop to end")
        Debug.Print entry
    Loop Until entry = "Stop"
End Sub

En boucle

'Will return whether an element is present in the array
Public Function IsInArray(values() As String, ByVal whatToFind As String) As Boolean
    Dim i As Integer
    i = 0

    While i < UBound(values) And values(i) <> whatToFind
        i = i + 1
    Wend
    
    IsInArray = values(i) = whatToFind
End Function

Pour la boucle

La boucle For est utilisée pour répéter la section de code incluse un nombre de fois donné. L'exemple simple suivant illustre la syntaxe de base:

Dim i as Integer           'Declaration of i
For i = 1 to 10            'Declare how many times the loop shall be executed
    Debug.Print i          'The piece of code which is repeated
Next i                     'The end of the loop

Le code ci-dessus déclare un entier i . La boucle For attribue à i toutes les valeurs comprises entre 1 et 10, puis exécute Debug.Print i , c'est-à-dire que le code imprime les numéros 1 à 10 dans la fenêtre immédiate. Notez que la variable de boucle est incrémentée par l'instruction Next , c'est-à-dire après l'exécution du code inclus par opposition à avant son exécution.

Par défaut, le compteur sera incrémenté de 1 à chaque exécution de la boucle. Cependant, une Step peut être spécifiée pour modifier le montant de l'incrément comme un littéral ou la valeur de retour d'une fonction. Si la valeur de départ, la valeur finale ou la valeur de Step est un nombre à virgule flottante, elle sera arrondie à la valeur entière la plus proche. Step peut être une valeur positive ou négative.

Dim i As Integer
For i = 1 To 10 Step 2
    Debug.Print i       'Prints 1, 3, 5, 7, and 9
Next

En général, une boucle For serait utilisée dans les situations où elle est connue avant que la boucle ne commence à exécuter le code joint (sinon, une boucle Do ou While peut être plus appropriée). En effet, la condition de sortie est corrigée après la première entrée en boucle, comme le montre ce code:

Private Iterations As Long              'Module scope

Public Sub Example()
    Dim i As Long
    Iterations = 10
    For i = 1 To Iterations
        Debug.Print Iterations     'Prints 10 through 1, descending.
        Iterations = Iterations - 1
    Next
End Sub

Une boucle For peut être sortie plus tôt avec l'instruction Exit For :

Dim i As Integer

For i = 1 To 10
    If i > 5 Then
        Exit For
    End If
    Debug.Print i       'Prints 1, 2, 3, 4, 5 before loop exits early.
Next


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow