You are on page 1of 25

La gestion des boucles dans Excel

par SilkyRoad (silkyroad.developpez.com)

Date de publication : 19/08/2007 Dernire mise jour :

Cet article prsente diffrents types de boucles utilisables dans Excel.

Test avec Excel2002 et 2007.

La gestion des boucles dans Excel par SilkyRoad (silkyroad.developpez.com)

I - Introduction II - For Each Next III - For Next IV - Do Loop V - While Wend VI - Les boucles rcursives VII - Arrter une boucle VIII - Conclusion IX - Remerciements X - Tlchargement

-2Les sources prsents sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.

La gestion des boucles dans Excel par SilkyRoad (silkyroad.developpez.com)

I - Introduction
En programmation, une boucle, aussi appele itration, permet d'effectuer une srie d'actions de faon rptitive.

Il existe plusieurs solutions pour crer une boucle:

* For Each Next: Boucle sur chaque objet d'une collection.

* For Next: Rpte une action le nombre de fois spcifi par un compteur.

* Do Loop: Itration pendant ou jusqu' ce qu'une condition soit remplie.

* While Wend: Rpte une action tant qu'une condition est vraie.

* Boucle rcursive: Cre une procdure qui s'appelle elle-mme pendant ou jusqu' ce qu'une condition soit remplie.

-3Les sources prsents sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.

La gestion des boucles dans Excel par SilkyRoad (silkyroad.developpez.com)

II - For Each Next


Ce type de boucle peut tre traduit par:

Pour chaque [lment] d'un [Ensemble] Srie d'actions [lment] suivant

Ici, [Ensemble] reprsente une collection.

L'architecture Excel est construite sous forme d'objets et de collections. C'est pour cette raison que le langage Visual Basic For Applications (VBA) est dit 'orient objet'. Chaque collection possde des objets qui peuvent eux mmes contenir d'autres collections: L'application possde une collection de classeurs. Chaque classeur possde une collection de feuilles. Chaque feuille peut contenir une collection de graphiques incorpors. ... etc ...

Dans ce schma, issu de l'aide Excel 2002, L'objet Application reprsente le niveau le plus lev.

Les lments en bleu sont des objets. Les lments en jaune peuvent contenir des objets ou des collections.

-4Les sources prsents sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.

La gestion des boucles dans Excel par SilkyRoad (silkyroad.developpez.com)

Le principe de fonctionnement de l'instruction For Each Next va donc consister boucler sur tous les objets d'une collection spcifique. Si la collection ne contient par d'objet ou quand tous les objets ont t parcourus, la boucle est ferme et l'excution continue sur la ligne de code, juste aprs l'instruction Next.

Ce premier exemple boucle sur les classeurs ouverts dans l'application Excel:

Vba
Sub BoucleClasseurs() 'Dfinit une variable qui va reprsenter un classeur chaque itration. Dim Wb As Workbook 'Boucle sur chaque classeur de l'application Excel For Each Wb In Application.Workbooks 'Ecrit le nom de chaque classeur dans la fentre d'excution Ctrl+G Debug.Print Wb.Name Next Wb End Sub

Vous noterez que Workbooks reprsente la collection de tous les classeurs, et Workbook dfinit un objet de cette collection pour chaque itration. D'une manire gnrale en VBA, le nom des collections est diffrenci du nom d'objets par un s plac la fin: Worksheets/Worksheet, ChartObjects/ChartObject ... etc ...

En reprenant le schma vu prcdemment, il est possible des crer des boucles imbriques qui vont descendre jusqu'au niveau de dtail le plus fin.

Ce nouveau code intervient sur la plage de cellules A1:A10, dans toutes les feuilles de tous les classeurs ouverts:

Vba
Sub BouclePlagesCellules() 'Dfinit une variable qui va reprsenter un classeur Dim Wb As Workbook 'Dfinit une variable qui va reprsenter une feuille de calcul Dim Ws As Worksheet 'Dfinit une variable qui va reprsenter une cellule Dim Cell As Range 'Boucle sur chaque classeur de l'application Excel For Each Wb In Application.Workbooks 'Boucle sur chaque feuille de chaque classeur For Each Ws In Wb.Worksheets 'Boucle sur chaque cellule de la plage A1:A10 For Each Cell In Ws.Range("A1:A10") 'Si la cellule contient la valeur 3, on multiplie la valeur par 2 If Cell.Value = 3 Then Cell.Value = Cell.Value * 2 Next Cell Next Ws Next Wb -5Les sources prsents sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.

