Cours VBA: 3. Concepts de base de VBA 2



Dans ce chapitre, nous allons aborder des concepts de base en VBA qui vous permettront de comprendre comment Visual Basic for Applications (VBA) fonctionne: comment et où le code est placé, comment il est distribué et comment il peut être lancé…

Pour se tenir du concept "Droit au but", je vous présente les informations nécessaires (et les plus utiles) et j'ajoute les liens vers les articles plus détaillés là, où c'est utile (en bleu). À la fin de ce module, vous serez prêts pour la programmation de vos premiers macros…


Code VBA & type de fichiers Excel

Le Microsoft Excel utilise différent types de fichiers (une grosse dizaine). Mais lors de l'utilisation "normale", vous en croiserez probablement deux:
le .XLSX et le .XLSM
.
La principale différence entre ces deux types de fichiers est la prise en charge des macros VBA. Jadis, il y avait un seul format principal, le .XLS. Depuis, pour des raisons de sécurité, Microsoft a séparé les fichiers en .XLSX qui ne contiennent que des données et n'exécutent donc rien (risque pour l'utilisateur = zéro), et en .XLSM qui peuvent contenir du code qui s'exécute (et qui peut, soyons honnêtes, être potentiellement dangereux).

Conseil: pour des fichiers XLSM dont vous ne connaissez pas la source, méfiez-vous. Vérifier le code avant de le lancer. Et attention au code qui s'autoexécute à l'ouverture (voir la section suivante & voir le chapitre 5.9. Les ÉVÉNEMENTS en VBA (Events)).

Ce qui nous intéresse donc, c'est que pour vos fichiers contenant des macros, vous devrez utiliser le format .XLSM et non .XLSX. Si vous ajoutez du code VBA dans un fichier .XLSX et vous le sauvegardez, le code VBA ne sera pas sauvegardé et sera perdu.

Pour aller plus loin (si vous le souhaitez):

Tutoriel sur les Formats des fichiers Excel – ici vous trouverez toutes les informations sur les types de fichiers pris en charge par Excel – les connus mais également ceux qui le sont moins et dont vous ne connaissez probablement même pas l’existence…

Options de sécurité d'Excel

Comme c'est mentionné plus haut, le code VBA peut être malveillant (tout comme n'importe quel autre code qui peut être exécuté sur votre ordinateur). Microsoft en est conscient et prend les mesures assez strictes pour éviter des abus.

La première mesure était de séparer les fichiers en XLSX et XLSM (voir plus haut). La suivante est que l'exécution des macros doit être autorisée explicitement par l'utilisateur. Cela se fait au niveau des Options d'Excel.

Selon la version de votre Excel, le chemin à utiliser pour accéder au menu de sécurité peut légèrement varier (mais en gros, cela n'est pas difficile à trouver dans aucune version).

Dans Office 365, allez dans le volet "Fichier", ensuite, tout en bas dans "Options".

Menu Excel: fichier                                                        Menu Excel: Options

Vous continuez en ouvrant le volet "Centre de gestion de la confidentialité" tout en bas et ensuite le vous cliquez sur "Paramètres du Centre de gestion de la confidentialité" à droite).

Menu Excel: sécurité

Vous choisissez le volet "Paramètres des macros" et ça y est…

Menu Excel: paramètres de macros

 

