
Procédures VBA
Procédures et fonctions VBA
Les différents types de procédures
Toutes Macro réalisées avec l'enregistreur VB,
est dans une procédure Sub (entre Sub et End Sub).Les procédures classiques sont saisies dans un dossier de module standard. Elles seront accéssible depuis n'importe quel autre module. Les procédures événementielles sont saisies dans le dossier "Microsoft Excel Objects". Soit dans Feuilles, soit dans ThisWorkBook (CeClasseur en français).
Il existe 3 types de procédures : Sub, Function et Property
◊ Sub
Générales (classique) ou Evénementielles (utilise un nom d'objet)Procédure Sub classique :
Une procédure Sub classique doit être exécutée soit, manuellement par la fenêtre des macros, soit, via un bouton (un contrôle de formulaire ou un contrôle activeX) que l'on aura créé.
Public Sub proc_message()
MsgBox "Bienvenue"
End Sub
MsgBox "Bienvenue"
End Sub
Procédure Sub évènementielle :
Private Sub Worksheet_Change(ByVal Target As Range)
'Teste la modification d'une feuille
MsgBox "Vous venez de modifier la feuille"
End Sub
'Teste la modification d'une feuille
MsgBox "Vous venez de modifier la feuille"
End Sub
Procédure Sub évènementielle :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
' Teste le clic
' Soit n'importe ou, soit comme ci-dessous, sur une cellule précise
If Target.Value = "Bateau" Then
MsgBox "Touché !"
End If
End Sub
' Teste le clic
' Soit n'importe ou, soit comme ci-dessous, sur une cellule précise
If Target.Value = "Bateau" Then
MsgBox "Touché !"
End If
End Sub
◊ Function
Exemple de procédure de type Function :
Function tva(x As Single)
tva = Round(x * (19.6 / 100), 2)
End Function
Function tva(x As Single)
tva = Round(x * (19.6 / 100), 2)
End Function
Exemple de fonction qui appelle une autre fonction:
Function ttc(x As Single)
ttc = x + tva(x)
End Function
Function ttc(x As Single)
ttc = x + tva(x)
End Function
Exemple de fonction qui demande 2 arguments:
Function SurfaceRectangle (Longueur, Largeur)
SurfaceRectangle = Longueur * Largeur
End Function
Function SurfaceRectangle (Longueur, Largeur)
SurfaceRectangle = Longueur * Largeur
End Function
Afin d'utiliser une fonction depuis n'importe quel autre classeur, on peut l' enregistrer dans un classeur de macro perso (PERSONNAL.XLSB) mais cela vous obligera à appeler vos fonctions avec le nom du classeur... PERSONNAL.XLSB!Ma_Fonction
Pour pouvoir utiliser une fonction depuis n'importe quel autre classeur en l'appelant directement par son nom, il est conseillé d'enregistrer ses fonctions VBA dans un classeur de type "macros complémentaires" (un fichier *.XLAM) en faisant Fichier / Enregistrer sous... Vos fonctions seront alors directement accessiblent.
Par curiosité, vous pouvez voir l'adresse de ce classeur (sous Excel 2010) dans la liste visible depuis Fichier / Options / Compléments.
◊ Property
Les procédures Property sont des procédures de propriété).Procédure qui est saisie dans un module de Classe.
Private My_prenom As String
Public Property Let prenom(prenom As String)
'Exemple d'attribution de propriété
My_prenom = prenom
End Property
Public Property Get prenom()
'Exemple de lecture de propriété
prenom = My_prenom
End Property
Public Property Let prenom(prenom As String)
'Exemple d'attribution de propriété
My_prenom = prenom
End Property
Public Property Get prenom()
'Exemple de lecture de propriété
prenom = My_prenom
End Property
Portée des procédures
La portée d'une procédure définit l'étendue de son utilisation.• Une procédure Public par défaut peut être appelée depuis tous les modules.
• Une procédure Private ne peut être appelée que depuis le même module.
• Une procédure Static indique que les variables locales de la procédure sont préservées entre les appels.
Procédure avec passage d'arguments
Exemple de procédure avec passage d'arguments (ici 3 arguments)
Sub proc_affiche_un_message(annonce1 As String, annonce2 As String, temperature As Byte)
MsgBox annonce1 & Chr(13) & annonce2 & temperature & _
" degrés, " & Chr(13) & "on annonce de la neige pour cet après midi et si vous vous baignez, couvrez vous bien !"
End Sub
Sub proc_appel_une_proc()
' Les 3 arguments sont fournis lors de l'appel de la procédure distante
proc_affiche_un_message "Radio Galaswinda bonjour !", "Eh bien bonjour, il fait une journée splendide, l'eau est à ?", 3
End Sub
MsgBox annonce1 & Chr(13) & annonce2 & temperature & _
" degrés, " & Chr(13) & "on annonce de la neige pour cet après midi et si vous vous baignez, couvrez vous bien !"
End Sub
Sub proc_appel_une_proc()
' Les 3 arguments sont fournis lors de l'appel de la procédure distante
proc_affiche_un_message "Radio Galaswinda bonjour !", "Eh bien bonjour, il fait une journée splendide, l'eau est à ?", 3
End Sub
Exemple de procédure événementielle avec passage d'arguments (ici 1 argument)
'Déclancher une procédure si "oui" dans une cellule (procédure évènementielle de modification de feuille)
Private Sub Worksheet_Change(ByVal Target As Range)
' Une procédure évènementielle (dans le module d'une feuille) qui test un changement dans la feuille
' Target est une variable à utiliser
If (Target.Value = "oui") Then
MsgBox "ok" ' ou appel d'une procédure distante
Else: Exit Sub
End If
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
' Une procédure évènementielle (dans le module d'une feuille) qui test un changement dans la feuille
' Target est une variable à utiliser
If (Target.Value = "oui") Then
MsgBox "ok" ' ou appel d'une procédure distante
Else: Exit Sub
End If
End Sub
Autre exemple mais sans passage de paramètres
'Déclancher une action si "oui" dans cellule A1 (procédure évènementielle sur feuille)
Private Sub Worksheet_Activate()
If (Range("A1").Value = "oui") Then
MsgBox "ok"
End If
End Sub
Private Sub Worksheet_Activate()
If (Range("A1").Value = "oui") Then
MsgBox "ok"
End If
End Sub