Professional Documents
Culture Documents
php
Pour le moment, toutes les procdures cres sont de type Public, elles sont accessibles depuis tous les
modules.
Sub exemple()
'Identique :
Public Sub exemple()
Pour excuter une procdure depuis une autre procdure, entrez simplement son nom.
Un exemple simple :
Sub macro_test()
If Range("A1") = "" Then
avertissement ' <= excute la procdure "avertissement"
End If
'etc ...
End Sub
Ici, lorsque "macro_test" est excute et que A1 vaut "", la procdure "avertissement" est excute.
Les arguments permettent d'utiliser des valeurs d'une procdure dans une sous-procdure (car rappelez-vous que par dfaut les variables ne sont pas accessibles
depuis les autres procdures).
Sub macro_test()
If Range("A1") = "" Then
avertissement "cellule vide"
ElseIf Not IsNumeric(Range("A1")) Then
avertissement "valeur non numrique"
End If
End Sub
Cette procdure ncessite un argument, il faudra donc placer une valeur aprs "avertissement" pour l'excuter :
1 of 4 16/10/2016 14:16
Cours VBA : les procdures et fonctions http://www.excel-pratique.com/fr/vba/procedures_fonctions.php
En cas d'arguments multiples, ceux-ci doivent tre spars par des virgules.
Par dfaut, si une procdure requiert des arguments, ceux-ci sont obligatoires pour excuter la procdure.
Des arguments optionnels peuvent tre ajouts aprs les arguments obligatoires avec Optional, par exemple :
Cette procdure peut alors tre lance avec ou sans arguments optionnels, comme ceci :
Pour vrifier si un argument optionnel est prsent ou non, nous utiliserons la fonction IsMissing. Cette fonction n'tant compatible qu'avec certains types de
variables (dont Variant), le type des arguments optionnels n'a pas t dclar (type non dclar = Variant).
Sub macro_test()
nom1 = Range("A1")
prenom1 = Range("B1")
age1 = Range("C1")
End Sub
If IsMissing(prenom) Then 'Si la variable prenom est absente, on n'affiche que le nom
MsgBox nom
Else 'Sinon, on affiche le nom et le prnom
MsgBox nom & " " & prenom
End If
If IsMissing(prenom) Then 'Si la variable prenom est absente, on affiche le nom et l'ge
MsgBox nom & ", " & age & " ans"
Else 'Sinon on affiche le nom, le prnom et l'ge
MsgBox nom & " " & prenom & ", " & age & " ans"
End If
End If
End Sub
Aperu (exemple 1) :
2 of 4 16/10/2016 14:16
Cours VBA : les procdures et fonctions http://www.excel-pratique.com/fr/vba/procedures_fonctions.php
Par dfaut, les arguments sont de type ByRef ce qui signifie que, si une variable est passe en argument, c'est sa rfrence qui est transmise. Autrement dit, si la
variable est modifie dans la sous-procdure, elle le sera galement dans la procdure d'appel.
Par exemple :
Sub macro_test()
Dim nombre As Integer
nombre = 30
calcul_carre nombre
MsgBox nombre
End Sub
Private Sub calcul_carre(ByRef valeur As Integer) 'Il n'est pas ncessaire de prciser ByRef (puisque par dfaut)
valeur = valeur * valeur
End Sub
Pour mieux comprendre, voici ce qui se passe lorsque la macro est lance :
nombre = 30
'La valeur initiale de la variable "nombre" est 30
calcul_carre nombre
'La sous procdure est lance avec la variable "nombre" en argument
End Sub
'Fin de la sous-procdure
MsgBox nombre
'La variable "nombre" a t modifie, 900 est alors affich dans la bote de dialogue
Contrairement ByRef qui transmet la rfrence (raccourci), ByVal transmet la valeur, ce qui signifie que la variable passe en argument ne subit aucune
modification.
nombre = 30
'La valeur initiale de la variable "nombre" est 30
calcul_carre nombre
'La sous procdure est lance avec la variable "nombre" en argument
End Sub
'Fin de la sous-procdure (dans cet exemple, la sous-procdure n'aura servi rien)
MsgBox nombre
'La variable "nombre" n'a pas t modifie, 30 est donc affich dans la bote de dialogue
Ce qu'il faut retenir : utiliser ByVal lorsque la variable ne doit pas tre modifie ...
3 of 4 16/10/2016 14:16
Cours VBA : les procdures et fonctions http://www.excel-pratique.com/fr/vba/procedures_fonctions.php
La principale diffrence entre une procdure Sub et Function est la valeur retourne par la fonction.
Function carre(nombre)
carre = nombre ^ 2 'La fonction "carre" renvoie la valeur de "carre"
End Function
Sub macro_test()
Dim resultat As Double
resultat = carre(9.876) 'La variable resultat reoit la valeur retourne par la fonction
MsgBox resultat 'Affiche le rsultat (ici, le carr de 9.876)
End Sub
Les fonctions peuvent galement tre utilises sur la feuille comme n'importe quelle fonction Excel.
4 of 4 16/10/2016 14:16