Comme vous pouvez le voir, vous avez 4 possibilités d’autorisation des macros:

  • Désactiver toutes les macros sans notification – avec cette option, vous ne ferez pas beaucoup de programmation en VBA 🙂 Vous ne pourrez pas non plus exécuter les macros.
  • Désactiver toutes les macros avec notification – avec ce choix, lors de la première ouverture d'un fichier contenant des macros, un message apparaîtra vous demandant la confirmation d'autorisation des macros pour ce fichier en particulier.
  • Désactiver toutes les macros à l'exception des macros signées numériquement – seuls les fichiers contenant un "certificat" (ou signature électronique si vous préférez) seront autorisés. Tous les autres fichiers avec macros seront ignorés. Mais comme la plupart des macros ne sont pas "signées", vous risquez d’être fort limités…
  • Activer toutes les macros (non recommandé; risque d'exécution de code potentiellement dangereux) – ce choix a pour conséquence que toutes les macros de tous les fichiers seront autorisés et exécutés. A utiliser uniquement si vous travaillez seulement avec vos propres macros ou avec des macros de sources tout à fait fiables. Avec cette option, le code VBA qui s'exécute automatiquement à l'ouverture du fichier sera effectivement exécuté sans que vous ayez la possibilité de voir / vérifier le code auparavant. Microsoft dit: "pas recommandé". Et je suis tout à fait d'accord avec  eux…

Pour une utilisation normale, que ce soit pour vous en tant que développeur VBA ou pour les utilisateurs de vos macros, je vous conseille de choisir la deuxième option: "Désactiver toutes les macros avec notification". C'est un bon compromis entre la flexibilité et  la sécurité.

Activer le contenu & autoriser les macros

Si vous avez choisi l'option de "Désactivation des macros avec notification" comme je vous le conseille plus haut, vous aurez droit à une "barre d'avertissement" lors de la première ouverture de chaque fichier Excel contenant des macros (.XLSM).

Excel va vous avertir que les macros sont désactivé et vous aurez la possibilité de les activer. Une fois que vous aurez cliqué sur le bouton "Activer le contenu", les macros seront utilisables.

Excel (XLSM): Autoriser les macros

 

Pour votre information: ce message n'apparaît que lors de la première ouverture du fichier. Excel va retenir votre réponse et va l'appliquer automatiquement lors des ouvertures suivantes. Si cependant, vous changez le nom du fichier, le message apparaîtra à nouveau car le fichier avec le nouveau nom sera considéré par Excel comme un nouveau fichier qui n'a pas encore été ouvert.

Où placer le code VBA dans votre Projet

Maintenant que l'on sait qu'il faut utiliser les fichiers .XLSM qui peuvent stocker des macros VBA, voici quelques explication sur la manière dont les macros sont "stockées" dans un fichier .XLSM.

Le contenu VBA d'un fichier Excel s'appelle un "Projet VBA" (VBAProject en anglais).

Petite parenthèse: même si votre Office / Excel est localisé en français, la partie VBA (éditeur, code,…) reste en anglais!

Le Projet est divisé en plusieurs objets – les voici dans une capture d'écran prise dans l'éditeur du code VBA:

VBA: Structure d'un Projet

Vous avez donc 4 groupements:

  • Objets Microsoft Excel – vous trouverez ce groupe dans chaque fichier, qu'il contient du code VBA ou pas. Un "Objet Microsoft Excel" est soit le Classeur (ThisWorkbook) soit chaque Feuille de ce Classeur. Chaque Objet peut contenir du code VBA qui le concerne en particulier. En gros, ceci sert notamment à placer le code utilisé pour gérer des événements (voir le chapitre 5.9. Les ÉVÉNEMENTS en VBA (Events)).
  • Feuilles – les "Feuilles", ce sont en fait les "Formulaires VBA". Je trouve l'utilisation du mot "Feuille" plutôt contra-productif car elle prête à confusion avec les Feuilles (Sheets) dans le Classeur. En anglais, cette confusion n'a pas lieu (car il y a des Sheets = feuilles du classeur, et des UserForm = formulaires VBA). Dans le groupe "Feuilles", vous trouverez la liste des Formulaires VBA disponibles dans votre Classeur. S'il y en a pas, vous ne verrez pas ce groupement… Le concept des "Formulaires VBA" est un puissant outil qui vous permettra de créed des véritables applications en VBA. On abordera ce sujet dans le chapitre "5.8. Utilisation des FORMULAIRES en VBA".
  • Modules – les Modules sont des "conteneurs" principaux pour votre code. Vous pouvez stocker toutes vos Macros dans un seul Module. Mais si votre code est plus complexe et/ou volumineux, les Modules servent à structurer et regrouper votre code pour une utilisation plus facile. Sachez que la manière de grouper les macros dans les Modules n'influence pas leur manière de fonctionner. Il s'agit d'une fonctionnalité purement organisationnelle (mais bien utile!) – pour se retrouver plus facilement dans le code, pour pouvoir importer/exporter plus facilement le code VBA etc.
    Remarque: dans un fichier Excel vierge il n'y a pas de Module. Vous devez commencer par en créer un ou plusieurs (dans l'éditeur VBA, clic droit sur votre Projet & "Insertion" & "Module")
  • Modules de classe – les Modules de classe servent à stocker le code VBA qui constitue des Classes (qui l'aurait dit! 😉 ). Les Classes sont un concept assez particulier qui est utilisé par les programmeurs très avancés qui gèrent des grands projets. On ne va pas s'occuper des Classes dans le cadre de ce cours. Sachez que vous pouvez passer toute votre vie à programmer en VBA sans jamais devoir les utiliser…
En résumé: retenez de cette section que votre code VBA qui gère les événements sera placé dans l’objet ThisWorkbook (événements liés au Classeur – ouverture, fermeture, sauvegarde,…) ou dans un ou plusieurs Objets Feuil (événements liés à une Feuille – changement dans la Feuille,…). Le code pourra être stocké dans les “Formulaires VBA” si vous les utilisez. Tout le reste de votre code sera à places dans un ou plusieurs Module(s). La manière de regrouper votre code dans les Modules est personnel et sert principalement à vous faciliter le travail. 

Principales pièces de code VBA: Fonction & Procédure

Maintenant que vous savez où et pourquoi placer le code VBA dans le fichier .XLSM, on peut passer à la suite… C'est-à-dire l'organisation du code VBA lui même. Dans le langage courant, on entend le plus souvent parler d'une "Macro VBA". C'est un terme générique qui désigne un code relativement court qui exécute une action spécifique – le plus souvent il s'agit de l'automatisation d'une suite de tâches en Excel.

Deux principales unités de code en VBA sont des Procédures (ou Routines) et des Fonctions.

En gros, il y a trois différences principales entre ces deux concepts:

  1. Une Procédure effectue une ou plusieurs actions. Une Fonction peut effectuer une action ou un calcul et (en plus) retourne un résultat.
  2. Une Fonction, contrairement à une Procéduree, peut être utilisée directement dans des cellules de la Feuille Excel (cette possibilité est développée dans le chapitre 5.6. Les UDF en VBA (User Defined Function))
  3. Les Fonctions et les Procédures ne sont pas lancées de la même manière: La Procédure est en quelque sorte un "programme autonome" qui peut être lancé indépendamment de plusieurs manières (voir la section suivante). La Fonction ne peut pas être lancé indépendamment et doit faire partie d'une Procédure.  ( >> C'est en fait comme si la Procédure était l'application Word et la Fonction un fichier .docx : vous pouvez ouvrir Word même si vous ne disposez d'aucun fichier .docx. Vous pouvez ouvrir le fichier .docx à partir de votre Word. Par contre il est impossible d'ouvrir un fichier .docx si vous n'avez pas de Word… )