La gestion des boucles dans Excel par SilkyRoad (silkyroad.developpez.com)

Vba
End Sub

Ce n'est pas une obligation pour le bon fonctionnement de la procdure, mais vous remarquez que chaque instruction Next est suivie du nom de la variable objet (Next Wb, Next Ws, Next Cell). Cette rgle d'criture amliore la relecture des codes volumineux et contenant de nombreuses boucles imbriques. De mme, utilisez l'indentation (dcalage des portions de macro par l'insertion de tabulations) pour amliorer la lisibilit du code.

Pour grer la sortie anticipe d'une boucle, utilisez l'instruction Exit For. Dans ce cas la procdure passe directement la ligne de code qui suit l'instruction Next.

L'instruction Exit For peut tre utilise: * Aprs la vrification d'une condition. * Lorsqu'une erreur se produit.

Exemple:

Vba
Sub BoucleFeuilles() Dim Ws As Worksheet 'Boucle sur les feuilles du classeur. For Each Ws In ThisWorkbook.Worksheets 'On sort de la boucle si le nom de la feuille est "Feuil2". If Ws.Name = "Feuil2" Then Exit For MsgBox Ws.Name Next Ws End Sub

-6Les sources prsents sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.

La gestion des boucles dans Excel par SilkyRoad (silkyroad.developpez.com)

III - For Next


Ce type de boucle peut tre traduit par:

De [Compteur] = [Numro de dpart] [Numro d'arrive] Srie d'actions [Compteur] suivant

L'instruction For Next permet de rpter des actions un nombre de fois prdfini. Vous devez spcifier une valeur de dbut [Numro de dpart] et une valeur de fin [Numro d'arrive]. La variable [compteur] va ensuite tre incrmente ou dcrmente chaque itration.

Vba
Sub Test_V01() Dim x As Integer 'La variable x va successivement prendre les valeurs 3 10 For x = 3 To 10 'Ecrit dans la plage de cellules A3:A10 '( Cells(3, 1) correspond la cellule A3, 'Cells(4, 1) correspond la cellule A4 ... etc... ) Cells(x, 1) = "Ligne " & x Next x End Sub

Par dfaut, le compteur est incrment d'une unit positive chaque itration. Ajoutez l'argument Step afin de personnaliser le pas d'incrmentation. Cette valeur peut tre positive ou ngative. Une fois que toutes les actions spcifies dans la boucle sont termines, la valeur de l'argument Step est ajoute la variable [compteur]. La boucle s'excute tant que la valeur [compteur] est infrieure ou gale la valeur de fin [Numro d'arrive].

Vba
Sub Test_V02() Dim x As Integer 'La variable x va successivement prendre les valeurs 3, 6 et 9 For x = 3 To 10 Step 3 'Ecrit dans les cellules A3, A6 et A9 Cells(x, 1) = "Ligne " & x Next x

-7Les sources prsents sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.

La gestion des boucles dans Excel par SilkyRoad (silkyroad.developpez.com)

Vba
End Sub

L'indication d'une valeur ngative pour l'argument Step, permet de dcrmenter le compteur de la valeur la plus leve vers la valeur la plus basse. Vous devez spcifier une valeur de fin [Numro d'arrive] infrieure la valeur de dbut [Numro de dpart]. La boucle s'excute tant que la valeur [compteur] est suprieure ou gale la valeur de fin [Numro d'arrive].

Vba
Sub Test_V03() Dim x As Integer 'La variable x va successivement prendre les valeurs 10, 7 et 4 For x = 10 To 3 Step -3 'Ecrit dans les cellules A10, A7 et A4 Cells(x, 1) = "Ligne " & x Next x End Sub

Nota: Lorsque vous utilisez l'argument Step pour dcrmenter un compteur, le type de variable (x dans les exemples prcdents) ne doit pas tre Byte, sinon vous obtiendrez un message d'erreur 'Dpassement de capacit'.

Pour grer la sortie anticipe d'une boucle, avant que le compteur n'atteigne la valeur de fin, utilisez l'instruction Exit For. Tout comme dans le type de boucle For Each Next, la procdure passe directement la premire ligne de code qui suit l'instruction Next. L'instruction Exit For peut tre utilise: * Aprs la vrification d'une condition. * Lorsqu'une erreur se produit.

