Vous êtes sur la page 1sur 15

Programmation VBA Excel

Les Fonctions Personnalisées

Table des matières


1 Présentation .................................................................................................................................... 1
2 Accès à Visual Basic Editor............................................................................................................... 2
3 Procédure et fonction ..................................................................................................................... 3
Remarques :............................................................................................................................................. 4
3.1 Création d’une fonction personnalisée ................................................................................... 5
4 Les variables .................................................................................................................................... 5
5 Les structures de contrôle ............................................................................................................... 7
5.1 Structures de contrôle alternatives ......................................................................................... 7
5.1.1 La structure de contrôle IF ... THEN….END IF ................................................................ 7
5.1.2 La structure de contrôle IF ... THEN….ELSE…..END IF .................................................... 8
5.1.3 La structure de contrôle select case…..END select.......................................................... 8
5.2 Structures de contrôle répétitives........................................................................................... 9
5.2.1 Structure for i = i0 to if …… next ...................................................................................... 9
5.2.2 Structure For Each ….Next ............................................................................................. 10
5.2.3 Structure Do while(condion)…..loop ............................................................................. 10
5.2.4 Structure Do …..loop until(condition) ........................................................................... 11
6 Les Tableaux .................................................................................................................................. 11
6.1 Tableau statique .................................................................................................................... 12
6.2 Tableau dynamique ............................................................................................................... 12
7 Les objets et Les méthodes Excel .................................................................................................. 13
7.1 Quelques objets Excel ........................................................................................................... 13
7.2 Quelques méthodes Excel ..................................................................................................... 14

1 Présentation
Visual Basic pour Applications –VBA- est le langage de programmation des applications de
Microsoft Office. Ce langage permet d’automatiser les tâches, de créer des applications
complètes, de sécuriser vos saisies et vos documents, de créer de nouveaux menus et de
nouvelles fonctions. Une macro Excel réalisée en VBA n’est rien d’autre qu’une procédure.
Le langage VBA est accessible à tous. Cependant, une bonne connaissance de l’Excel ainsi
que les structures des algorithmes est nécessaire avant de se lancer dans la création

1
d’application. En effet, il est important de bien maîtriser d’une part les principes des
algorithmes comme les structures de contrôles, les variables, les fonctions les procédures,
etc… et d’autre part les objets Excel que manipule VBA, comme les objets Workbook
(classeur), Worskheet (Feuille de calcul), Range(plage de cellule), etc…

2 Accès à Visual Basic Editor


Pour ouvrir l’éditeur VB il faut ajouter dans le ruban de Excel l’onglet « Développeur »
Cliquer sur fichier puis option. Dans personnaliser le ruban côcher « développeur »

Dans « développeur » cliquer sur insérer puis choisir « bouton (contrôle formulaire).

Insérer le bouton sur la feuille à laquelle vous voulez affecter cette macro. Puis donner un
nom à cette macro puis cliquer sur nouvelle.

2
L’éditeur VB s’ouvre en indiquant le début et la fin de la procédure.

Cette méthode pour afficher l’éditeur VB nous permet de créer une procédure qui sera lié au
bouton de commande qu’on a insérer.

3 Procédure et fonction
Une procédure est une suite d'instructions effectuant des traitements. Elle commence par
Sub + NomDeLaProcédure et se termine par End Sub. Le nom des procédures ne doit pas
contenir d'espaces.

Une fonction est aussi une suite d’instructions effectuant un traitement mais la particularité
c’est que la fonction renvoie une valeur. Si dans une procédure on remarque que nous avons
besoin de reprendre le même traitement (bloc d’instruction) plusieurs fois on peut
l’intégrerdans une fonction. Cette dernière peut être appelée par son nom chaque fois qu’on
a besoin de ce traitement. Chaque fonction a besoin d’un certain nombre d’arguments.

3
Les arguments sont des variables dont les valeurs seront utilisées par la fonction pour quelle
puisse effectuer son traitement. Ces valeurs seront transmises à la fonction dans le
programme principal lorsqu’on appelle cette fonction.

Pour déclarer une fonction, taper Function puis son nom puis taper Entrée. VBA ajoute
automatiquement les parenthèses et la ligne End Function.