Pour des simples macros, il vous suffira d’une Procédure (et éventuellement des Fonctions si vous effectuez des calculs spécifiques). Mais plus votre Projet devient complexe, plus vous ressentirez le besoin de diviser le code en plus petites parties… Surtout si elles sont réutilisables! Inutile de se répéter et d’écrire le même code plusieurs fois (voir chapitre 8. Faites du VBA comme un PRO). Vous verrez cela tout le long de ce cours VBA dans les exemples qui seront utilisés.

Procédure VBA & Exemples concrets

Comme mentionné plus haut, le code d'une Procédure VBA commence par Sub suivi du nom de la procédure et éventuellement des arguments à utiliser. Cela va donc donner par exemple Sub FermerFichierSansSauvegarde() : c'est donc une Procédure (Sub) qui s'appelle FermerFichierSansSauvegarde et qui ne contient pas d'arguments ( () ).

Le code de la Procédure se termine par End Sub (voir l'exemple d'une routine VBA plus loin).

La Procédure peut également contenir des arguments. Sa première ligne ressemblera à: Sub SupprimerUtilisateur(NomUtilisateur As String)

C'est donc effectivement une Procédure (Sub) qui s'appelle SupprimerUtilisateur et qui utilise un argument de type texte qui contient le nom de l'utilisateur à supprimer (NomUtilisateur As String).