Exemple:

Vba

-8Les sources prsents sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.

La gestion des boucles dans Excel par SilkyRoad (silkyroad.developpez.com)

Vba
Sub Test_V04() Dim x As Integer 'Boucle de 1 10 For x = 1 To 10 'On sort de la boucle si la cellule teste ne contient 'pas une donne numrique. If Not IsNumeric(Cells(x, 1)) Then Exit For 'Multiplie le contneu de la cellule par 2 Cells(x, 1) = Cells(x, 1) * 2 Next x End Sub

Vous pouvez bien entendu crer des boucles imbriques et associer dans une mme procdure les instructions For Next et For Each Next.

Vba
Sub TestBouclesImbriquees() Dim Ws As Worksheet Dim x As Integer, y As Integer 'Boucle sur toutes les feuilles du classeur For Each Ws In ThisWorkbook.Worksheets 'Cre une boucle de 1 10 For x = 1 To 10 'Cre une boucle de 1 7, avec un pas de 2. For y = 1 To 7 Step 2 'Ecrit dans les colonnes A, C, E et G, de la ligne 1 10 Ws.Cells(x, y) = "L" & x & "-C" & y Next y Next x Next Ws End Sub

Bien que ce ne soit pas toujours conseill, car cela complique la relecture du code, il est possible de modifier la valeur du compteur pendant les instructions de la boucle, entre chaque incrmentation. Exemple pour extraire les valeurs numriques dans une chane de caractres:

Vba
Sub extraireValeursNumeriques_DansChaine() Dim x As Integer, Nb As Integer Dim Cible As String, Resultat As String Dim Nombre As Single Cible = "12,3azerty23,5 67" 'il faut remplacer les virgules par des points

-9Les sources prsents sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.

La gestion des boucles dans Excel par SilkyRoad (silkyroad.developpez.com)

Vba
'Pour que fonction Val puisse reconnaitre les dcimales. Cible = Replace(Cible, ",", ".") 'Remplacement des espaces par un caractre Alphabtique, pour 'grer deux nombres qui se suivent. Cible = Replace(Cible, " ", "$") 'Boucle sur tous les caractres de la chane cible. '(La fonction Len renvoie le nombre de caractres contenu dans la variable "Cible"). For x = 1 To Len(Cible) 'Si le caractre est de type numrique If IsNumeric(Mid(Cible, x, 1)) Then 'Extrait la donne numrique de la chane Nombre = Val(Mid(Cible, x, Len(Cible) - x + 1)) Nb = Nb + 1 'Enregistre la valeur dans la variable de rsultat Resultat = Resultat & Nombre & vbLf '--- Force l'incmentation de la variable compteur (x) du nombre de caractres 'que contient la donne numrique extraite: x = x + Len(Str(Nombre)) - 1 ' --End If Next MsgBox "Il y a " & Nb & " valeurs numriques dans la chane:" & vbLf & Resultat End Sub

- 10 Les sources prsents sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.

La gestion des boucles dans Excel par SilkyRoad (silkyroad.developpez.com)

IV - Do Loop
Les boucles Do Loop, associes aux mots cls While et Until permettent de rpter une ou plusieurs actions pendant ou jusqu' ce qu'une condition soit remplie.

Les instructions peuvent tre associes de diffrentes manires:

Do Actions Loop While condition

Qui peut tre traduit par:

[Faire] Les actions effectuer [Recommencer] [Tant que] condition

Do While condition Actions Loop

Qui peut tre traduit par:

[Faire] [Tant que] condition Les actions effectuer [Recommencer]

Do Until condition
- 11 Les sources prsents sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.

La gestion des boucles dans Excel par SilkyRoad (silkyroad.developpez.com)

Actions Loop

Qui peut tre traduit par:

