👁️🗨️ Les Fonctions et les Subroutines
Plus un programme est complexe, plus il est intéressant de compartimenter son code.
Les procédures (Subroutines)
Une procédure est un morceau de code écrit entre "Sub" et "End Sub". Elle peut contenir des arguments ou non. Pour exécuter une procédure depuis une autre procédure, il suffit d'entrer son nom.
Sub Message_avertissement()
MsgBox "Attention!"
End Sub
Sub Programme_principal()
If Range("A1").Value = "" Then
Message_avertissement
End If
End Sub
Lorsque la macro est exécutée et que la cellule "A1" est vide, un message apparaît.
Procédure avec arguments
Les procédures peuvent utiliser des arguments pour réutiliser le même code avec des valeurs différentes.
Sub Message_avertissement(message As String)
MsgBox message
End Sub
Sub Programme_principal()
If Range("A1").Value = "" Then
Message_avertissement "Cellule vide"
Else
Message_avertissement "Cellule non vide"
End If
End Sub
L'argument est stocké dans la variable "message". Pour plusieurs arguments, séparez-les par des virgules :
Sub Afficher_infos(nom As String, age As Integer)
MsgBox "Nom: " & nom & ", Age: " & age
End Sub
Sub Exemple_utilisation()
Afficher_infos "Thomas", 28
End Sub
Les fonctions
La différence principale avec une procédure est que la fonction **retourne une valeur**.
Function carre(nombre As Double) As Double
carre = nombre ^ 2 ' Retourne le carré de la valeur
End Function
Sub Programme_principal()
valeur = Range("A1").Value
Range("B1").Value = carre(valeur) ' B1 reçoit la valeur retournée par la fonction
End Sub
Fonctions avec plusieurs arguments et types différents
Function moyenne(a As Double, b As Double, c As Double) As Double
moyenne = (a + b + c) / 3
End Function
Function concatener_texte(txt1 As String, txt2 As String) As String
concatener_texte = txt1 & " - " & txt2
End Function
Sub Exemple_avance()
Range("C1").Value = moyenne(5, 8, 10) ' Affiche 7,666...
Range("D1").Value = concatener_texte("Bonjour", "Monde") ' Affiche "Bonjour - Monde"
End Sub
Public et Private
Par défaut, toutes les procédures et fonctions sont publiques. Pour restreindre l’accès hors du module, utilisez Private.
Private Function carre_priv(nombre As Double) As Double
carre_priv = nombre ^ 2
End Function
Public Sub Programme_principal()
valeur = Range("A1").Value
Range("B1").Value = carre_priv(valeur) ' Utilisable dans le même module
End Sub
Exemples supplémentaires utiles
' Fonction qui retourne vrai si le nombre est pair
Function EstPair(nombre As Integer) As Boolean
EstPair = (nombre Mod 2 = 0)
End Function
' Sub qui affiche un message en majuscule
Sub Afficher_message_upper(message As String)
MsgBox UCase(message)
End Sub
' Exemple combiné
Sub Exemple_complet()
Dim n As Integer
n = Range("A1").Value
If EstPair(n) Then
Afficher_message_upper "Le nombre est pair"
Else
Afficher_message_upper "Le nombre est impair"
End If
End Sub
Cette structure montre comment :
- Définir et utiliser des Sub et Function
- Passer des arguments simples ou multiples
- Retourner une valeur depuis une fonction
- Contrôler l'accès avec Public et Private
- Combiner fonctions et Subroutines pour un programme modulable