Pour information: Les Arguments sont des valeurs “input” de la Pprocédure (mais également des Fonctions) – c’est à dire les valeurs avec lesquelles la Procédure va devoir travailler.
Sachez que si une Procédure utilise des arguments, vous ne pourrez pas l’exécuter telle quelle. Vous devez “l’appeler” dans une autre Procédure qui lui fournira les valeurs pour ses Arguments.

On verra ce concept plus en détail tout le long de ce cours…

Et voici donc un exemple très simple d'une Procédure VBA… Une fois exécutée, elle affichera une fenêtre pop-up avec n message. Vous pouvez simplement la copier/coller dans votre Projet pour la tester.

Sub DisBonjour()

    MsgBox "Bonjour tout le monde!"
    
End Sub

 

Comme vous pouvez voir, la Procédure DisBonjour() n'utilise ni un input particulier (elle n'a pas d'arguments) ni ne retourne aucune valeur (ce n'est pas une Fonction). La première ligne ( DisBonjour() )  marque son début et la dernière ligne sa fin ( End Sub ). Le code qui se trouve entre ces deux lignes sera exécuté quand la macro est "lancée" (dans cet exemple ce n'est qu'une seule instruction).

Fonction VBA & Exemples concrets

Le code d'une Fonction VBA est facilement reconnaissable: il commence par Function NomDeFonction() et se termine par End Function. La Fonction VBA peut utiliser des Arguments mais vous trouverez également des Fonctions sans Arguments. Mais, par la nature même de la Fonction, vous verrez plus souvent des Fonctions avec des Arguments.

Comme expliqué plus haut, une Fonction retourne toujours un résultat. Ce résultat peut être sous forme d'un chiffre, d'une chaîne de caractères, d'un Boolean (Vrai / Faux) etc.

Voici des exemples concrets de Fonctions VBA. Une sans et une avec des Arguments pour bien voir la différence.

Exemple d'une Fonction qui n'utilise pas des arguments.

Function UtilisateurEstAdmin()
    'extraction du nom d'utilisateur du PC
    NomUtilisateur = Environ("UserName")
    
    'si le nom d'utilisateur du PC est Dupont ou Duval, il sera considéré come "admin"
    If NomUtilisateur = "Dupont" Or NomUtilisateur = "Duval" Then
        UtilisateurEstAdmin = True
    Else
        UtilisateurEstAdmin = False
    End If
    
End Function

Cet exemple va donc retourner True ou False (= Vrai ou Faux) selon si l'utilisateur est considéré comme administrateur ou pas. La fonction n'a pas d'argument car le seul input qu'elle utilise se trouve dans le code même de la fonction ( NomUtilisateur = Environ("UserName") ). La fonction n'a donc pas besoin d'aucune information "venant de l'extérieur" lors de son exécution.

 

Exemple d'une fonction VBA qui utilise des arguments (deux dans ce cas-ci)

Function PlusGrandNombre(Nombre1, Nombre2)

    If Nombre1 > Nombre2 Then
        PlusGrandNombre = Nombre1
    Else
        PlusGrandNombre = Nombre2
    End If
    
End Function

Cette fonction compare deux nombres et renvoie comme résultat la valeur du plus grand nombre des deux. Logiquement donc, cette Fonction utilise comme input deux arguments: Nombre1 et Nombre2. Si ces deux valeurs ne sont pas fournies, la fonction ne va pas fonctionner car elle ne pourrait pas déterminer le résultat à envoyer.

 

Pour pouvoir tester cette Fonction chez vous, vous devez créer également une Procédure qui va "appeler" la Fonction en lui fournissant les valeurs input.
Voici donc le code complet qui vous permettra de tester le fonctionnement de cette Fonction (avec des nombres 50 et 37 comme exemple).

Sub TesterNombres()

    MsgBox PlusGrandNombre(50, 37)
    
End Sub

Function PlusGrandNombre(Nombre1, Nombre2)

    If Nombre1 > Nombre2 Then
        PlusGrandNombre = Nombre1
    Else
        PlusGrandNombre = Nombre2
    End If
    
End Function

 

