💻 Cours de programmation en VBA 📊

👁️‍🗨️ 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 :