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

Contenu supprimé Contenu ajouté
réorganisation de contenu
Ligne 110 :
 
 
=== Les arguments des procédures ===
 
Début
* déclarations
* séquences
* actions
Fin
 
 
Une procédure effectue un traitement (exécute une série d'instructions) mais ne retourne aucune valeur.
 
 
'''Les procédures sans arguments'''
 
Exemple :
 
Sub afficherMessageBonjour( )
MsgBox "Bonjour à tous !"
End Sub
 
Les passages de paramètres
* Appel de la procédure : afficherMessageBonjour => Résultat affiché à l’écran : Bonjour à tous !
 
Les arguments passés aux procédures sont aussi nommés paramètres
 
'''Les procédures avec arguments (variables nécessaires au traitement de la procédure)'''
Ligne 138 ⟶ 118 :
Exemple :
 
Sub afficherMessageCible (cible As String)
MsgBox "Bonjour à " & cible
End Sub
 
Les passages de paramètres
* Appel de la procédure : afficherMessageCible "ToiKeuJème" => Résultat affiché à l’écran : Bonjour à ToiKeuJème
 
=== Les arguments et le résultat des fonctions ===
 
Les arguments passés aux fonctions sont aussi nommés paramètres
=== Les fonctions ===
 
'''Les fonctions avec arguments (variables nécessaires au traitement de la fonction)'''
Début
* déclarations
* séquences
* actions
* valeur de retour
Fin
 
Function calculerBenefice(recettes As Double, depenses As Double) As Double
Une fonction, comme une procédure, effectue un traitement (exécute une série d'instructions) et de plus retourne une valeur à la fin de ce traitement, cette valeur pouvant être exploitée par une autre procédure, fonction ou application hôte (pour EXCEL la fonction VBA apparait dans les fonctions personnalisées).
 
'''Les arguments'''
 
Variables nécessaires au traitement de la fonction.
Function calculerBenefice(recettes As Double, depenses As Double) As Double
return (recettes-depenses)
End Function
 
'''LesLe résultatsrésultat'''
 
Appel de la fonction : monBenefice=calculerBenefice(12000, 11500) => Résultat : la variable monBenefice prend la valeur 500
 
=== 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 :
 
=== Les instructions séquentielles ===
 
Le langage VBA, comme tous les langages informatiques ou automatiques, après exécution d'une ligne d'instruction 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 :
 
Débranchements directs ==> GOTO, EXIT, END, STOP, …
Ligne 180 ⟶ 148 :
Appels de procédures ==> CALL procCalculerTVA(prixHorsTaxe)
Appels de fonctions ==> prixToutesTaxesComprises = prixHorsTaxe + functionCalculerTVA(prixHorsTaxe)
 
 
Les instructions VBA sont exécutées une par une
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)"
 
 
=== 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 ===
 
{{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'''
 
 
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 boucles non bornées'''
 
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 363 ⟶ 179 :
À chaque arrêt, les données manipulées peuvent être inspectées pour vérifier leur état