Easy-Micro

ESPACEMEMBRE VBA
Procédures VBA

Procédures et fonctions VBA

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

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

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

◊ Function

Exemple de procédure de type 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

Exemple de fonction qui demande 2 arguments:
Function SurfaceRectangle (Longueur, Largeur)
SurfaceRectangle = Longueur * Largeur
End Function

Utilisez une fonction dans d'autre classeur

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 accessibles.
Par curiosité, vous pouvez voir l'adresse de ce classeur (sous Excel 2010) dans la liste visible depuis Fichier / Options / Compléments.

Ajouter une aide à une fonction personnalisée

Sub proc_ajoute_aide_dans_macro()
'Ajoute une aide (une description) à la macro TVA - Catégorie 14 : fonctions personnalisées
'Cette procédure est à exécuter une fois


Application.MacroOptions macro:="tva", Description:="Calcul une tva de 5% d'un prix sélectionné", _
Category:=14, HelpFile:="C:\mon-fichier-d-aide.CHM", _
ArgumentDescriptions:=Array("représente le prix hors taxe dont vous voulez calculez la TVA")
End Sub

◊ 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

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

VBA 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

Exemple de procédure événementielle avec passage d'arguments (ici 1 argument)
'Déclencher 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

Autre exemple mais sans passage de paramètres
'Déclencher 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


< Page précédente VBA Page suivante >