Vous devez lancer la Procédure TesterNombres() pour voir le résultat. Comment faire? L'explication sur l'exécution du code VBA se trouve dans la section suivante!

Remarque: Sachez que vous pouvez/devez combiner les différentes pièces de code (des deux types : Fonctions & Procédures) afin d’obtenir un résultat souhaité. Une Procédure peut faire appel à des Fonctions mais aussi à d'autres Procédures. Tout comme une Fonction peut faire appel à d'autres Fonctions et même à des Procédures (même si cette dernière combinaisons n'a pas vraiment d'utilité).

Le déclenchement du code VBA: comment lancer une macro VBA

Il existe plusieurs manières de lancer une macro VBA, qu'elle soient manuelles ou automatiques. Le choix de la méthode d'exécution du code VBA dépend du contexte et de la situation. Voici donc les explications…

Déclencher une macro à partir de la liste des macros disponibles

De votre fenêtre principale d'Excel, vous pouvez accéder à la liste des Macros disponibles. Sur cette liste, vous avez la possibilité de sélectionner une macro et de lancer son exécution.

Vous pouvez accéder à cette liste soit avec le raccourci clavier Alt + F8, soit via le Ruban: onglet "Affichage" ensuite "Macros" (voir capture d'écran) et ensuite "Afficher les Macros"…

Lancer une macro VBA Excel depuis le Ruban

Les deux vous mèneront donc vers la liste des macros disponibles. Dans celle-ci, vous pouvez sélectionner une macro et lancer son exécution.

Lancer une macro VBA depuis la liste des macros

 

Utiliser un bouton pour lancer la macro

Une autre méthode, la plus "facile" pour l'utilisateur, c'est d'ajouter un bouton quelque part sur une Feuille dans votre Classeur et associer une Macro au clic sur ce bouton. C'est très simple, visuellement agréable et ne requiert aucune connaissance particulière de l'utilisateur.
Le hic est qu'il faut trouver un endroit approprié pour placer votre bouton. Cela n'est donc pas très utile dans des fichiers qui ne contiennent que des tableaux de données. Une solution facile: ajouter une Feuille supplémentaire au Classeur et placer le(s) bouton(s) sur cette Feuille là ce qui n'impactera point les feuilles existantes avec des données…

Lancer une macro VBA avec un bouton

 

Déclenchement automatique lors d'un Événement (Event)

Une autre possibilité qu'offre VBA sont les "Événements" (en anglais Events) – il s'agit d'une série d'actions qui exécutent automatiquement le code VBA qui leur est attribué. Ces événements peuvent être par exemple: l'ouverture d'un Classeur, changement de valeur d'une cellule, sauvegarde de fichier,…

Ce concept sera expliqué en détail dans le chapitre: 5.9. Les ÉVÉNEMENTS en VBA (Events) de ce tutoriel car il s'agit d'une fonctionnalité très importante qui élève les possibilités de VBA à un niveau bien plus impressionnant.

Pour aller plus loin (si vous le souhaitez):

Liste de tous les Événements disponibles en VBA – dans cet article, vous trouverez la liste de tous les Événements VBA que vous pouvez utiliser dans vos Projets pour déclencher le code de manière automatique…

Déclenchement à partir de l'éditeur VBA

La dernière manière de lancer une macro VBA que je vais vous présenter ici est le déclenchement à partir de l'éditeur VBA (le VBE).

Il vous suffit placer votre curseur dans le code de la macro que vous voulez lancer et soit utiliser la touche F5 de votre clavier, soit cliquer sur le triangle vert (ou flèche si vous préférez) qui se trouve dans la barre de menu (voir la capture d'écran).

Lancer une macro VBA Excel: depuis VBE

 

Cette manière de faire est destinée aux développeurs plutôt qu'aux utilisateurs. L'avantage principal est le gain de temps car vous pouvez rester dans le même fenêtre (l'éditeur de VBA) pendant les tests etc.

Conclusion du Chapitre 3

Avec les informations de ce chapitre du "Cours VBA: Droit au but" vous connaissez maintenant les bases de fonctionnement de VBA qui vous permettront de vous lancer enfin dans de développement de vos propres scripts VBA.

Donc pour résumer…

  • pour développer, stocker et distribuer vos macros VBA, utilisez le fichier Excel .XLSM
  • vous et les utilisateurs de vos macros devez autoriser leur exécution. Cela se fait dans le “Centre de gestion de la confidentialité” et je vous conseille d’utiliser l’option Désactiver toutes les macros avec notification qui est un bon compromis entre la sécurité et la facilité d’utilisation
  • placez votre code VBA dans un des “Microsoft Excel Objects” pour gérer les Événements et dans les Modules pour le code principal. Si vous utilisez les Formulaires VBA, chaque formulaire va contenir son propre code VBA.
  • principales “unités” de code VBA sont une Procédure et une Fonction. La différence principale est que la Fonction, contrairement à une Procédure, renvoie une certaine valeur en tant que son résultat une fois l’exécution terminée. La Procédure exécute une suite de tâches et des calculs à l’aide de, entre autres, Fonctions et aussi d’autres Procédures. Votre code VBA sera, dans la plupart de cas, une combinaison des Procédures et des Fonctions
  • il existe plusieurs manières de “lancer” une macro VBA dans Excel: vous pouvez ouvrir la liste des macros disponibles et en exécuter une, vous pouvez créer un bouton qui lancera une macro une fois que l’on a cliqué dessus, vous pouvez créer des Macros qui s’exécutent automatiquement lors d’un événement ou pour finir, lancer le code VBA à partir de l’éditeur VBE (triangle vert).

Vous voilà parés pour le développement en VBA. Le chapitre suivant vous familiarisera avec votre outil de travail:
l'éditeur VBA connu sous le nom de VBE

Table des matières du 'Cours VBA: Droit au but'

  • Cours VBA: Préface – à propos de ce cours VBA en ligne

  • Cours VBA: 1. Introduction – qu’est-ce que VBA? 

  • Cours VBA: 2. Première macro Excel en 2 minutes!

  • Cours VBA: 3. Concepts de base en VBA 

  • Cours VBA: 4. “VBE” – l’éditeur de code VBA

  • Cours VBA: 5. Programmation en VBA

    • Cours VBA: 5.0. VBA & Excel: s'orienter dans un Classeur Excel

    • Cours VBA: 5.1. Manipulation de TEXTE en VBA

    • Cours VBA: 5.2. Calculs en VBA

    • Cours VBA: 5.3. Manipulation des DATES en VBA

    • Cours VBA: 5.4. Utilisation des CONDITIONS en VBA

    • Cours VBA: 5.5. Utilisation des BOUCLES en VBA

    • Cours VBA: 5.6. Les UDF en VBA (User Defined Function)

    • Cours VBA: 5.7. Gestion des ERREURS en VBA

    • Cours VBA: 5.8. Utilisation des FORMULAIRES en VBA

    • Cours VBA: 5.9. Les ÉVÉNEMENTS en VBA (Events)

  • Cours VBA: 6. Programmation avancée en VBA

    • Cours VBA: 6.1. Gestion des FICHIERS en VBA

    • Cours VBA: 6.2. Gestion des RÉFÉRENCES en VBA

    • Cours VBA: 6.3. Ligne de commande en VBA (Shell)

  • Cours VBA: 7. Créer une Application en VBA

  • Cours VBA: 8. Faites du VBA comme un PRO




[contact-form-7 404 "Not Found"]

Dernière mise à jour: 2019-11-14 15:19:07

12 0

 


 




Laissez un commentaire

Votre adresse de messagerie ne sera pas publiée.

2 commentaires sur “Cours VBA: 3. Concepts de base de VBA

    • excel-malin.com Auteur de l’article

      Bonjour Naf,
      pour le moment, je suis malheureusement très (trop?) occupé. Pourtant, ce n'est pas l'envie de continuer qui manque 😉

      Normalement, je devrais pouvoir ajouter 1 ou 2 chapitres suivants d'ici la fin de l'année…

      Cordialement, Martin

      PS: n'hésitez pas à vous inscrire pour être avertie par email de la sortie de nouveaux chapitres (il y a un formulaire à la fin de la table de matières pour cela)