Caractéristiques communes aux langages de programmation
Les langages de programmation de type Basic de Calc (OOo Basic) et d'Excel (VBA) possèdent des caractéristiques communes (ainsi que des différences certaines). Nous allons ici examiner leurs points communs.
Pendant l'exécution d'un programme, les informations fournies par l'utilisateur, renvoyées par une fonction ou définies par le programmeur doivent être stockées temporairement afin d'être utilisées ultérieurement.
Une variable est un emplacement de stockage temporaire en mémoire vive d'une information employée par une procédure. Certaines procédures obtiennent une donnée différente à chaque lancement (par exemple, s'il s'agit de la date courante).
Comme il n'est pas possible de poser une question tout en effectuant autre chose, vous procédez par étape et devez temporairement mettre cette donnée de côté : vous la stockez dans une variable. Un nom de variable répond à certaines exigences dépendant du langage considéré, mais les contraintes les plus fréquentes sont les suivantes :
Le mode d'une déclaration de variable dépend du langage concerné. C'est souvent similaire à la syntaxe suivante :
Dim nom_variable As type de variable
Vous lui affectez une valeur comme suit :
nom_variable = expression
Le langage Basic étant assez souple, il n'est généralement pas obligatoire de déclarer explicitement une variable. Vous pourriez simplement employer la variable en lui affectant une valeur, avec l'instruction précédente.
En ce cas, c'est le langage qui détermine automatiquement le type de variable adéquat. Cette pratique est toutefois déconseillée, et mieux vaut toujours déclarer explicitement les variables. Vous pouvez d'ailleurs imposer des déclarations explicites en ajoutant en tête de votre module l'instruction :
Option explicit
Le langage génère une erreur si vous tentez d'employer une variable non préalablement déclarée.
Reportez-vous pour plus de précision à la documentation de votre produit.
Comme une variable, une constante est une zone de stockage temporaire d'une information utilisée dans une procédure. Contrairement toutefois à une variable et comme l'implique son nom, une constante ne change jamais. Imaginez une procédure dans laquelle une longue chaîne de texte apparaisse à plusieurs reprises. Plutôt que de devoir saisir ce texte dans la procédure partout où il doit apparaître, vous l'affecterez à une constante dont le nom sera bien plus concis. Vous n'avez ensuite plus qu'à entrer le nom de la constante pour employer cette chaîne de texte. Mieux encore, si vous étiez amené à devoir la modifier, vous n'aurez à le faire qu'en un emplacement (définition de la constante) et non dans toutes les lignes où elle est employée.
Les constantes doivent être déclarées. La valeur d'une constante est définie à l'aide d'une instruction de déclaration. Chaque déclaration de constante commence (avec Excel et Calc) par le mot clé Const. Les constantes doivent être déclarées au commencement de la procédure, généralement juste sous les instructions Sub ou Function. Elles sont souvent écrites en majuscules afin d'être facilement identifiables. Les noms de constante répondent généralement aux mêmes exigences que les noms de variable. Voici la syntaxe générale de déclaration de constante (VBA et OOo Basic) :
CONST NomConstante=Expression
Les structures de contrôle donnent à vos procédures plus de puissance et d'efficacité en leur permettant de prendre des décisions ou d'exécuter des tâches répétitives.
Une structure de décision permet à un utilisateur de choisir un produit dans une liste pour faire immédiatement apparaître sur un graphique des données relatives à ce produit.
Les répétitions sont fréquentes dans une procédure : une boucle permet d'optimiser la programmation.
Les structures de décision permettent de vérifier les saisies effectuées par l'utilisateur et, d'une façon générale, d'effectuer une certaine action selon une certaine condition.
If...Then...Else
La structure de décision la plus courante est If...Then...Else, dont la syntaxe est la suivante :
If <condition1> Then
<code si condition1 est vraie>
Else If <condition2> Then
<code si condition2 est vraie>
Else
<code si toutes les autres conditions sont fausses>
Les clauses Else et Else If sont facultatives. Les structures de décision emploient très fréquemment les opérateurs de comparaison, que nous avons déjà abordés.
Vous pouvez écrire Elseif à la place de Else If et EndIf à la place de End If.
La fonction Choose renvoie une valeur sélectionnée dans une liste d'arguments. Sa syntaxe est la suivante :
Choose (Index, Selection1[, Selection2, ... [,Selection_n]])
où Index est une expression numérique indiquant la valeur à renvoyer et Selection, toute expression contenant un des choix possibles.
Si Index = 1, elle renvoie la première expression de la liste, si Index = 2, elle renvoie la deuxième expression, et ainsi de suite.
Si la valeur de Index est inférieure à 1 ou supérieure au nombre d'expressions de la liste, la fonction renvoie la valeur Null.
Exécute un des blocs d'instructions indiqué, selon la valeur d'une expression. Sa syntaxe est la suivante :
Select Case <condition>
Case <liste expression>
<instructions>
[Case Else <autres instructions>]
End Select
où condition est une expression numérique ou expression de chaîne, liste expression une liste délimitée dont les membres satisfont la condition, instructions les instructions exécutées si la condition est satisfaite et autres instructions une ou plusieurs instructions exécutées si condition ne correspond à aucun élément de la clause Case.
Cette instruction est très puissante et mérite sans doute un exemple :
Sub ExampleRandomSelect
Dim iVar As Integer
Dim Resultat As String
iVar = Int((15 * Rnd) -2)
Select Case iVar
Case 1 To 5
Resultat = "Nombre entre 1 et 5"
Case 6, 7, 8
Resultat = "Nombre entre 6 et 8"
Case 8 To 10
Resultat = "Supérieur à 8"
Case Else
Resultat = "En dehors de la plage 1 à 10"
End Select
End Sub
Cette petite procédure place dans la variable chaîne Resultat la valeur appropriée en fonction de l'entier iVar dont la valeur est déterminée aléatoirement.
Une boucle permet d'exécuter un nombre de fois défini ou variable une ou plusieurs instructions. Cela contribue à améliorer la lisibilité du programme et sa vitesse d'exécution.
Il existe plusieurs types de boucles.
La structure de boucle la plus courante se nomme Do...Loop. Une boucle Do répète le même groupe d'instructions jusqu'à ce qu'une condition particulière, définie dans la boucle, soit satisfaite (Do Until) ou ne soit plus satisfaite (Do While). Vous pourrez, par exemple, faire durer la boucle jusqu'à ce qu'elle rencontre une cellule vide, qui indiquerait que la liste est terminée. Sa syntaxe générale est la suivante :
Do Until <condition>
<code tant que condition est fausse>
Loop
Do While <condition>
<code tant que condition est vraie>
Loop
Une boucle While répète un même groupe d'instructions tant qu'une condition particulière, définie dans la boucle, est satisfaite. Vous pourrez, par exemple, faire durer la boucle tant que la cellule active possède un contenu. Sa syntaxe générale est la suivante :
While <condition>
<code tant que condition est vraie>
Wend
Il est généralement conseillé d'employer plutôt la forme Do While... Loop, plus souple.
Une boucle For...Next effectue un nombre de passages déterminé. Le compteur de la boucle définit le nombre de répétitions. Dans l'exemple suivant, la variable I est le compteur de la boucle, avec une valeur initiale de 1. Le compteur est incrémenté de 1 à la fin de chaque passage. Lorsque la variable I vaut 10, la boucle s'arrête.
For I = 1 To 10
<instructions>
Next I
Vous pouvez définir la valeur d'incrémentation du compteur à l'aide de l'instruction Step :
For I = 1 To 10 Step 0.5
La valeur d'incrémentation peut être négative. Prenez garde à la valeur de fin de la boucle pour ne pas créer une boucle infinie, comme dans :
For I = 1 To 10 Step -1
Les boucles For Each ne font pas appel à un compteur explicite, mais indiquent au programme d'effectuer une opération pour tous les éléments d'un jeu de données et non d'effectuer une opération n fois. Par exemple :
Const d1 = 2
Const d2 = 3
Const d3 = 2
Dim a(d1, d2, d3)
For Each i In a()
<instructions>
Next i
VARIABLES
Pendant l'exécution d'un programme, les informations fournies par l'utilisateur, renvoyées par une fonction ou définies par le programmeur doivent être stockées temporairement afin d'être utilisées ultérieurement.
Une variable est un emplacement de stockage temporaire en mémoire vive d'une information employée par une procédure. Certaines procédures obtiennent une donnée différente à chaque lancement (par exemple, s'il s'agit de la date courante).
Comme il n'est pas possible de poser une question tout en effectuant autre chose, vous procédez par étape et devez temporairement mettre cette donnée de côté : vous la stockez dans une variable. Un nom de variable répond à certaines exigences dépendant du langage considéré, mais les contraintes les plus fréquentes sont les suivantes :
- La longueur du nom doit être de 1 à 255 caractères.
- Le premier caractère doit être une lettre.
- Il ne doit renfermer ni signe de ponctuation (sauf le trait de soulignement _ ou underscore) ni espace.
- Le nom doit être unique dans la procédure.
Le mode d'une déclaration de variable dépend du langage concerné. C'est souvent similaire à la syntaxe suivante :
Dim nom_variable As type de variable
Vous lui affectez une valeur comme suit :
nom_variable = expression
Le langage Basic étant assez souple, il n'est généralement pas obligatoire de déclarer explicitement une variable. Vous pourriez simplement employer la variable en lui affectant une valeur, avec l'instruction précédente.
En ce cas, c'est le langage qui détermine automatiquement le type de variable adéquat. Cette pratique est toutefois déconseillée, et mieux vaut toujours déclarer explicitement les variables. Vous pouvez d'ailleurs imposer des déclarations explicites en ajoutant en tête de votre module l'instruction :
Option explicit
Le langage génère une erreur si vous tentez d'employer une variable non préalablement déclarée.
Reportez-vous pour plus de précision à la documentation de votre produit.
CONSTANTES
Comme une variable, une constante est une zone de stockage temporaire d'une information utilisée dans une procédure. Contrairement toutefois à une variable et comme l'implique son nom, une constante ne change jamais. Imaginez une procédure dans laquelle une longue chaîne de texte apparaisse à plusieurs reprises. Plutôt que de devoir saisir ce texte dans la procédure partout où il doit apparaître, vous l'affecterez à une constante dont le nom sera bien plus concis. Vous n'avez ensuite plus qu'à entrer le nom de la constante pour employer cette chaîne de texte. Mieux encore, si vous étiez amené à devoir la modifier, vous n'aurez à le faire qu'en un emplacement (définition de la constante) et non dans toutes les lignes où elle est employée.
Les constantes doivent être déclarées. La valeur d'une constante est définie à l'aide d'une instruction de déclaration. Chaque déclaration de constante commence (avec Excel et Calc) par le mot clé Const. Les constantes doivent être déclarées au commencement de la procédure, généralement juste sous les instructions Sub ou Function. Elles sont souvent écrites en majuscules afin d'être facilement identifiables. Les noms de constante répondent généralement aux mêmes exigences que les noms de variable. Voici la syntaxe générale de déclaration de constante (VBA et OOo Basic) :
CONST NomConstante=Expression
STRUCTURES DE CONTROLE
Les structures de contrôle donnent à vos procédures plus de puissance et d'efficacité en leur permettant de prendre des décisions ou d'exécuter des tâches répétitives.
Une structure de décision permet à un utilisateur de choisir un produit dans une liste pour faire immédiatement apparaître sur un graphique des données relatives à ce produit.
Les répétitions sont fréquentes dans une procédure : une boucle permet d'optimiser la programmation.
Structures de décision
Les structures de décision permettent de vérifier les saisies effectuées par l'utilisateur et, d'une façon générale, d'effectuer une certaine action selon une certaine condition.
If...Then...Else
La structure de décision la plus courante est If...Then...Else, dont la syntaxe est la suivante :
If <condition1> Then
<code si condition1 est vraie>
Else If <condition2> Then
<code si condition2 est vraie>
Else
<code si toutes les autres conditions sont fausses>
End If
Les clauses Else et Else If sont facultatives. Les structures de décision emploient très fréquemment les opérateurs de comparaison, que nous avons déjà abordés.
ASTUCE
Vous pouvez écrire Elseif à la place de Else If et EndIf à la place de End If.
Choose
La fonction Choose renvoie une valeur sélectionnée dans une liste d'arguments. Sa syntaxe est la suivante :
Choose (Index, Selection1[, Selection2, ... [,Selection_n]])
où Index est une expression numérique indiquant la valeur à renvoyer et Selection, toute expression contenant un des choix possibles.
Si Index = 1, elle renvoie la première expression de la liste, si Index = 2, elle renvoie la deuxième expression, et ainsi de suite.
Si la valeur de Index est inférieure à 1 ou supérieure au nombre d'expressions de la liste, la fonction renvoie la valeur Null.
Select...Case
Exécute un des blocs d'instructions indiqué, selon la valeur d'une expression. Sa syntaxe est la suivante :
Select Case <condition>
Case <liste expression>
<instructions>
[Case Else <autres instructions>]
End Select
où condition est une expression numérique ou expression de chaîne, liste expression une liste délimitée dont les membres satisfont la condition, instructions les instructions exécutées si la condition est satisfaite et autres instructions une ou plusieurs instructions exécutées si condition ne correspond à aucun élément de la clause Case.
Cette instruction est très puissante et mérite sans doute un exemple :
Sub ExampleRandomSelect
Dim iVar As Integer
Dim Resultat As String
iVar = Int((15 * Rnd) -2)
Select Case iVar
Case 1 To 5
Resultat = "Nombre entre 1 et 5"
Case 6, 7, 8
Resultat = "Nombre entre 6 et 8"
Case 8 To 10
Resultat = "Supérieur à 8"
Case Else
Resultat = "En dehors de la plage 1 à 10"
End Select
End Sub
Cette petite procédure place dans la variable chaîne Resultat la valeur appropriée en fonction de l'entier iVar dont la valeur est déterminée aléatoirement.
Boucles
Une boucle permet d'exécuter un nombre de fois défini ou variable une ou plusieurs instructions. Cela contribue à améliorer la lisibilité du programme et sa vitesse d'exécution.
Il existe plusieurs types de boucles.
Do...Loop
La structure de boucle la plus courante se nomme Do...Loop. Une boucle Do répète le même groupe d'instructions jusqu'à ce qu'une condition particulière, définie dans la boucle, soit satisfaite (Do Until) ou ne soit plus satisfaite (Do While). Vous pourrez, par exemple, faire durer la boucle jusqu'à ce qu'elle rencontre une cellule vide, qui indiquerait que la liste est terminée. Sa syntaxe générale est la suivante :
Do Until <condition>
<code tant que condition est fausse>
Loop
Do While <condition>
<code tant que condition est vraie>
Loop
While...Wend
Une boucle While répète un même groupe d'instructions tant qu'une condition particulière, définie dans la boucle, est satisfaite. Vous pourrez, par exemple, faire durer la boucle tant que la cellule active possède un contenu. Sa syntaxe générale est la suivante :
While <condition>
<code tant que condition est vraie>
Wend
Il est généralement conseillé d'employer plutôt la forme Do While... Loop, plus souple.
Il est très facile de créer une boucle infinie. Si tel est le cas, vous vous en rendrez vite compte, car la macro va tourner sans fin tandis que le sablier va rester affiché. Pour stopper le programme pendant son exécution, appuyez sur les touches CTRL+PAUSE.
For...Next
Une boucle For...Next effectue un nombre de passages déterminé. Le compteur de la boucle définit le nombre de répétitions. Dans l'exemple suivant, la variable I est le compteur de la boucle, avec une valeur initiale de 1. Le compteur est incrémenté de 1 à la fin de chaque passage. Lorsque la variable I vaut 10, la boucle s'arrête.
For I = 1 To 10
<instructions>
Next I
Vous pouvez définir la valeur d'incrémentation du compteur à l'aide de l'instruction Step :
For I = 1 To 10 Step 0.5
La valeur d'incrémentation peut être négative. Prenez garde à la valeur de fin de la boucle pour ne pas créer une boucle infinie, comme dans :
For I = 1 To 10 Step -1
For...Each
Les boucles For Each ne font pas appel à un compteur explicite, mais indiquent au programme d'effectuer une opération pour tous les éléments d'un jeu de données et non d'effectuer une opération n fois. Par exemple :
Const d1 = 2
Const d2 = 3
Const d3 = 2
Dim a(d1, d2, d3)
For Each i In a()
<instructions>
Next i