Prototype :

Function test(argument 1 as <type argument1>, argument 2 as <type argument2>) as (<type valeur revoyée))
.
.
End Function

Exemple :

Cette fonction permet de sommer deux entiers qui seront transmis en argument de la
fonction Somme() puis renvoie la somme de ces deux entiers

Remarques :
1- Dans le langage VBA pour préciser la valeur renvoyée on doit la stocker dans une variable qui
porte le même nom que celui de la fonction.

Function MaSomme(x1 As Single, x2 As Single) As Single


MaSomme = x1 + x2
End Function

2- Dans un programme VBA, pour préciser la feuille active on utilise « sheets("nom_


de_la_feuill") ». Cette instruction sera obligatoire si dans un traitement on a besoin d’utiliser
plusieurs feuilles Excel.

Exemple :

4
Dans l’exemple précédent on peut écrire :

Sub calculer()
Dim x as Integer, y as Integer
X=sheets("feuil1").cells(2,2)
Y=sheets("feuil1").cells(3,2)
sheets("feuil1").cells(5,2)=somme(x,y)
end sub

3.1 Création d’une fonction personnalisée


Nous pouvons rendre une fonction programmée avec VBA comme une fonction
personnalisée reconnue par Excel et utilisable dans une feuille Excel comme n’importe
qu’elle fonction. La démarche à suivre est la suivante :
1- Ouvrez Excel puis l'éditeur de macros (Alt F11).
2- Saisir le code de la fonction

Function MaSomme(x1 As Single, x2 As Single) As Single


MaSomme = x1 + x2
End Function

3- Activez le menu Fichier, puis Enregistrer classeur... Dans la zone Type de fichier,
sélectionnez la dernière option, complément Excel (*.xla) et sauvegardez votre fichier
après l'avoir nommé.
4- Retournez dans Excel et dans l’onglet Développeur activez l’Outils complément Excel.
Le nom de votre fichier de macro complémentaire devrait normalement apparaître
dans votre liste cochez-le. De cette manière, les fonctions personnalisées seront
disponibles dans tous vos classeurs !

4 Les variables
Lors d'une procédure, les variables servent à stocker toutes sortes de données (des valeurs
numériques, du texte, des valeurs logiques, des dates ...). Elles peuvent également faire
référence à un objet. Suivant les données que la variable recevra, on lui affectera un type
différent. Les différents types de variables de VB sont donnés par le tableau suivant :

5
La déclaration explicite d'une variable se fait par le mot Dim (abréviation de Dimension). Le
nombre maximum de caractères du nom de la variable est de 255. Il ne doit pas commencer
par un chiffre et ne doit pas contenir d'espaces.

Pour rendre obligatoire la déclaration de variables, placez l'instruction "Option Explicit" sur
la première ligne du module.

La syntaxe est :
Dim NomDeLaVariable As Type.
Dans le VBA si on déclare pas une variable elle sera par défaut de type « variante ».

Exemple :
Function Calcul_plus(Nbre1 As Integer, Nbre2 As Integer) As Integer
Dim SommeVal As Integer, Val1 As Integer, Val2 As Integer
Val1 = 5
Val2 = 2
SommeVal = Val1 + Val2
Calcul_plus = Nbre1 + Nbre2+SommeVal
End Function

6
Une variable est dite locale si elle est déclarée à l'intérieur d'une procédure ou d’une
fonction. Dès que la procédure ou la fonction est terminée, la variable n'est plus chargée
en mémoire sauf si elle est déclarée par le mot Static. Une variable Locale est
généralement placée juste après la déclaration de la procédure.

Une variable peut garder toujours la même valeur lors de l'exécution d'un programme.
Dans ce cas, elle est déclarée par les mots Const ou Global Const.

Option Explicit
Global Const Pi = 3.14159265358979

5 Les structures de contrôle


5.1 Structures de contrôle alternatives

5.1.1 La structure de contrôle IF ... THEN….END IF

