Programmation VBA pour Excel
Accueil
Sommaire du cours
Sommaire des exercices
Résumé du cours
Forum
Travaux
TICE
AgroParisTech
About
©AgroParisTech
Définir ses propres fonctions
Exercices
Exercice 1
Ecrire une fonction qui permet de calculer la surface d’un rectangle (hauteur*largeur) et la tester dans Excel.
Il faut renseigner la hauteur et la longueur dans les arguments de la fonction.
Le calcul doit être renseigné dans une variable qui porte le même nom que la fonction.

Hide

Function SurfaceRectangle(hauteur As Double, largeur As Double) As Double

SurfaceRectangle = hauteur * largeur

End Function

Hide

Exercice 2
En s’aidant éventuellement de l’aide en ligne de l’éditeur de Visual Basic mais sans tenter de l’exécuter, expliquer ce que fait cette procédure.

Sub QueFaisJe(Sh As Object)

Dim NbFeuilles As Integer

Dim n As Integer

Dim nom As String

Dim chaine As String

NbFeuilles = ThisWorkbook.Sheets.Count

n = Sh.Index

nom = Sh.Name

chaine = "Feuille " & n & "/" & NbFeuilles & " : " & nom

Range("A1").Value = chaine

End Sub

Les noms des variables sont très explicites. Il en est de même pour les méthodes associées à ces variables.

Hide

Cette procédure compte le nombre de feuilles du classeur actif (NbFeuilles), vérifie l'index et le nom de la feuille active (Sh.Index et Sh.name) et rentre toutes ces données sous la forme d'une chaîne de caractères dans la cellule A1.

Hide

Exercice 3
Ecrire une procédure permettant de lancer la procédure QueFaisJe.
On utilise Set pour affecter un object.
Set Sh = ActiveSheet
Cela vous permettra d'utiliser Sh en argument de la fonction appelée.
On utilise Call pour appeler une fonction dans une procédure.

Hide

Sub LanceQueFaisJe()

Dim Sh As Object

Set Sh = ActiveSheet

Call queFaisJe(Sh)

End Sub

Hide

Exercice 4
Modifier la macro macro_entete (cf. ex.1 chap.1) afin qu’elle prenne en paramètres le nom de spécialité à afficher en A1 à la place de EGE. Testez votre procédure.
Comme la procédure comprend des arguments, elle n’est pas exécutable directement ! Il faut écrire une autre procédure appelant macro_entete et dans laquelle on définit les arguments nécessaire à l'appel de la procédure.

Hide

Sub Entete(spe As String)

Range("A1").Select

ActiveCell.FormulaR1C1 = spe

Range("A1").Select

Selection.Font.Bold = True

Range("B1").Select

ActiveCell.FormulaR1C1 = "information Clients"

Range("G1").Select

ActiveCell.FormulaR1C1 = "=TODAY()"

Range("G1").Select

Selection.Font.Italic = True

End Sub

'=========='

Sub lance_Entete()

Dim A As String

A = "spécialité"

Call Entete(A)

End Sub

Hide

Exercice 5
Ecrire une fonction permettant de calculer l’écart entre la valeur maximale et la valeur minimale d’une plage de cellules passée en argument à l’aide des fonctions intégrées d’Excel Max et Min et la tester dans Excel.
Pour utiliser une fonction intégrée d'Excel, il faut écrire la ligne de la manière suivante :
variable = WorksheetFunction.Max(argument)

Hide

Function ecart(selection As Object) As Double

Dim maximum As Double

Dim minimum As Double

maximum = WorksheetFunction.Max(selection)

minimum = WorksheetFunction.Min(selection)

ecart = maximum - minimum

End Function

Hide

Exercice 6
Ecrire la fonction compte_lignes qui permet de compter le nombre de lignes de la plage de cellules MaPlage passée en argument et la tester dans Excel.
Votre solution ne devra pas utiliser la méthode Count de l’objet Range.
Vous pourrez utiliser la boucle For Each...Next pour parcourir les lignes de la plage de cellules MaPlage. Pour ce faire, vous pourrez utiliser la propriété VBA Rows : For Each ligne In MaPlage.Rows permet de parcourir chaque ligne de la plage de cellules MaPlage.

Hide

Function compte_ligne(MaPlage As Range) As Integer

Dim ligne As Range

compte_ligne = 0

For Each ligne In MaPlage.rows

compte_ligne = compte_ligne + 1

Next ligne

End Function

Hide

Félicitations, vous avez terminé les exercices de ce chapitre.
Vous pouvez passer au chapitre suivant en cliquant sur ce lien ou sur la flèche droite en dessous. Vous pouvez également retourner sur le chapitre en cours en cliquant sur la flèche gauche.