[Faire] [Jusqu' ce que] condition Les actions effectuer [Recommencer]

Do Actions Loop Until condition

Qui peut tre traduit par:

[Faire] Les actions effectuer [Recommencer] [Jusqu' ce que] condition

Vous pouvez utiliser les mots cls While et Until pour vrifier qu'une condition est remplie: * Avant d'excuter les actions contenues dans la boucle. * Aprs chaque excution de la boucle.

Do Loop peut excuter des blocs d'instructions un nombre de fois indfini. Il est donc important de s'assurer qu'une condition de sortie pourra tre remplie et que la boucle ne tournera pas sans fin.

- 12 Les sources prsents sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.

La gestion des boucles dans Excel par SilkyRoad (silkyroad.developpez.com)

Dans cet exemple, la bote de dialogue s'affiche tant que le mot de passe saisi est incorrect:

Vba
Sub SaisieMotDePasse() Dim Reponse As String 'Affiche la bote de dialogue tant que l'utilisateur n'a pas saisi '"mimi" (en minuscules). Do While Reponse <> "mimi" Reponse = InputBox("Saissez le mot de passe:", "Mot de passe") Loop MsgBox "OK, poursuite de la procdure." End Sub

Cette autre procdure incrmente la variable "i" d'une unit chaque itration, permettant ainsi de boucler sur les cellules de la colonne A jusqu' trouver la chane "DVP".

Vba
Sub Boucle_V01() Dim i As Integer Do i = i + 1 Loop While Cells(i, 1) <> "DVP" MsgBox "Trouv ligne " & i End Sub

Bien videmment, si le mot "DVP" n'existe pas, la procdure ne va jamais s'arrter. Pour y remdier vous pouvez ajouter l'instruction Exit Do qui permet d'anticiper la sortie de la boucle. Voici une modification de la macro prcdente afin de ne pas dpasser 1000 itrations, si le mot recherch n'est pas trouv.

Vba
Sub Boucle_V02() Dim i As Integer Do i = i + 1 'On sort aprs 1000 itrations. If i > 1000 Then Exit Do 'On rpte la boucle tant que le contenu de la cellule est diffrent

- 13 Les sources prsents sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.

La gestion des boucles dans Excel par SilkyRoad (silkyroad.developpez.com)

Vba
'de la chane "DVP". (la procdure est sensible la casse). Loop While Cells(i, 1) <> "DVP" 'Affiche un message en fonction du rsultat de la recherche. MsgBox IIf(Cells(i, 1) = "DVP", "Trouv ligne " & i, "Pas trouv") End Sub

Tout comme dans les autres mthodes, il est possible de crer des boucles imbriques. Voici une adaptation de l'exemple prcdent (On sort de la procdure aprs 1000 itrations si le mot recherch n'est pas trouv dans la colonne A):

Vba
Sub Boucle_V03() Dim Trouve As Boolean Dim x As Integer Trouve = False Do 'Boucle tant que le compteur x est infrieur 50 Do While x < 1000 'Incrmente le compteur. x = x + 1 'Vrifie le contenu de la cellule. If Cells(x, 1) = "DVP" Then 'Attribue la valeur Vrai si le mot est trouv. Trouve = True 'Anticipe la sortie de la boucle. Exit Do End If Loop 'Quitte la boucle si la variable la valeur True. Loop Until Trouve = True Or x = 1000 'Affiche un message en fonction du rsultat de la recherche. MsgBox IIf(Trouve = True, "Trouv ligne " & x, "Pas trouv") End Sub

Do Loop est aussi parfois utilise tant qu'un vnement est ou n'est pas survenu. Cet exemple attend la fin de chargement d'une page html avant de poursuivre la procdure (Toutefois il est toujours prfrable, quand c'est possible, d'utiliser les vnements spcifiques de l'application: DocumentComplete dans ce cas).

Vba

- 14 Les sources prsents sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.

La gestion des boucles dans Excel par SilkyRoad (silkyroad.developpez.com)

Vba
Sub piloterPageHtml() Dim IE As Object Dim T As Single T = Timer Set IE = CreateObject("internetExplorer.Application") IE.Visible = True 'Affiche une page html dans internet Explorer IE.navigate "http://office.developpez.com/" 'Attend la fin du chargement pour continuer la procdure. Do Until IE.readyState = 4 '(READYSTATE_COMPLETE) DoEvents Loop Debug.Print "Page charge en " & (Timer - T) & " secondes." End Sub

- 15 Les sources prsents sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.

La gestion des boucles dans Excel par SilkyRoad (silkyroad.developpez.com)

V - While Wend
L'instruction While Wend rpte une action tant qu'une condition est vraie.

While condition Actions Wend

Qui peut tre traduit par:

[Tant que] La condition vrifier Les actions effectuer [Rpter]

Si la condition est vraie, les actions indiques dans la procdure sont effectues. Quand l'instruction Wend est atteinte, la procdure revient sur l'instruction While et la condition est de nouveau vrifie. Si condition est toujours vraie, le processus est rpt. Si la condition est fausse, l'excution passe directement la premire ligne de code qui suit l'instruction Wend.

