« Macros-commandes VBA/Devenez un expert » : différence entre les versions

Contenu supprimé Contenu ajouté
réorganisation de contenu
réorganisation de contenu
Ligne 122 :
=== Les instructions de débranchement ===
 
Après exécution d'une ligne d'instruction VBA passe séquentiellement à l'exécution de la ligne suivante, ce: qui en limiterait très vite l'intérêt s'il n'existait pas des possibilités de débranchements. Il faudra donc, pour rompre ce chemin naturellement séquentiel, utiliser des instructions spéciales :
 
Range("E6").Select
a = 12
ActiveCell.FormulaR1C1 = a
Range("E7").Select
b = 13
ActiveCell.FormulaR1C1 = b
Range("E8").Select
ActiveCell.FormulaR1C1 = "=SUM(R[-2]C:R[-1]C)"
 
Ce qui en limiterait très vite l'intérêt s'il n'existait pas des possibilités de débranchements, il faudra donc, pour rompre ce chemin naturellement séquentiel, utiliser des instructions spéciales :
 
Débranchements directs ==> GOTO, EXIT, END, STOP, …
Ligne 129 ⟶ 140 :
Appels de procédures ==> CALL procCalculerTVA(prixHorsTaxe)
Appels de fonctions ==> prixToutesTaxesComprises = prixHorsTaxe + functionCalculerTVA(prixHorsTaxe)
 
==== Les instructions conditionnelles ====
 
Ces instructions sont utilisées lorsque le traitement à appliquer dépend d'une condition (d'un résultat de test), alors la suite séquentielle naturelle des instructions est rompue grâce à ce test.
 
{{Exemple
| contenu =
 
If couleur = "vert" Then accelerer()
 
}}
==> L'exemple appelle la procédure accelerer si la valeur de la variable couleur est vert.
 
{{Exemple
| contenu =
 
If couleur = "vert"
Then accelerer()
Else ralentir()
End If
 
}}
==> L'exemple appelle la procédure accelerer si la valeur de la variable couleur est vert ou ralentir si la valeur de la variable couleur n'est pas vert.
 
{{Exemple
| contenu =
 
If couleur = "vert"
Then accelerer()
Elsif couleur = "orange" Then ralentir()
Else Stopper()
End If
 
}}
==> L'exemple appelle la procédure accelerer si la valeur de la variable couleur est vert ou ralentir si la valeur de la variable couleur est orange ou stopper si la valeur de la variable couleur est n'est ni vert ni orange.
 
==== Les instructions de distinctions de cas ====
 
Cette instruction est utilisée lorsque le nombre de cas devient important rendant difficiles les instructions employant des conditionnelles imbriquées (if...if...)
 
Selon une valeur de variable
En cas d'une valeur alors effectuer un traitement
En cas d'une autre valeur alors effectuer un autre traitement
Dans tous les autres cas alors effectuer le traitement encore un autre traitement
Fin Selon
 
{{Exemple
| contenu =
<source lang=vb>
Select Case monFeuTricolore
Case "vert" : accelerer()
Case "orange" : ralentir()
Case else : stopper()
End Select
</source>
}}
==> L'exemple appelle les procédures <tt>accelerer</tt> ou <tt>ralentir</tt> ou <tt>stopper</tt> suivant la valeur de la variable monFeuTricolore, respectivement vert, orange, rouge.
 
{{attention|Impossible de placer plusieurs conditions après un <code>case</code>. Par exemple <code>Case False and False</code> peut très bien être considéré à tort comme <code>Case True</code>.}}
 
 
==== Les Instructions de boucles avec bornes connues ====
 
{{Définition
| contenu =
 
Une boucle permet de répéter un certain nombre de fois les instructions qui sont comprises entre ses bornes; cet outil, présent dans tous les langages informatiques, combiné à la vitesse exceptionnelle des processeurs autorise des calculs numériques quasiment infinis.
}}
 
'''Les boucles bornées''' le plus souvent utilisées sont les boucles de type « « For ... Next » », elles permettent de répéter un nombre de fois défini un bloc d'instructions, elles utilisent une variable qui est incrémentée ou décrémentée à chaque répétition.
 
{{Exemple
| contenu =
 
For i=1 to 10
 
Range("A1").Offset(i - 1) = 3 * i
 
Next i
}}
==> L'exemple écrit la table des trois dans la plage de cellule "A1:A10". La variable i s'incrémente de 1 à chaque tour de boucle, c'est-à-dire prend successivement les valeurs 1, 2, 3, … , 9, 10. Arrivée à la valeur 10, la boucle s'arrête.
 
 
D'autres boucles bornées sont les boucles de type « « ForEach ... Next » ».
Elles permettent de répéter un bloc d'instructions pour chacun des objets appartenant à un ensemble : elles utilisent une variable objet qui sélectionne un par un les objets de l'ensemble (à chaque tour).
 
{{Exemple
| contenu =
 
For Each cellule In Selection
 
cellule.Font.Color = RGB(0, 255, 0)
 
Next
}}
==> L'exemple colorie la police de chaque cellule de la plage sélectionnée. La variable cellule parcourt une par une toutes les cellules sélectionnées et leur donne un fond vert. Arrivée à la dernière cellule de la sélection, la boucle s'arrête.
 
 
==== Les Instructions de boucles avec bornes inconnues ====
 
'''Les boucles non bornées''' le plus souvent utilisées sont les boucles de type « « While … Wend » », elles permettent de répéter un nombre de fois indéfini un bloc d'instructions, elles utilisent une condition qui est testée au début de chaque répétition.
 
{{Exemple
| contenu =
 
While not isEmpty(cellule)
 
ligne = ligne + 1
 
cellule = Range("A1").Offset(ligne - 1)
 
cellule.Interior.Color = RGB(255, 0, 255)
 
Wend
}}
==> L'exemple colorie l'intérieur de toutes les cellules non vides de la colonne A en violet. La boucle s'arrête lorsque la cellule en cours est vide.
 
D'autres boucles non bornées sont les boucles de type « « Do … Loop until » ».
Elles permettent de répéter un nombre de fois indéfini un bloc d'instructions. Elles utilisent une condition qui est testée à la fin de chaque répétition.
 
{{Exemple
| contenu =
 
Do
reponse = InputBox("Entrer un nombre entier à cumuler dans votre trésor")
tresor = tresor + reponse
Loop Until reponse = 0
}}
==> L'exemple cumule des nombres saisis, la boucle s'arrête lorsque la réponse est 0.
 
== Erreurs et débogage ==
Ligne 160 ⟶ 300 :
À chaque arrêt, les données manipulées peuvent être inspectées pour vérifier leur état