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.
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.