Accueil
Rechercher:
sur developpez.com sur les forums
Forums | Tutoriels | F.A.Q's | Participez | Hébergement | Contacts
Club Emploi Blogs   TV   Dév. Web PHP XML Python Autres 2D-3D-Jeux Sécurité Windows Linux PC Mac
Accueil Conception Java DotNET Visual Basic  C  C++ Delphi MS-Office SQL & SGBD Oracle  4D  Business Intelligence
FORUM OFFICE FAQs OFFICE TUTORIELS OFFICE LIVRES OFFICE SOURCES VBA ACCESS

Initiation au VBA d'Outlook

Date de publication : 16/05/2008

Par BILLY Morgan (Espace Perso de Dolphy35)
 

Nous allons aborder dans ce tutoriel les bases du VBA dans Outlook.




I. Introduction
II. Présentation de l'éditeur de Code
II-A. Options de l'éditeur
III. Les bases du VBA
III-A. Les Variables
III-A-1. Les Variables dans le programme
III-B. Les Constantes
III-B-1. Les Constantes dans le code
III-C. La portée des Variables et Constantes
III-D. Les Fonctions intégrées
III-D-1. Fonction Format
III-D-2. Fonction MsgBox
III-D-3. Fonction InputBox
III-E. Les tests
III-E-1. If ... Then
III-E-2. Select Case
III-F. Les Boucles
III-F-1. For ... To ... Next
III-F-2. For Each ... Next
III-F-3. Do While ... Loop
III-F-4. Do Until ... Loop
III-F-5. While ... Wend
III-G. Les références
IV. Quel type de Procédure choisir
IV-A. Instruction Sub
IV-A-1. Les arguments d'une instruction Sub
IV-B. L'instruction Function
V. ThisOutlookSession
V-A. Evénements
V-A-1. AdvancedSearchComplete
V-A-2. AdvancedSearchStopped
V-A-3. AttachmentContextMenuDisplay
V-A-4. FolderContextMenuDisplay
V-A-5. ItemContextMenuDisplay
V-A-6. ItemSend
V-A-7. ItemLoad
V-A-8. MAPILogonComplete
V-A-9. NewMail
V-A-10. NewMailEx
V-A-11. Quit
V-A-12. Reminder
V-A-13. ShortcutContextMenuDisplay
V-A-14. Sartup
VI. Les Objets d'Outlook
VI-A. MailItem
VI-B. ContactItem
VI-C. AppointmentItem
VI-D. JournalItem
VI-E. NoteItem
VI-F. PostItem
VI-G. PostItem
VII. Liens utiles
VIII. Remerciement


I. Introduction

Tout comme Word, Excel, Access, Visio et PowerPoint, Outlook supporte le VBA ( Visual Basic for Applications). Il est doté de l'éditeur de code VBE (Visual Basic Editor), rien dans celui-ci ne change avec les autres applications de la suite office, la seul différence se situe au niveau du Code sur les Objets et Collections.


II. Présentation de l'éditeur de Code

L'éditeur de code est accessible depuis le menu 'Outils', sélectionnez 'Macro' puis Visual Basic Editor ou bien directement par l'association des touches ALT + F11.



Cette interface est identique dans toutes les applications de la suite Office supportant le VBA.
Elle est également similaire à la version 2003. Les barres d'outils sont paramétrables en réalisant un clic droit sur une des barres et en sélectionnant 'Personnaliser...' vous pouvez la personnaliser. Deux boutons non présents dans les barres d'outils sont pour moi très intéressant, nous allons les activer :
Clic droit sur une barre d'outils -> Onglet Commandes -> Sélectionnez Edition -> Sélectionnez Commenter bloc et placer le dans une des barres d'outils -> réalisez la même opération avec Ne pas commenter bloc.
Ces deux commandes permettent de mettre ou bien d'enlever l'ensemble de la sélection en tant que commentaires, en phase de développement ceci est très pratique.



Ces mêmes commandes sont disponibles depuis la barre d'outils 'Edition', cette barre d'outil permet l'indentation de votre code. L'indentation est aussi importante que les commentaires dans un code, ceci permet en un coup de d'œil de diviser le code par bloc, les boucles, les tests, les propriétés, etc. Vous avez le choix soit vous définissez votre indentation vous même par le biais des commandes de retrait (Tab et retrait négatif), soit en installant un utilitaire qui le fait pour vous. Pour l'utilitaire je vous invite à consulter la page d'outils d'Outlook vers l'utilitaire fr Smart identer.



L'éditeur de code est doté de plusieurs fenêtres, nous allons aborder les plus utilisées :

