Boucles

From Apache OpenOffice Wiki
Jump to: navigation, search
doc OOo
Book.png


Une boucle répète l'exécution d'un bloc de code un nombre de fois donné. Certaines boucles peuvent également se répéter indéfiniment.

For...Next

La boucle For...Next effectue un nombre de passages déterminé. Le compteur de la boucle définit le nombre de fois qu'elle sera répétée. Dans l'exemple suivant, la variable I est le compteur de la boucle, avec une valeur initiale de 1. Le compteur est incrémenté de 1 à la fin de chaque passage. Lorsque la variable I vaut 10, la boucle s'arrête.

Dim I 
For I = 1 To 10
  ' ...  Inner part of loop 
Next I

Pour que le compteur de la boucle soit incrémenté d'une valeur supérieure à 1 à chaque passage, utilisez la fonction Step :

Dim I 
For I = 1 To 10 Step 0.5
  ' ... Inner part of loop 
Next I

Dans l'exemple précédent, le compteur est incrémenté de 0,5 à la fin de chaque passage, et la boucle est exécutée 19 fois.

Vous pouvez également utiliser des valeurs de pas négatives :

Dim I 
For I = 10 To 1 Step -1
  ' ... Inner part of loop 
Next I

Dans cet exemple, le compteur commence à 10 et décroît de 1 à chaque passage jusqu'à atteindre la valeur 1.

L'instruction Exit For permet de sortir prématurément d'une boucle For. Dans l'exemple suivant, la boucle se termine au cinquième passage :

Dim I 
For I = 1 To 10 
  If I = 5 Then 
    Exit For
  End If
  ' ... Inner part of loop 
Next I

For Each

La variante de la boucle For Each...Next de VBA est prise en charge dans Apache OpenOffice Basic. Contrairement aux boucles For...Next, les boucles For Each ne font pas appel à un compteur explicite. Une boucle For Each indique au programme d'appliquer une opération à tous les éléments d'un jeu de données et non pas d'effectuer une opération n fois. Exemple :

Const d1 = 2
Const d2 = 3
Const d3 = 2
Dim a(d1, d2, d3)
For Each i In a()
    ' ... Inner part of loop 
Next i

Do...Loop

L'instruction Do...Loop n'est pas liée à un nombre de passages fixe. En revanche, la boucle Do...Loop est répétée jusqu'à ce qu'une certaine condition soit remplie. Il existe quatre versions de la boucle Do...Loop. Dans les deux premiers exemples, il est possible que le code défini dans la boucle ne soit pas du tout exécuté (logique "exécuter 0 fois"). Dans les derniers exemples, le code est exécuté au moins une fois (les exemples suivants utilisent la condition A > 10) :

  1. La version Do While...Loop:
    Do While A > 10
       ' ... loop body
    Loop
    détermine avant chaque passe si la condition spécifiée après While est vraie et, si c'est le cas, exécute la boucle.
  2. La version Do Until...Loop:
    Do Until A > 10
      ' ... loop body
    Loop
    exécute la boucle tant que la condition spécifiée après Until reste fausse.
  3. La version Do...Loop While:
    Do
      ' ... loop body
    Loop While A > 10
    ne vérifie la condition qu'après la première passe de la boucle et se termine lorsque la condition après While est fausse.
  4. La version Do...Loop Until:
    Do
      ' ... loop body
    Loop Until A > 10
    vérifie également la condition après la première passe, mais se termine lorsque la condition après Until est vraie.

Tout comme pour la boucle For...Next, il est possible de sortir de la boucle Do...Loop avant la fin. La commande Exit Do permet d'interrompre une boucle à tout endroit.

Do 
  If A = 4 Then
    Exit Do
  End If
  ' ... loop body
Loop While A > 10

Exemple de programme : tri à l'aide de boucles imbriquées

Les boucles ont diverses fonctions. Elles permettent notamment d'effectuer des recherches dans des listes, de retourner des valeurs ou d'exécuter des tâches mathématiques complexes. L'exemple suivant constitue un algorithme qui trie une liste par nom à l'aide de deux boucles.

Sub Sort
  Dim Entry(1 To 10) As String
  Dim Count As Integer
  Dim Count2 As Integer
  Dim Temp As String
 
  Entry(1) = "Patty"
  Entry(2) = "Kurt"
  Entry(3) = "Thomas"
  Entry(4) = "Michael"
  Entry(5) = "David"
  Entry(6) = "Cathy"
  Entry(7) = "Susie"
  Entry(8) = "Edward"
  Entry(9) = "Christine"
  Entry(10) = "Jerry"
 
  For Count = 1 To 9
    For Count2 = Count + 1 To 10
      If Entry(Count) > Entry(Count2) Then
        Temp = Entry(Count)
        Entry(Count) = Entry(Count2)
        Entry(Count2) = Temp
      End If
    Next Count2
  Next Count
 
  For Count = 1 To 10
    Print Entry(Count)
  Next Count
 
End Sub

Les valeurs sont interverties deux par deux plusieurs fois, jusqu'à ce qu'elles se trouvent classées par ordre croissant. Comme des bulles, les variables remontent peu à peu vers la bonne position. C'est pourquoi cet algorithme est connu sous le nom de tri à bulles.

Content on this page is licensed under the Public Documentation License (PDL).
Personal tools