IF <condition> THEN
[<bloc d'instructions>]
END IF

Description. Le bloc d'instructions est exécuté au cas où la condition prend la valeur


Vrai. Dans le cas contraire le programme exécute l'instruction suivant le bloc
d'instructions. IF, THEN et END IF sont des mots clés obligatoires dans la syntaxe Visual
Basic. La condition et le bloc d'instructions sont écrits par l'utilisateur.

Remarques.

Si le bloc d'instructions contient une seule instruction la structure de contrôle s'écrit sur
une seule ligne et ceci sans END IF (voir l'ex. 2).

2) Le bloc d'instructions n'est pas obligatoire! Bien évidemment, dans cette situation, si
la condition est vraie aucune instruction n'est exécutée.

3) Une structure de contrôle If ... Then peut contenir une ou plusieurs autres structures
de contrôle If ... Then.

Exemple :

Les exemples suivants vont déterminer la valeur que prendra la variable Mention par
rapport à des notes. Le tableau des notes est :

Note Mention
0 Nul
1à5 faible
6 à 10 Passable

7
11 à 15 Bien
16 àn19 Très bien
20 Excellent

'Pour trouver la valeur de la mention, on pourrait écrire :

Function Mention(Note As Double) As String


If Note = 0 Then Mention = "Nul"
If Note >= 1 And Note = 6 then Mention = "faible"
If Note >= 6 And Note = 11 then Mention = "passable"
If Note >= 11 And Note = 16 then Mention = "bien"
If Note >= 16 And Note = 19 then Mention = "Très bien"
If Note = 20 Then Mention = "Excellent"
Fin Function

Cet algorithme n’est pas optimal puisqu’on va passer par tous les tests logiques. Il faut
appliquer une structure qui va nous permettre d’exécuter un seul traitement suivant la
valeur de Note.

5.1.2 La structure de contrôle IF ... THEN….ELSE…..END IF


Si dans un traitement nous devons appliquer des conditions disjointes (liées)
l’utilisation de la structure « if…..then….elseif….then……endif » va rendre le programme
plus optimal. Si on reprend l’exemple précédent on aura le code suivant :

Function Mention(Note As Double) As String


If Note <10 Then
Mention = "Nul"
ElseIf Note < 12 Then
Mention = "Passable"
ElseIf Note < 14 Then
Mention = "Assez Bien"
ElseIf Note < 16 Then
Mention = "Bien"
Else
Mention = "Excellent"
End If
End Function

5.1.3 La structure de contrôle select case…..END select

Dans le cas de conditions multiples, comme dans notre exemple, on préférera le bloc
d'instruction

Select Case Valeur à tester


Case Valeur 1
faire une opération
Case Valeur 2

8
faire une opération
Case Valeur n
faire une opération
End Select

Exemple :

Function Mention(Note As Single) As String


Select Case Note
Case Is < 10
Mention = "Null"
Case Is < 12
Mention = "Passable"
Case Is < 14
Mention = "Assez bien"
Case Is < 16
Mention = " bien"
Case Else
Mention = "Très Bien"
End Select
End Function

5.2 Structures de contrôle répétitives

5.2.1 Structure for i = i0 to if …… next


Cette structure permet de répéter un nombre de fois prédéfini un bloc d'instructions.
Elles utilisent une variable qui est incrémentée ou décrémentée à chaque répétition.

Function Sum_entier (n as integer) as integer


'La boucle suivante va calculer la somme des entiers jusqu’à n
Dim Resultat as integer
Dim i as integer
Resultat = 0
For i = 1 To n
Resultat = Resultat + i
Next i
Sum_entier = Resultat
End Function

La variable i peut également être décrémentée. Dans ce cas, le mot Step est obligatoire.

Function Sum_entier3 (n as integer) as integer


'La boucle suivante va calculer la somme des entiers jusqu’à n
Dim Resultat as integer
Dim i as integer
Resultat = 0
For i = n To 1 Step -1
Resultat = Resultat + i
Next i

9
Sum_entier3 = Resultat
End Function

A l'intérieur d'un bloc d'instruction For…Next, l'instruction Exit For, peut quitter la
boucle avant que la variable n'est atteint sa dernière valeur

Function Sum_entier_12(n As Integer) As Integer


'La boucle suivante va calculer la somme des entiers jusqu'à n<=12
Dim Resultat As Integer
Dim i As Integer
Resultat = 0
For i = 1 To n
If i > 12 Then
Exit For
End If
Resultat = Resultat + i
Next i
Sum_entier_12 = Resultat
End Function