./images/1.png Explorateur de projet :
Cette fenêtre permet de sélectionner les différents Modules, Modules de classe et Formulaires présents dans ce projet.
./images/2.png Fenêtre de visualisation :
Celle-ci permet d'afficher le code des différents Modules et Modules de classe ou bien l'Objet Formulaire ou son code.
./images/3.png Fenêtre d'exécution :
Cette fenêtre est très pratique lors du développement, vous pouvez y capturer un résultat lors de l'exécution d'un code. Vous pouvez également exécuter un code directement dans cette fenêtre.
Sub Test()
'Déclaration de la variable
Dim strTest As String
    'Chargement de la variable
    strTest = "Bonjour ceci est un test"
    'Capture la valeur de la variable dans la fenêtre d'exécution
    Debug.Print strTest
End Sub
Lors de l'exécution du code précédent, la fenêtre d'exécution affiche ceci comme résultat.



Il vous est possible d'exécuter directement du code dans cette fenêtre pour contrôler le retour. L'exécution du code suivant dans la fenêtre d'exécution permet de visualiser la valeur de retour de la boîte de message.
?msgbox("Voulez-vous continuer",vbYesNoCancel,"Ceci est un test")
Collez ce code dans la fenêtre d'exécution et exécutez-le en validant par la touche Enter.
La fenêtre suivante s'ouvre :

Une valeur de retour s'affiche dans la fenêtre en fonction du bouton que vous avez sélectionné, 6 pour Yes, 7 pour Non et 2 pour Annuler. Nous verrons plus tard à quoi cela peut servir.

./images/4.png Fenêtre de Propriétés :
Cette fenêtre permet de lister et de modifier les propriétés des Modules, Modules de classe et surtout des Formulaires.


Plusieurs outils permettent de rendre des tâches utiles, pour cela je vous renvoie vers la page d'outils pour Outlook :
fr Editeurs VBA pour Outlook


II-A. Options de l'éditeur

L'éditeur peut être paramétré à votre guise, pour cela depuis le menu Outils sélectionnez Options, une fenêtre comportant 4 onglets s'affiche.

Il ne vous reste plus qu'à sélectionner les options selon vos désirs. Si vous êtes débutant avec le VBA je vous conseil de cocher l'option 'Déclaration des variables obligatoire', cette option vous oblige à déclarer chaque variable à utiliser. Diverses options vous sont proposées :
- Vérification automatique de la syntaxe => permet de contrôler la saisie et vous signale toutes erreurs de syntaxe.
- Déclaration des variables obligatoire => Rend obligatoire la déclaration des variables du projet.
- Complément automatique des instructions => Affiche au cours de la saisie une liste d'objets, des propriétés et des méthodes en fonction des premières lettres saisies.
- Info Express automatique => Affiche dans une info bulle la liste des paramètres de la fonction ou de la méthode.
- Info bulles automatiques => Permet lors de l'exécution Pas à Pas d'une macro d'afficher dans une info bulle les valeurs des variables en pointant dessus.
- Retrait automatique => Permet lors d'un retour chariot d'avoir le même retrait que la ligne précédente, option pratique pour bien indenter le code.
- Largeur de la tabulation => nombre de caractères lors d'une tabulation.
- Edition de texte par glisser-déposer => Déplace l'ensemble d'une sélection par la souris.
- Affichage du module complet par défaut => Toutes les procédures sont affichées lors de l'ouverture du Module.
- Séparation des procédures => Place un trait horizontal pour séparer les procédures.



Cet onglet permet de modifier la mise en forme d'affichage du code dans les Modules.



- Affichage de la grille => Affiche une grille lors de l'affichage d'objet de Formulaire. Celle-ci est très pratique pour la mise en place d'éléments tels les boutons, les zones de saisies, les listes déroulantes, etc.
- Largeur et hauteur => Définissent la hauteur et largeur du quadrillage (de 2 à 60 points).
- Aligner les contrôles sur la grille => Permet de rendre la grille magnétique pour le placement des éléments.
- Afficher les info-bulles => Affiche les info-bulles des commandes de barres d'outils.
- Réduire le projet masque les fenêtres => Option concernant la fenêtre Explorateur de projets, celle-ci permet de réduire les sous dossiers lors de la réduction du dossier principal.
- Avertir avant perte d'état => Affiche un message lorsque l'action réinitialise le projet et provoque la perte de données.
- Arrêt sur toutes les erreurs => Lors d'une erreur le projet passe en mode arrêt, même sans gestion d'erreur et celle-ci ne doit pas être présente dans un Module de classe.
- Arrêt dans les modules de classe => Lors d'une erreur dans un module de classe, celui-ci passe en mode arrêt sur la ligne incriminée.
- Arrêt sur les erreurs non gérées => Avec une gestion d'erreurs, celles-ci sont interceptées par le gestionnaire. S'il n'y a aucune gestion et hors module de classe, le projet passe en mode arrêt sur la ligne incriminée, si l'erreur est située dans un module de classe le projet s'arrête sur la ligne d'appel du Module de classe.
- Compilation sur demande => Si cochée, le projet n'est compilé que sur demande, ceci permet un démarrage plus rapide. Si non cochée le projet est compilé avant l'exécution.
- Compilation en arrière-plan => N'est disponible que si l'option précédente est sélectionnée. Permet de finir la compilation en arrière plan s'il n'y a aucune activité. Permet d'augmenter la vitesse d'exécution.



