Easy-Micro


ESPACEMEMBRE VBA
Procédures VBA

Procédures et fonctions VBA

VBA TYPES de PROCEDURES

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

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


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

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

VBA Passage de paramètres dans une procédure évènementielle

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

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


Suivez les aventures des skippers aquitains sur EasyVoile.com
Flux RSS Easy-Micro - Abonnez-vous Easy-Micro [ François Bisch ]
Lundi 18 mars 2019 - Semaine 12 - Saint Cyrille de Jérusalem (Demain: Saint Joseph)
Aujourd'hui, c'est l'anniversaire de Luc Besson (1959-60 ans), réalisateur et producteur français, de Xavier Deluc (1958), acteur français et de Laetitia Hallyday (1975). Autre 18 mars: 1314 : supplice de Jacques de Molay, grand maître des Templiers.
Haut de page Easy-Micro