5.2.2 Structure For Each ….Next


Cette structure permet de répéter un ensemble d'instructions pour chaque élément d'une
collection ou d'un tableau.

Function MaSommePlage(MaPlage As Range) As Single


Dim S As Single
Dim cellule As Range
S=0
For Each cellule In MaPlage
S = S + cellule.Value
Next
MaSommePlage = S
End Function

Cette fonction permet de calculer la somme d’une plage de cellule

5.2.3 Structure Do while(condion)…..loop


Cette structure permet de répéter un bloc d’instruction un certain nombre de fois
inconnu à l’avance. La boucle s’arrête lorsqu’une condition n’est plus vérifiée. La
vérification de la condition se fait avant le traitement.

Function Sum_entier_carre(n As Integer) As Integer


Dim Resultat As Integer
Dim i As Integer
Resultat = 0
i=0
'Le bloc d'instruction suivant va additionner les
' nombres de 1 à 10 au carré Tant que la valeur de Compteur est inférieur n
Do While i <= n

10
Resultat = Resultat + i^2
'Ne pas oublier d'incrémenter le compteur sinon 'la boucle ne pourra pas s'arrêter.
i=i+1
loop
Sum_entier_carre = Resultat
End Function

5.2.4 Structure Do …..loop until(condition)

Cette structure permet de répéter un bloc d’instruction un certain nombre de fois


inconnu à l’avance. La boucle s’arrête lorsqu’une condition est vérifiée. La vérification de
la condition se fait après le traitement.

Function Sum_entier_carre(n As Integer) As Integer


Dim Resultat As Integer
Dim i As Integer
Resultat = 0
i=0
'Le bloc d'instruction suivant va additionner les
' nombres de 1 à 10 au carré Tant que la valeur de Compteur est inférieur n
Do
Resultat = Resultat + i^2
'Ne pas oublier d'incrémenter le compteur sinon 'la boucle ne pourra pas s'arrêter.
i=i+1
loop until i<=n
Sum_entier_carre = Resultat
End Function

6 Les Tableaux

Contrairement aux variables classiques qui contiennent une seule valeur, un tableau est
une variable qui peut contenir un ensemble de valeurs de même type.

Les valeurs stockées dans tableau sont repérées par des indices. Le nombre des indices
va définir le nombre de dimension du tableau. En général l’indice de la première case du
tableau est 0

V(0) V(1) V(2) V(3)


12 34 32 78
Ci-dessous un tableau à une seule dimension de 4 valeurs. Ces derniers sont stockées
dans V(0), V(1), …, V(3)

La déclaration du tableau se fait, comme les variables traditionnelles, dans la partie Dim.
On peut déclarer un tableau à une dimension (un seul indice) ou un tableau à n
dimensions (n indice)

11
6.1 Tableau statique
Dans un tableau statique la déclaration doit se faire en précisant le nombre de valeur
que nous voulons stocker dans ce tableau.

Exemple déclaration d’un vecteur de 10 valeurs.

Dim tab(10) as single

6.2 Tableau dynamique

Dans le plus part du temps on ne connait pas à l’avance le nombre de valeur qu’on doit
stocker dans le tableau. Ce nombre peut être trouvé à partir d’un traitement.

Dim tab() as single


‘Traitement pour trouver la valeur n qui représente la valeur stockée dans tab()
……..
Redim tab(n)

Dans le cas d’un tableau à deux dimension n et m

Dim tab() as single


‘Traitement pour trouver les valeurs de n et m qui représente la valeur stockée
‘dans tab()
……..
Redim tab(n, m)

Exemple :
Ci-dessous une fonction qui permet de sommer n valeur d’un vecteur d’entier. Les
valeurs du vecteur sont saisies dans une feuille Excel :

12
Dans cette exemple nous transmettons à la fonction somme_vecteur() les valeurs de du
vecteur V() ainsi que la valeur de n qui représente le nombre de valeur stockée dans le
tableau V(). Les valeur de V() serons initiées dans la procédure « prog_principale() ».