- Permet de définir les fenêtres affichées et ancrées sur l'écran.


III. Les bases du VBA

Nous allons développer dans ce chapitre les bases du VBA. Ceci est valable pour toutes les applications Office intégrant le VBA.


III-A. Les Variables

Les variables permettent de stocker des données de différents types. Comme son nom l'indique sont contenu est variable, la variable peut être lue ou modifiée dans votre code. Si l'option Déclaration Obligatoire (-> §Options Editeur VBE) est cochée vous devez déclarer cette variable par l'instruction Dim, abrégé de Dimension et indique à VBA les dimensions de la zone de stockage à laquelle la variable fait référence, suivit du nom que vous voulez donner à la variable et pour finir vous devez lui définir son type.
Si l'option n'est pas cochée vous n'êtes pas obligé de déclarer les variables, l'application définira la variable en tant que Variant, mais dans un soucis d'espace pour la mémoire il est préférable de définir le type de la variable car le type Variant supporte toutes les données, par exemple vous avez besoin d'une Variable de type Boolean (ayant pour valeur logique True (Vrai) ou False (Faux)) je ne vois pas l'intérêt d'utiliser une variable de type Variant qui nécessite beaucoup plus de ressources. Ce qui est démontré par le tableau suivant :

Type de Données Valeurs autorisées Détails
Boolean True (-1) ou False (0) Valeur logique True (Vrai) ou False (Faux)
Byte 0 à 255 Nombre entier positif inclus dans la fourchette
Integer -32 768 à 32 767 Nombre entier inclus dans la fourchette
Long -2 147 483 648 à 2 147 483 647 Nombre entier inclus dans la fourchette
Single Valeurs négatives : -3,402823E38 à -1,401298E-45
Valeurs positives : 1,401298E-45 à 3,402823E38
Valeur à virgule flottante à simple précision
Double Valeurs négatives : -1,79769313486232E308 à -4,94065645841247E-324
Valeurs positives : 4,94065645841247E-324 à 1,79769313486232E308
Valeur à virgule flottante à double précision
Currency -922 337 203 685 477,5808 à 922 337 203 685 477,5807 Nombre Réel de 19 chiffres comprenant 4 chiffres après la virgule
Decimal Sans décimale : +/- 79 228 162 514 264 337 593 543 950 335
Avec décimal : 7,9228162514264337593543950335
Nombre précis avec 29 chiffres avant le séparateur et jusqu'à 28 à droite du séparateur
Date de 01/01/100 au 31/12/9999 Date et/ou heure
Object Référence aux Objets VBA Objet VBA
String de 0 à 2 milliards Chaîne de caractères de longueur variable
String de 0 à 65 400 Chaîne de caractères de longueur fixe
Variant N'importe quelle valeur numérique jusqu'à la fourchette d'une valeur double. Supporte toutes les données (fourchette identique à celle d'une chaîne de longueur variable)


Code pour déclarer une variable :
Dim strVariable As String
Le code précédent permet de déclarer la variable strVariable en tant que String (chaîne de caractères).

info Vous pouvez donner le nom que vous voulez à une Variable, vous ne pouvez mettre d'espace, de mots réservés par VBA et de caractères spécifiques, par contre vous pouvez mettre des underscores ( _ ), une obligation sur le premier caractère : il doit être de forme Alphanumérique et non numérique. Je vous invite à mettre un préfixe devant vos variables ceci permet d'un seul coup d'œil de voir le type de la variable. Pour plus d'informations sur la typographie je vous invite à lire le tutoriel d'argyronet sur le fr Descriptif des conventions typographique du code Visual Basic et de faq Télécharger le fichier Excel des principaux préfixes normalisés

III-A-1. Les Variables dans le programme

Pour affecter une donnée à une Variable, il vous suffit de dire au programme MaVariable égale ça :
strVariable = "Bonjour"
Comme la donnée affectée à la Variable de type String est une chaîne de caractères nous entourons la données de guillemets (ou double Quotes). Dans cet exemple la Variable à pour donnée Bonjour. Il vous est possible d'imbriqué une Variable dans une Variable :
Sub Variable()

    Dim strVariable As String
    Dim strDate As String
    Dim strResultat As String
    
    strVariable = "Bonjour, nous sommes le "
    strDate = "29/03/2008"
    strResultat = strVariable & strDate
    
    MsgBox strResultat
    
