Boucles, branchements


·
 For… Next (pour tout truc… truc suivant)
Sub nombres_pairs()
For truc = 1 to 5
Msgbox(2*truc)
Next
End Sub

For each…in…. next permet de balayer tous les objets d'une collection

Par exemple

For each feuille in ActiveWorkbook.Sheets…

For each cellu in Range("machin").Cells


·
 If… Then… Else… End If (si…alors…sinon…)
truc = InputBox ("valeur de truc ?")
If truc <5 Then
MsgBox ("truc est inférieur à 5")
Else
Msgbox ("truc est supérieur à 5")
End If

Ou bien
If truc<5 then MsgBox("truc est inférieur à 5")

On peut également utiliser
- Do….Loop Until (boucler jusqu'à ce que…)
- ou Do…Loop While (boucler tant que…)
- ou While…Wend (tant que…)
 
·
 Sortie de boucle ou de programme : Exit For, Exit Sub
·
 GoTo, étiquettes
GoTo oriente l'exécution de la macro vers une étiquette, ligne de macro repérée par un nom d'étiquette suivi de ":"

étiq:
MsgBox("Bonjour")
GoTo étiq

Donne une boucle sans fin d'où il est difficile de sortir ! (taper CTRL + ATTN)
 
·
 Gestion d’erreur
On error GoTo réf renvoie à l'étiquette réf
Or error GoTo 0 annule tous les "On Error" antérieurs
Débogage
En cas d'erreur à l'exécution, un message oriente vers le débogueur qui surligne en jaune la ligne posant problème.
Pour sortir du débogueur, cliquer sur g dans la barre d'outils VBA.
 
Exemples de boucle :

®
 Dans une feuille Excel, diviser tous les chiffres par 6.55957 Sub Euro_bis()
Application.Calculation = xlManual
For Each cellule In Cells
If IsNumeric(cellule) And cellule.Value <> "" Then cellule.Value = cellule.Value / 6.55957
Next
Application.Calculation = xlCalculationAutomatic
End Sub
Pour éviter tout problème avec les cellules liées par des formules, on passe en mode de calcul manuel (Outil / Option / Calcul / Manuel) par la ligne Application.Calculation = xlManual.
Pour chaque cellule de la feuille (For Each cellule In Cells), on divise la valeur par 6.55957 (cellule.Value = cellule.Value / 6.55957) après avoir pris soin de vérifier que la cellule contient un nombre (If IsNumeric(cellule)) et n'est pas vide (And cellule.Value <> "").
A l'usage, la macro s'avère très longue. Elle doit balayer toute la feuille de calcul et en tester toutes les cellules.
Pour sélectionner uniquement la zone contenant des données, rechercher la dernière cellule non vide (Edition / Atteindre / Cellules / Dernière Cellule) par
Cells.SpecialCells(xlCellTypeLastCell).Select

puis la plage comprise entre cette cellule (ActiveCell) et la cellule A1 (cells(1,1) par :
Range(Cells(1, 1), ActiveCell).Select
La macro ainsi modifiée est beaucoup plus rapide. Sub Euro()
Cells.SpecialCells(xlCellTypeLastCell).Select
Range(Cells(1, 1), ActiveCell).Select
Application.Calculation = xlManual
For Each cellule In Selection
If IsNumeric(cellule) And cellule.Value <> "" Then cellule.Value = cellule.Value / 6.55957
Next
Application.Calculation = xlCalculationAutomatic
End Sub
®  Extraire le nom d'un fichier de son chemin d'accès :
Si le nom complet est "c:\mes documents\zaza\miaou.xls", on peut estraire de cette chaine de caractères le nom du fichier en retirant les caractères les plus à gauche un par un jusqu'à ce que la chaine ne contienne plus de "\" : Function petitnom(chemfich)
petitnom = chemfich
Do While InStr(petitnom, "\") > 0
petitnom = Right(petitnom, Len(petitnom) - 1)
Loop
End Function
While InStr(petitnom, "\") > 0 repère la présence de "\" dans la chaine petitnom.
petitnom = Right(petitnom, Len(petitnom) - 1) retire un caractère à gauche de petitnom
La fonction petitnom peut être utilisée comme une fonction standard dans une page Excel : il suffit d'écrire
=petitnom("c:\mes documents\zaza\miaou.xls")
pour obtenir "miaou.xls"

®
 Exemple dans Word
La macro change la couleur de chaque lettre de la sélection : Sub couleur_word()
num = 1
For Each caracter In Selection.Characters
ncolor = num + 1 - 17 * Int((num + 1) / 17)
caracter.Font.ColorIndex = ncolor
caracter.Font.Size = num
num = num + 1
Next
End Sub
Autres exemples de boucles
®
 logoVBA, faire tourner un graphique
®
 étiquettes de graphiques,
®
 courbe valorisation d'entreprise en fonction de paramètres (scénarios multiples)
®
 Evolution du TRI avec le temps

 

>>>