Nous pouvons appeler les fonctions avec des paramètres dont le nom est différent que
ceux avec lesquelles nous avons déclaré ces fonctions. Mais nous devons respecter
l’ordre qu’on a donné à ces paramètres dans la déclaration des fonctions. Dans l’exemple
précédent nous avons déclaré la fonction par somme_vecteur(V(), n) et nous avons
appelé cette dernière par somme_vecteur(T(), n).

7 Les objets et Les méthodes Excel

En VBA Excel un objet est une entité externe que le programme VBA peut manipuler. Par
exemple une cellule d’une feuille Excel est un objet que VBA le manipule en utilisant une
instance de la classe Range.

Une classe est une catégorie d'objets. Le programme VBA peut manipuler une cellule
précise (ou un groupe de cellule), mais pas le concept de cellule.

Chaque objet possédé des propriétés qui le décrivent. Les objets d’une même classe
possèdent les mêmes propriétés.

Une méthode est une action que peut réaliser un objet. La liste des méthodes varie d'une
classe à l'autre, mais tous les objets d'une même classe ont les mêmes méthodes.
Par exemple, la méthode Copy d'une cellule permet de copier le contenu de cette cellule
dans le presse-papier (ou dans une autre cellule).

7.1 Quelques objets Excel


Les cellules Excel sont des objets de la classe Range. La meilleure façon d'accéder aux
propriétés d'une plage de cellules Excel depuis VBA est de nommer cette plage en Excel,
puis d'utiliser ce nom comme référence de range.
 Range("Maplage") est un objet contenant la plage nommée « Maplage ».
On peut accéder à la plage en utilisant son adresse
 Range("A1:H5") est un objet contenant la plage A1:H5.
L'utilisation d'un nom de plage au lieu d'une adresse permettra de déplacer la plage
dans Excel sans devoir modifier la programmation VBA.
On peut utiliser l’objet « Cells » pour accéder aux propriétés d’une cellule. Cet objet
utilise l'adressage Ligne, Colonne.
 Cells(3,5) est un objet contenant la cellule E5 (ligne 3, colonne 5).
L’objet « Cells » est simplement une plage ne contenant qu'une cellule.
Les objets Range ont un grand nombre de propriétés. Voici les plus intéressantes :
Numéro de la première colonne de gauche de la plage
Column
 Range("B4:H6").Column vaut 2

13
Nombre de colonnes de la plage
Columns.Count
 Range("B4:H6").Columns.Count vaut 7
Row Numéro de la première ligne du haut de la plage
Rows.Count Nombre de lignes de la plage
Count Nombre de cellules de la plage
CurrentRegion Plage continue (limitée par des lignes et des colonnes vides) dont fait partie la cellule.
Cellule de la dernière ligne à la fin de la zone qui contient la plage. Correspond aux
End(xlDown)
touches Fin+Bas.
Cellule de la dernière colonne à la fin de la zone qui contient la plage. Correspond aux
End(xlToRight)
touches Fin+Droite.
Text Valeur AFFICHÉE de la cellule, donc évaluée et formatée.
Value Valeur ÉVALUÉE de la cellule.
Worksheet Objet Worksheet qui est la feuille qui contient la plage

7.2 Quelques méthodes Excel

La plupart des opérations que l'utilisateur peut faire en Excel peuvent être
programmées en VBA grâce aux méthodes des différents objets du modèle objet Excel.

Voici les plus intéressantes :

Effacent respectivement les cellules, les contenus ou les formats


Clear
d'une plage.
ClearContents
 Range("A1").Clear
ClearFormats
 Worksheet("Tableaux").Clear
Copie le contenu d'une plage dans une autre ou dans le presse-
papier
Copy  Range("A1").Copy Range("B1")
copie le contenu de A1 dans B1
 Range("A1").Copy
copie le contenu de A1 dans le presse-papier>
Find
Ces deux méthodes permettent d'effectuer une recherche dans
et
une plage de cellules.
FindNext
Sélectionne une cellule ou une feuille Excel.
Select
À éviter la plupart du temps en programmation VBA, car le

14
déplacement du curseur Excel est rarement souhaitable pendant
l'exécution d'un programme VBA.

15

Vous aimerez peut-être aussi