End Sub
Dans l'exemple précédent nous déclarons 3 Variables de type String, ensuite dans le code nous affectons comme données Bonjour, nous sommes le à la Variable strVariable, nous affectons également la date 29/03/2008 à la Variable strDate. Nous stockons la concaténation des deux Variables dans la Variable strResultat que nous affichons dans une boîte de message. Voici le résultat de ce code :



Maintenant nous allons améliorer ce code en concaténant une Variable String avec une Variable Date qui correspond à la date du jour, pour cela nous allons changer le type de la Variable ainsi que son préfixe et lui affecter la date du jour :
Sub Variable()

    Dim strVariable As String
    Dim dtmDate As Date
    Dim strResultat As String
    
    strVariable = "Bonjour, nous sommes le "
    dtmDate = Date
    strResultat = strVariable & dtmDate
    
    MsgBox strResultat
    
End Sub


Le résultat est identique :


III-B. Les Constantes

A l'instar des Variables, les Constantes ne sont pas modifiables par programme. Lors de sa déclaration nous lui affectons une donnée qui ne changera pas. Pour se faire nous remplaçons le Dim par l'abrégé Const pour Constante, vous devez lors de la déclaration lui affecter sa valeur :
Const strConstante As String = "Bonjour, nous sommes le "
info VBA dispose de plusieurs Constantes prédéfinies sans que vous ayez besoin de les déclarer. Ceci pour chaque application supportant le VBA, ces Constantes ont pour préfixes l'abrégé de l'application correspondante :
- wd pour Word
- xl pour Excel
- ac pour Access
- pp pour Power Point
- ol pour Outlook
- vb pour les constantes communes à Office
idea Pour consulter l'ensemble des Constantes, je vous invite à consulter l'aide VBA (F1 depuis l'éditeur VBE) ou bien depuis l'explorateur d'objet de l'éditeur VBE (F2 depuis l'éditeur VBE).
idea Je vous invite à consulter les tutoriels de Miche TANGUY et de Maxence HUBICHE : fr Les variables
fr Les fondamentaux des Variables et des Constantes en VBA

III-B-1. Les Constantes dans le code

L'appel de la Constante s'effectue exactement comme une Variable seul la déclaration diffère.
Sub Variable()

    Const strConstante As String = "Bonjour, nous sommes le "
    Dim dtmDate As Date
    Dim strResultat As String
    
    dtmDate = Date
    strResultat = strConstante & dtmDate
    
    MsgBox strResultat
    
End Sub
Le résultat de ce code reste inchangé :


III-C. La portée des Variables et Constantes

La portée d'une Variable ou Constante permet de définir le périmètre où celle-ci sera utilisée. 2 facteurs entrent en jeu :
- L'endroit où la Variable et/ou la Constante sont déclarées.
- Le mot-clé utilisé lors de la déclaration.


Si la Variable ou la Constante est déclarée dans la Procédure, celle-ci est dite Privée, la déclaration s'effectue par les mots-clés Dim ou Private. Ces données ne seront exploitées que dans la Procédure où elles sont déclarées, en sortant de la Procédure celles-ci sont réinitialisées et ne peuvent être exploitées. Pour garder la valeur pour une éventuelle réutilisation dans la procédure il faut utiliser la clé Static, ces données seront réinitialisées lors de la fermeture de l'application.


Si la Variable ou la Constante est déclarée en début du Module avant la première Procédure, la déclaration s'effectue par les mots-clés Dim et Private. Ces données ne sont exploitables que dans le module de déclaration, c'est à dire dans toutes les Procédures de ce Module.


La dernière possibilité s'effectue par le mot-clé Public, ceci définit que la Variable ou la Constante est utilisable dans tout le projet en cours. Elle est réinitialisée lors de la fermeture de l'application.

info Aucune donnée n'est sauvegardée dans l'application entre deux ouvertures. Si vous avez besoin de sauvegarder une donnée d'une ouverture à l'autre il vous est possible de créer une entrée dans la base de registre (avec modération) ou bien de créer un fichier texte que vous consultez à l'ouverture de l'application.

III-D. Les Fonctions intégrées

VBA possède un nombre conséquent de fonctions intégrées permettant de réaliser des conversions, des calculs mathématiques, de traitement de texte ou de caractères, des opérations sur les heures et dates, manipulation financière et des tests de valeurs.
Au vu du nombre nous n'allons pas développer l'ensemble des fonctions intégrées, je vous invite à consulter l'aide VBA disponible depuis l'éditeur VBA (touche F1), dans la zone de recherche taper 'fonctions' et lancer la recherche vous trouverez l'ensemble des fonctions disponibles, commentées et avec des exemples.


III-D-1. Fonction Format

Cette fonction est très utilisée, elle permet de mettre en forme des données par des formats prédéfinis ou bien par l'utilisateur, nous allons parler de celles définies par l'utilisateur pour les prédéfinis je vous renvoie sur l'aide VBA :

Dates et Heures :
Date correspond à la date du jour (ici 01/04/2008) et Time -> 09h05m09s

Format Détail Code Résultat
d Renvoie le jour (en chiffre) du mois de la date passée en paramètre Format (Date,"d") 1
dd Renvoie le jour (sur deux chiffres) du mois de la date passée en paramètre Format (Date,"dd") 01
ddd Renvoie le jour (abrégé) du mois de la date passée en paramètre Format (Date,"ddd") mar.
dddd Renvoie le jour (en toutes lettres) du mois de la date passée en paramètre Format (Date,"dddd") mardi
ddddd Renvoie la date en abrégé Format (Date,"ddddd") 01/04/2008
dddddd Renvoie la date complète de la date passée en paramètre Format (Date,"dddddd") mardi 1 avril 2008
w Renvoie le jour de la semaine de la date passée en paramètre Format (Date,"w") 3
ww Renvoie le numéro de la semaine de la date passée en paramètre Format (Date,"ww") 14
m Renvoie le mois de la date passée en paramètre Format (Date,"m") 4
mm Renvoie le mois (sur deux chiffres) de la date passée en paramètre Format (Date,"mm") 04
mmm Renvoie le mois (abrégé) de la date passée en paramètre Format (Date,"mmm") avr
mmmm Renvoie le mois (en toutes lettres) de la date passée en paramètre Format (Date,"mmmm") avril
q Renvoie le numéro du trimestre de la date passée en paramètre Format (Date,"q") 2
yy Renvoie l'année (sur deux chiffres) de la date passée en paramètre Format (Date,"yy") 08
yyyy Renvoie l'année (sur quatre chiffres) de la date passée en paramètre Format (Date,"yyyy") 2008
h Renvoie l'heure de l'heure complète passée en paramètre Format (Time,"h") 9
hh Renvoie l'heure (sur deux chiffres) de l'heure complète passée en paramètre Format (Time,"hh") 09
n Renvoie les minutes de l'heure complète passée en paramètre Format (Time,"n") 5
nn Renvoie les minutes (sur deux chiffres) de l'heure complète passée en paramètre Format (Time,"nn") 05
s Renvoie les secondes de l'heure complète passée en paramètre Format (Time,"s") 9
ss Renvoie les secondes (sur deux chiffres) de l'heure complète passée en paramètre Format (Time,"ss") 09
AM/PM ou am/pm Renvoie l'heure au format 12 heures avec indicateur am ou pm de l'heure complète passée en paramètre Format (Time,"hh:mm am/pm") 09:05 am
Chaîne de caractères :

Format Détail Code Résultat
> Affiche la chaîne de caractères passée en paramètre en majuscule Format ("Hello",">") HELLO
< Affiche la chaîne de caractères passée en paramètre en minuscule Format ("Hello","<") hello
@ Espace réservé à un caractère. Affichage d'un caractère ou d'un espace. Si la chaîne contient un caractère à la position occupée par le symbole @ dans l'expression de mise en forme, ce caractère est affiché ; sinon, un espace est affiché à cet emplacement Format ("Hello","@@@@@@") Hello -> place un espace avant le H
& Espace réservé à un caractère. Affichage d'un caractère ou de rien d'autre. Si la chaîne contient un caractère à la position occupée par le signe & ce caractère est affiché ; sinon, rien n'est affiché Format ("Hello","&&#") He#llo
! Remplissage des espaces réservés de gauche à droite. Par défaut, le remplissage s'effectue de droite à gauche. Format ("Hello","!&&&&") ello
numérique :

Format Détail Code Résultat
0 Espace réservé à un chiffre. Affichage d'un chiffre ou d'un zéro. Si l'expression contient un chiffre à la position occupée par le 0 dans la chaîne de mise en forme, il est affiché ; sinon un zéro est affiché à cet emplacement. Format(44.92, "000.0") 044,9
# Espace réservé à un chiffre. Affichage d'un chiffre ou d'aucun caractère. Si l'expression mise en forme contient un chiffre à la position occupée par le signe # dans la chaîne de mise en forme, il est affiché ; sinon, rien n'est affiché à cet emplacement. Format(44.92, "#0.0") 44,9
% Espace réservé au signe pourcentage. L'expression est multipliée par 100. Le signe pourcentage (%) est inséré à la position où il apparaît dans la chaîne de mise en forme. Format(44.92, "#0.0%") 4492,0%
idea Je vous invite à consulter le tutoriel de Maxence HUBICHE sur les dates : fr Les Fonctions Date/Heure en VBA

III-D-2. Fonction MsgBox

Cette fonction permet d'afficher à l'écran une boîte de message signalant un message à l'utilisateur comme fin de traitement, erreur de saisie, etc. ou pour attendre une réponse de celui-ci comme le choix entre Oui ou Non. La fenêtre la plus connue est celle qui s'affiche lorsque vous fermer une application sans l'enregistrer, une fenêtre s'ouvre demandant si vous voulez enregistrer le document avant de le fermer, 3 choix s'offrent à vous Oui, Non ou Annuler.
Voici la syntaxe :
MsgBox(prompt[, buttons] [, title] [, helpfile, context])
La fonction possède plusieurs paramètres permettant de personnaliser le message affiché, seul ce qui n'est pas entre [] est obligatoire.

prompt -> correspond au message qui se situe dans le corps du message. peut contenir une chaîne de caractères et/ou Variable et/ou Constante.

buttons -> constante vb permettant de définir le type de boutons qui seront affichés sur le message, l'icône du message et le bouton qui recevra le Focus à l'ouverture (bouton par défaut) :

  • vbOKOnly ==> Affiche le bouton OK uniquement.
  • vbOKCancel ==> Affiche les boutons OK et Annuler.
  • vbAbortRetryIgnore ==> Affiche le bouton Abandonner, Réessayer et Ignorer.
  • vbYesNoCancel ==> Affiche les boutons Oui, Non et Annuler.
  • vbYesNo ==> Affiche les boutons Oui et Non.
  • vbRetryCancel ==> Affiche les boutons Réessayer et Annuler.
  • vbCritical ==> Affiche l'icône Message critique.
  • vbQuestion ==> Affiche l'icône Requête d'avertissement.
  • vbExclamation ==> Affiche l'icône Message d'avertissement.
  • vbInformation ==> Affiche l'icône Message d'information.
  • vbDefaultButton1 ==> Le premier bouton est le bouton par défaut.
  • vbDefaultButton2 ==> Le deuxième bouton est le bouton par défaut.
  • vbDefaultButton3 ==> Le troisième bouton est le bouton par défaut.
  • vbDefaultButton4 ==> Le quatrième bouton est le bouton par défaut.
  • vbApplicationModal ==> Boîte de dialogue modale. L'utilisateur doit répondre au message affiché dans la zone de message avant de pouvoir continuer de travailler dans l'application en cours.
  • vbSystemModal ==> Modal système. Toutes les applications sont interrompues jusqu'à ce que l'utilisateur réponde au message affiché dans la zone de message.
  • vbMsgBoxHelpButton ==> Ajoute le bouton Aide à la zone de message.
  • VbMsgBoxSetForeground ==> Indique la fenêtre de zone de message comme fenêtre de premier plan.
  • vbMsgBoxRight ==> Le teste est aligné à droite.
  • vbMsgBoxRtlReading ==> Indique que le texte doit apparaître de droite à gauche sur les systèmes hébraïques et arabes.
Retour du bouton sélectionné par l'utilisateur
  • vbOK ==> Bouton OK
  • vbCancel ==> Bouton Annuler
  • vbAbort ==> Bouton Abandonner
  • vbRetry ==> Bouton Répéter
  • vbIgnore ==> Bouton Ignorer
  • vbYes ==> Bouton Oui
  • vbNo ==> Bouton Non


Prenons en exemple le souhait de poser la question à l'utilisateur avant de réaliser une opération critique sur des données :
MsgBox "Voulez-vous réellement vider ce dossier ?", vbYesNo + vbInformation, "ATTENTION"

Ce code vous affiche cette boîte de message :



Maintenant nous allons récupérer le résultat de l'utilisateur :
If MsgBox("Voulez-vous réellement vider ce dossier ?", _
              vbYesNo + vbInformation, "ATTENTION") = vbYes Then
        'Code à réaliser car l'utilisateur à répondu Yes
    End If
Le Code ci-dessus demande à l'utilisateur si l'action est à réaliser ou non, si l'utilisateur répond Yes alors nous exécutons le code, s'il répond Non nous sortons du test et nous ne faisons rien.

info Pour mettre le message sur plusieurs lignes vous pouvez utiliser la constante vbCr ou bien le code ascii Chr(13).
Voici un exemple :
MsgBox "Première ligne" & vbCr & "Seconde ligne" & Chr(13) & "Troisième ligne"
idea Je vous invite à consulter les tutoriels de Thierry GASPERMENT : fr Des textes formatés et cliquables pour une MsgBox avancée sur Access
, de Fabrice CONSTANS :fr Générateur de MsgBox toutes versions et celui de Fred (fring) : fr  VBA EXCEL : La MsgBox décortiquée

III-D-3. Fonction InputBox

La différence entre la MsgBox et l'InputBox réside que dans l'InputBox on attend une information que l'utilisateur doit saisir dans la zone prévue à cet effet.
Le retour de cette saisie est de Type String
InputBox(prompt[, title] [, default] [, xpos] [, ypos] [, helpfile, context])
Tout comme la MsgBox seul ce qui n'est pas entre [] est obligatoire.
Lors de l'appel de l'InputBox vous devez assigner une variable pour le retour de celle-ci.
Exemple de code :
Dim strRetourInput As String
strRetourInput = InputBox("Bonjour," & vbCr & "Quel âge avez-vous ?", "Demande d'âge")


strRetourInput aura pour valeur la saisie de l'utilisateur.



Il est possible de mettre une valeur par défaut lors de l'ouverture de l'InputBox.
Dim strRetourInput As String
strRetourInput = InputBox("Bonjour," & vbCr & "Quel âge avez-vous ?", "Demande d'âge", 0)
idea Si l'utilisateur clic sur Annuler la chaîne de caractères a pour retour une chaîne vide, il vous suffit de la tester.
Exemple de code :
Sub EssaisCode()
'Déclaration variable
    Dim strRetourInput As String
    'Affichage InputBox
    strRetourInput = InputBox("Bonjour," & vbCr & "Quel âge avez-vous ?", "Demande d'âge", 0)
    'Test si chaîne Vide
    If strRetourInput = "" Then
        'Chaîne Vide
        MsgBox "Action annulée par l'utilisateur ou bien aucune saisie de l'utilisateur."
    Else
        'Chaîne non vide
        MsgBox strRetourInput
    End If
End Sub

III-E. Les tests

La clé dans un code est le test des différentes variables ou retour de différentes fonctions.


III-E-1. If ... Then

Cette instruction permet de guider le code selon la condition passée en paramètre.
Syntaxe :
If condition Then Instruction
Interprétation du code : Si la condition est vraie alors on exécute l'instruction.
Exemple :
Sub EssaisCode()
    Const blnTest As Boolean = True
    If blnTest = True Then MsgBox "La valeur est vraie"
End Sub
Cette syntaxe est valable que si vous exécutez une instruction après le Then, si vous voulez exécuter un ensemble d'instructions vous devrez exécuter cette syntaxe :
If Condition Then
        'Instruction si condition Vraie
    Else
        'Instruction si condition Fausse
    End If
Interprétation du code : Si la condition est vraie on exécute le code placé derrière le Then, par contre si la condition est fausse on exécute le code placé derrière le Else, une fois les instructions réalisées le code se place sur le End If et continue jusqu'à la fin de la procédure.

Une autre variante existe, celle-ci consiste à conditionner le Else, c'est à dire si l'instruction est fausse on vient tester la seconde condition.
If Condition Then
        'Instruction si condition Vraie
    ElseIf Condition2 Then
        'Instruction si condition Fausse
    End If
Interprétation : Si la condition est vraie on exécute le code placé derrière le Then, par contre si la condition est fausse on vient tester la seconde condition, si celle-ci est vraie on exécute le code placé derrière le second Then, une fois les instructions réalisées le code se place sur le End If et continue jusqu'à la fin de la procédure.
If Condition Then
        'Instruction si condition Vraie
    ElseIf Condition2 Then
        'Instruction si condition Fausse
    Else
        'Instruction si aucune condition n'est vraie
    End If
Interprétation : Si la condition est vraie on exécute le code placé derrière le Then, par contre si la condition est fausse on vient tester la seconde condition, si celle-ci est vraie on exécute le code placé derrière le second Then, par contre si celle-ci est également fausse on exécute le code situé derrière le Else, une fois les instructions réalisées le code se place sur le End If et continue jusqu'à la fin de la procédure.

info Il vous est possible d'imbriquer plusieurs If les uns derrière les autres.
If Condition Then
        'Instruction si Condition est vraie
        If Condition2 Then
            'Instruction si Condition est vraie et Condition2 est vraie
        Else
            'Instruction si Condition est vraie et Condition2 est fausse
        End If
    Else
        'Instruction si Condition est fausse
    End If

III-E-2. Select Case

Cette instruction peut s'avérer intéressante pour éviter l'imbrication d'une multitude de IF. Pour cela nous testons une Condition et guidons le code en fonction des différents tests.
Syntaxe :
Select Case Condition
    Case 1
        'Instruction si Condition = 1
    Case 2
        'Instruction si Condition = 2
    Case 3
        'Instruction si Condition = 3
    Case 4
        'Instruction si Condition = 4
    Case Else
        'Instruction si Condition n'est égale avec aucun test
    End Select
Interprétation : Test de la valeur de Condition, les différents tests sont parcourus dès que la condition est égale à un test le code exécute les instructions qui suivent le Case et sort de la boucle de test pour se positionner sur le End Select, si Condition n'est égale à aucune valeur alors nous exécutons l'instruction derrière le Else, une fois ces instructions terminées le code se positionne au niveau du End Select et finit les instructions jusqu'à la fin de la procédure.

Vous pouvez tester des plages pour guider le code.
Syntaxe :
    Select Case Condition
    Case Is <= 10
        'Instruction si Condition est strictement inférieure ou égale à 10
    Case Is <= 20
        'Instruction si Condition est strictement inférieure ou égale à 20
    Case Is <= 30
        'Instruction si Condition est strictement inférieure ou égale à 30
    Case Is <= 40
        'Instruction si Condition est strictement inférieure ou égale à 40
    Case Else
        'Instruction si Condition n'est égale avec aucun test
    End Select
Interprétation : Test de la valeur de Condition, les différents tests sont parcourus dès que la condition est égale à un test le code exécute les instructions qui suivent le Case et sort de la boucle de test pour se positionner sur le End Select, si Condition n'est égale à aucune valeur alors nous exécutons l'instruction derrière le Else, une fois ces instructions terminées le code se positionne au niveau du End Select et finit les instructions jusqu'à la fin de la procédure.

Vous pouvez également mettre plusieurs conditions sur un Case ou définir un plage.
Syntaxe :
Select Case Condition
    Case Is <= 10
        'Instruction si Condition est strictement inférieure ou égale à 10
    Case Is <= 20
        'Instruction si Condition est strictement inférieure ou égale à 20
    Case 30, 31, 32, 33
        'Instruction si Condition = 30, 31, 32 ou 33
    Case 34 To 40
        'Instruction si Condition est comprise entre 34 et 40
    Case Else
        'Instruction si Condition n'est égale avec aucun test
    End Select
Interprétation : Test de la valeur de Condition, les différents tests sont parcourus dès que la condition est égale à un test le code exécute les instructions qui suivent le Case et sort de la boucle de test pour se positionner sur le End Select, pour les deux derniers Case; on teste si Condition égale 30, 31, 32, ou 33, en ce qui concerne le dernier Case on teste si Condition est dans la fourchette, si Condition n'est égale à aucune valeur alors nous exécutons l'instruction derrière le Else, une fois ces instructions terminées le code se positionne au niveau du End Select et finit les instructions jusqu'à la fin de la procédure.


III-F. Les Boucles

Comme son nom l'indique ces instructions permettent de réaliser des boucles dans le code, plusieurs types de boucles existent :

idea Je vous invite à consulter le tutoriel de Michel TANGUY : fr La gestion des boucles dans Excel

III-F-1. For ... To ... Next

Cette boucle permet d'exécuter le code plusieurs fois selon le nombre que l'on a indiqué en paramètre.
Syntaxe :
    For i = 1 To 4
        MaVar = MaVar + 10
    Next i
Interprétation : On définit une variable i qui correspond au compteur de la boucle et nous passons en paramètre l'exécution de 1 jusqu'à 4 fois la boucle, à chaque passage nous additionnons 10 à la variable MaVar.


Vous pouvez définir le pas d'incrémentation du Compteur, par défaut le pas est de 1 mais si vous souhaitez incrémenter le compteur de 3 en 3 il faut ajouter Step. Syntaxe :
    For i = 1 To 30 Step 3
        MaVar = MaVar + 10
    Next i
Interprétation : On définit une variable i qui correspond au compteur de la boucle et nous passons en paramètre l'exécution de 1 jusqu'à 30 mais avec un pas de 3, c'est à dire le compteur ira de 3 en 3 jusqu'à 30, à chaque passage nous additionnons 10 à la variable MaVar.


Il vous est également possible de sortir de la boucle avant que le compteur arrive à sa valeur maximale, pour cela utiliser l'instruction Exit For.
Syntaxe :
    For i = 1 To 4
        MaVar = MaVar + 10
        If MaVar = 20 Then Exit For
    Next i
Interprétation : On définit une variable i qui correspond au compteur de la boucle et nous passons en paramètre l'exécution de 1 jusqu'à 4 fois la boucle, à chaque passage nous additionnons 10 à la variable MaVar, un test est réalisé si MaVar correspond à la valeur 20 on sort de la boucle même si celle-ci n'a pas été réalisée 4 fois.

info Il vous est possible d'imbriquer plusieurs Boucles dans une Boucle, attention à bien ficeler votre code pour ne pas tourner en boucle sans pouvoir sortir de celles-ci.

III-F-2. For Each ... Next

Cette boucle permet de parcourir tous les éléments d'une collection ou tableau. En exemple elle permet de parcourir l'ensemble d'E-mails dans la boîte de réception et de renvoyer dans une boîte de message les noms des expéditeurs.
Sub EssaisCode()
'---------------------------------------------------------------------------------------
' Procédure : EssaisCode
' Auteur    : Dolphy35
' Site      : http://dolphy35.developpez.com
' Détail    :