Vba
Sub Test_WhileWend() Dim i As Integer i = 1 'Boucle sur les cellules de la colonne A 'On sort de la boucle si la cellule teste (Cells(i, 1)) est vide While Not IsEmpty(Cells(i, 1)) 'Ecrit le contenu de la cellule dans la fentre d'excution. Debug.Print Cells(i, 1) 'Incrmente la variable d'une unit afin de tester la cellule suivante. i = i + 1 Wend End Sub

Remarque: While Wend est incluse dans VBA pour assurer une compatibilit ascendante. Privilgiez l'instruction Do Loop qui permet d'excuter une itration de manire plus structure et plus souple (CF aide Excel).

- 16 Les sources prsents sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.

La gestion des boucles dans Excel par SilkyRoad (silkyroad.developpez.com)

La mthode While wend ne possde pas d'instruction spcifique pour la sortie anticipe de boucle.

- 17 Les sources prsents sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.

La gestion des boucles dans Excel par SilkyRoad (silkyroad.developpez.com)

VI - Les boucles rcursives


Une procdure est dite rcursive lorsqu'elle s'appelle elle-mme.

Cette technique a des avantages mais peut aussi poser des problmes d'espace mmoire (De la mmoire supplmentaire est utilise chaque fois qu'une procdure s'appelle elle-mme). Une condition de sortie est galement ncessaire afin de terminer la fonction rcursive sinon elle peut boucler sur elle-mme l'infini.

Faites toujours vos premiers tests en mode pas pas afin de vous assurer: * Que la condition de sortie peut tre remplie. * Que la rptition des appels rcursifs n'puise pas l'espace mmoire disponible.

Pour optimiser les ressources mmoire: * Faites le mnage dans vos codes: Supprimez les variables inutiles. * Adaptez correctement les types de donnes. * Evitez d'utiliser les types de donnes Variant. * Vrifiez la structure de la procdure.

Vrifiez toujours pralablement si la rcursivit ne peut pas tre remplace par des boucles imbriques.

Cet exemple utilise la rcursivit pour boucler sur le rpertoire spcifi et tous ses sous-rpertoires, afin de lister le nom des fichiers qu'ils contiennent.

