====== Premier code en VBA : fonction et procédure ======
Ouvrez l'éditeur de VBE (Visual Basic Editor) :
* cliquez sur le bouton {{:vba:vba_06.png|}} de l'onglet Développeur
{{:vba:vba_07.png |}}
* Puis insérez un nouveau module que vous appellerez SIO
{{ :vba:vba_08.png |}}
===== Créer votre première fonction =====
Vous allez créer dans le module DCG une fonction tva() qui va renvoyer la valeur 1.2
Dans VBE, saisissez le code suivant
Public Function tva()
tva = 1.2
End Function
{{ :dev:excelvba:excelvba_09.png |}}
Pour renvoyez une valeur, il suffit d'utiliser le **nom** de la fonction et de lui affecter une valeur : tva = 1.2
Pour utiliser cette nouvelle fonction, écrivez dans la cellule A1 de votre feuille =tva() ou utilisez-la dans une formule de calcul.
{{ :dev:excelvba:excelvba_17.png |}}
===== Créer une fonction, avec des paramètres =====
Vos fonctions peuvent utiliser des paramètres. Ecrivez cette fonction **politesse()** et tester la.
Public Function politesse(nom as string)
politesse = "Bonjour " + nom
End Function
{{ :dev:excelvba:excelvba_10.png |}}
La fonction apparaît comme une **fonction** d'Excel et puisqu'il y a un **paramètre**, **l'assistant** vous propose de sélectionner la **cellule** de la feuille qui contient la **valeur** du paramètre à utiliser.
{{ :dev:excelvba:excelvba_18.png |}}
===== Les types de données les plus courants =====
Voici les types de données que vous pouvez utiliser avec VBA :
* chaîne de caractères: string
* réel : single
* entier : integer
* date : date
* range : plage de cellule
===== Créer votre première procédure=====
Créez la procédure info() qui affiche une boite de dialogue en utilisant la fonction politesse précédente.
Sub info()
Dim texte as String
texte=politesse("Charles")
MsgBox texte, vbInformation, "info"
End Sub
**Remarque** : la fonction **MsgBox** est utilisée pour afficher le résultat de la fonction **politesse()**.
Pour exécuter cette procédure vous pouvez :
* exécuter la procédure comme vous pouvez le faire avec une macro (bouton macro, sélectionner la procédure info et l'exécuter).
* affecter la procédure info() à un bouton.
Pour affecter la procédure à un bouton :
* créez un bouton sur votre feuille en cliquant sur le bouton {{:dev:excelvba:excelvba_11.png|}} de l'onglet **Développeur**
* utilisez l'outil **bouton** pour dessiner votre bouton
* **associez** la procédure info() (la macro) à votre bouton.
* **Renommez** votre bouton.
{{ :dev:excelvba:excelvba_12.png?200 |}}
Par défaut les procédures sont **publiques** et vous pouvez le mentionner explicitement ce qui définit l’étendue de son utilisation :
Public Sub info()
...
End Sub
Le mot-clé **Private** indique que la procédure ne peut être appelée que par les procédures de son module.
Private Sub info()
...
End Sub
===== Appeler une procédure dans une fonction ou une autre procédure =====
L'appel d'une procédure se fait avec l'instruction **call**.
Exemple de l'appel de la procédure info() par une autre procédure :
Sub TestAppelInfo()
Call info
End Sub
===== Pour en savoir plus : Les procédures événementielles =====
La procédure précédente était une **procédure générale**, déclarée dans un module et appelée explicitement dans le code.
Une **procédure événementielle** est associée à un événement d’un objet. Son nom est composé du nom de l’objet, suivi du caractère souligné "_" et du nom de l’événement (ex : Workbook_Open). L’appel d’une telle procédure est implicite, c’est-à-dire que la procédure est exécutée automatiquement lorsque l’événement associé se produit.