Visual Basic For Applications
Toutes les boucles VBA !

Maîtrisez les différentes boucles VBA pour devenir un vrai pro du langage et élargir les possibilités qu’Excel vous offre.

Une boucle en VBA ?

Les boucles sont une partie inévitable du langage VBA. Elles permettent par exemple de parcours à travers plusieurs éléments ou de faire des compteurs.

Les boucles VBA offrent la possibilité de rendre un code moins répétitif et plus dynamique en s’adaptant aux nombres d’éléments (cellules, feuilles, etc…).

Maîtriser au minimun l’une d’entre elle est donc indispensable pour construire des codes pertinent et progresser dans le langage VBA.

Plusieurs types ou syntaxes de boucle VBA peuvent être utilisées mais le résultat final ne change pas vraiment : les boucles que vous choisissez dépendent surtout de celles avec lesquelles vous allez être le plus à l’aise.

Les boucles sont constituées d’une instruction de début et de fin et d’une condition. Il est également possible d’ajouter une instruction permettant de sortir prématurément de la boucle en question.

Conseil

Concentrez-vous sur un type de boucle (par exemple la Do While Loop). Une fois seulement que vous la maîtrisez, testez les autres.

Les différentes boucles

Pour illustrer chaque boucle, nous allons utiliser le même exemple :

  • La variable n est un nombre (integer).
  • La boucle s’arrête quand n est égal à 10.
  • Chaque passage dans la boucle ajoute 1 à n.

Les boucles Loop

Les boucles Loop sont les plus simples et efficaces à utiliser. Elles permettent de répéter des opérations jusqu’à ce qu’une condition soit remplie. Il existe plusieurs types boucles Loop.

L’instruction ainticiper une sortie des boucles VBA Do est la suivante :

Exit Do

Do While Loop

A notre sens, la boucle la plus simple à utiliser. Cette boucle continue tant qu’une condition n’est pas remplie.

Sub do_while_loop()
 
Do while n<10
 
	'l'instruction vient ici.
 
	n=n+1
 
Loop

Do Loop While

Comme Do While Loop cette boucle est assez simple à utiliser. La condition s’écrit cependant à la fin de la boucle.

Sub do_loop_while()
 
Do
 
	'l'instruction vient ici.
 
	n=n+1
 
loop while n<10
Attention

Bien mettre le compteur à la fin de l’instruction juste avant la commande Loop While. Dans le cas contraire, la boucle risque de s’exécuter une fois de trop par rapport à la condition souhaitée puisque le contrôle s’effectue en toute fin de boucle.

Do Until Loop

Légérement différente des deux premières, cette boucle continue jusqu’à ce qu’une condition soit remplie. Ici, elle s’arrête aussitôt que n = 10.

Sub do_until_loop()
 
Do until n=10
 
	'l'instruction vient ici.
 
	n=n+1
 
Loop

Les boucles For

Les boucles For ont un fonctionnement légèrement différents par rapport aux autres. Elles sont particulièrement utiles si vous devez naviguer entre les feuilles ou classeurs.

L’instruction pour sortir prématurément de ce type de boucle est la suivante :

Exit For

For Next

Ici, la boucle est répété 10 fois : la variable n étant définie comme égale à 1 après le For et limitée à 10 après le To.

Sub for_next()
 
For n=1 to 10
 
	'l'instruction vient ici.
 
Next

Il est possible d’ajouter l’instruction Step (un pas en français) qui permet de déterminer la valeur qui incrémente votre variable initiale.

Il est également possible de faire fonctionner la boucle en « compte à rebour » en indiquant un Step négatif.

Dans l’exemple ci-dessous, la boucle va commencer à 10 et soustraire 2 à chaque passage jusqu’à 0.

Sub for_next_step()
 
For n=10 to 0 Step -2
 
	'l'instruction vient ici.
 
Next

For Each Next

La boucle For Each est particulièrement puissante. Elle permet de parcourir automatiquement tous les éléments de la classe (tableaux ou objets) : il n’est donc pas nécessaire d’utiliser de compteur.

Sub for_each_next()
 
 
Dim sh As Worksheet 'déclaration de la variable sh objet feuille (Worksheet).
 
For Each sh in Worksheets 'Worksheets est la collection correspondant à l'ensemble des feuilles du classeur.
 
	'l'instruction vient ici.
 
Next sh

While Wend

Sub while_wend()
 
While n<10
 
'l'instruction vient ici.
 
	n=n+1
 
Wend

Elle répète une action tant que la condition est vraie. Si la condition est fausse, le code passe directement à la ligne suivant le wend.
Cette boucle permet d’assurer la compatibilité ascendante. C’est-à-dire la comptabilité du code avec les nouvelles versions ou les versions futures d’Excel.

Attention

Il n’y a pas d’instruction existante permettant de sortir prématurément de cette boucle.

Imbriquer des boucles VBA

Il peut rapidement être nécessaire d’utiliser une boucle à l’intérieur d’une autre boucle. L’imbrication de boucle peut vite devenir compliquée car elle peut rendre un code moins lisible.

L’imbrication peut se faire en utilisant le même type de boucle ou des boucles différentes.

Une instruction de sortie anticipée d’une boucle n’affectera que la boucle dans laquelle elle est située : il faut mettre autant d’instruction de sortie pour sortir de toutes les boucles.

Dans l’exemple ci-dessous, la macro parcours toutes les feuilles de votre classeur et numérote dans chaque feuille, les lignes de 1 à 10.

Sub boucles_imbriquées()
 
Dim sh As Worksheet 'déclaration de la variable sh objet feuille (Worksheet).
Dim n as integer
 
For Each sh in Worksheets 'Première boucle.
 
	n=1
 
	Do while n<=10 'seconde boucle'
 
		cells(n,1).value = n
 
		n=n+1
 
	loop
 
Next sh
Astuce

Pensez à bien indenter votre code pour le rendre le plus lisible possible. L’indentation est l’ajout de tabulations dans le code afin d’avoir une compréhension plus simple. Ajoutez une indentation supplémentaire pour chaque boucle imbriquée.

Lire notre prochain article sur la fonction indispensable If.

Notez nous !
[Moyenne : 4.7]
2018-05-07T16:40:46+00:00