Vba
Option Explicit Sub TestListeFichiers() Dim Dossier As String 'Dfinit le rpertoire pour dbuter la recherche de fichiers. '(Attention ne pas indiquer un rpertoire qu contient trop de sous-dossiers ou de 'fichiers, sinon le temps de traitement va tre trs long). Dossier = "C:\Documents and Settings\mimi\dossier" 'Appelle la procdure de recherche des fichiers

- 18 Les sources prsents sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.

La gestion des boucles dans Excel par SilkyRoad (silkyroad.developpez.com)

Vba
ListeFichiers Dossier 'Ajuste la largeur des colonnes A:E en fonction du contenu des cellules. Columns("A:E").AutoFit MsgBox "Termin" End Sub

Sub ListeFichiers(Repertoire As String) ' 'Ncessite d'activer la rfrence "Microsoft Scripting RunTime" 'Dans l'diteur de macros (Alt+F11): 'Menu Outils 'Rfrences 'Cochez la ligne "Microsoft Scripting RunTime". 'Cluquez sur le bouton OK pour valider. Dim Dim Dim Dim Dim Fso As Scripting.FileSystemObject SourceFolder As Scripting.Folder SubFolder As Scripting.Folder FileItem As Scripting.File i As Long

Set Fso = CreateObject("Scripting.FileSystemObject") Set SourceFolder = Fso.GetFolder(Repertoire) 'Rcupre le numro de la dernire ligne vide dans la colonne A. i = Range("A65536").End(xlUp).Row + 1 'Boucle sur tous les fichiers du rpertoire For Each FileItem In SourceFolder.Files 'Inscrit le nom du fichier dans la cellule Cells(i, 1) = FileItem.Name 'Ajoute un lien hypertexte vers le fichier ActiveSheet.Hyperlinks.Add Anchor:=Cells(i, 1), _ Address:=FileItem.ParentFolder & "\" & FileItem.Name 'Indique la date de cration Cells(i, 2) = FileItem.DateCreated 'Indique la date de dernier acces Cells(i, 3) = FileItem.DateLastAccessed 'Indique la date de dernire modification Cells(i, 4) = FileItem.DateLastModified 'Nom du rpertoire Cells(i, 5) = FileItem.ParentFolder i = i + 1 Next FileItem

'--- Appel rcursif pour lister les fichier dans les sous-rpertoire ---. For Each SubFolder In SourceFolder.subfolders ListeFichiers SubFolder.Path Next SubFolder End Sub

- 19 Les sources prsents sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.

La gestion des boucles dans Excel par SilkyRoad (silkyroad.developpez.com)

VII - Arrter une boucle


Dans les chapitres prcdents, nous avons vu les instructions Exit For et Exit Do pour forcer la sortie d'une boucle en fonction de conditions. Nanmoins, il y a toujours un risque de crer une boucle infinie si la condition de sortie n'est jamais remplie.

En cas d'urgence, si une macro de veut plus s'arrter, utilisez simultanment les touches clavier: Ctrl + Pause. Vous pouvez aussi utiliser la touche Echap.

Cette solution affiche une fentre d'erreur 'Excution interrompue'. Cliquez sur le bouton Fin pour terminer la procdure.

Si vous souhaitez grer les touches Ctrl + Pause ou Echap par macro, utilisez la proprit EnableCancelKey: Cet exemple affiche un message personnalis la place de la fentre d'erreur, avant de sortir de la macro.

Vba
Sub GestionSortieBoucle_Echap() Dim x As Long On Error GoTo Fin Application.EnableCancelKey = xlErrorHandler 'Cre un boucle assez longue pour vous donner le temps de tester 'l'utilisation de la touche "Echap". For x = 1 To 50000 Cells(x, 1) = x Next x Fin: If Err.Number = 18 Then MsgBox "Opration annule." End Sub

- 20 Les sources prsents sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.

La gestion des boucles dans Excel par SilkyRoad (silkyroad.developpez.com)

VIII - Conclusion
La rptition d'actions va entrainer une dure de traitement plus ou moins longue en fonction: * Du type de boucle. * Du nombre d'itrations. * De la logique et de la structure de votre code. * De l'espace mmoire utilis.

Avant d'utiliser une boucle, vrifiez qu'Excel ne dispose pas d'outils spcifiques qui peuvent tre appliqus en lieu et place dans votre projet. Par exemple, pour supprimer tous les graphiques incorpors d'une feuille, plutt que de boucler sur les objets, il est possible d'utiliser directement: Vba
Feuil1.ChartObjects.Delete

Il convient de Choisir le type de boucle le mieux adapt votre projet. Faites des essais pour mesurer le temps d'excution dans diffrentes configurations et en testant diffrentes mthodes. Assurez vous qu'il existe au moins une condition qui permettra de terminer la boucle.

Si vous n'avez pas besoin de modifier directement les informations dans le classeur, l'utilisation des variables tableaux sera la mthode la plus rapide pour traiter des grands groupes de donnes.

Boucler sur une collection sera (gnralement) plus rapide que d'utiliser un compteur.

Evitez, quand c'est possible, les boucles rcursives.

Utilisez des types de donnes adapts au contenu de chaque variable. Evitez les variables Variant qui sont moins rapides traiter et ncessitent plus d'espace mmoire.

- 21 Les sources prsents sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.

La gestion des boucles dans Excel par SilkyRoad (silkyroad.developpez.com)

La structure du code entre 2 itrations a aussi sont importance: * Evitez au maximum les Select et Activate qui prennent beaucoup de temps. * Dsactivez la mise jour de l'cran. * Dsactivez si besoin le recalcul automatique (N'oubliez pas de le ractiver en fin de procdure). * Utilisez les sorties anticipes Exit For et Exit Do pour ne pas continuer une boucle alors que toutes les actions sont termines.

- 22 Les sources prsents sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.

La gestion des boucles dans Excel par SilkyRoad (silkyroad.developpez.com)

IX - Remerciements
Je remercie toute l'quipe Office, et particulirement Starec pour la relecture et la correction du tutoriel.

- 23 Les sources prsents sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.

La gestion des boucles dans Excel par SilkyRoad (silkyroad.developpez.com)

X - Tlchargement

- 24 Les sources prsents sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.

La gestion des boucles dans Excel par SilkyRoad (silkyroad.developpez.com)

- 25 Les sources prsents sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.

You might also like