Médiaforma

All posts in VBAExcel

Lorsque vous définissez une macro avec l’enregistreur de macros, Excel crée une procédure, lui donne le nom de la macro et la stocke dans le module attaché au classeur. Nous allons vérifier que l’inverse est également vrai. En d’autres termes, que si vous définissez une procédure en VBA, elle est accessible sous la forme d’une macro.

Une première procédure

A titre d’exemple, vous allez utiliser le code suivant dans le module attaché au classeur :

Sub EnRouge()

'

' Arrière-plan rouge

'

    Selection.Interior.Color = RGB(255, 0, 0)

End Sub

La procédure s’appelle EnRouge. Elle utilise la fonction RGB() pour affecter la couleur rouge (RGB(255,0,0)) à l’arrière-plan (Interior.Color) des cellules sélectionnées (Selection).

Vous voyez, il n’y a rien de bien compliqué. Le tout est de connaitre les termes à utiliser et de les utiliser dans le bon ordre.

La fonction RGB() ne vous dit peut-être rien. Dans ce cas, sachez qu’il s’agit d’une fonction qui se retrouve dans la plupart des langages de programmation. Elle définit une couleur par ses composantes Red (rouge), Green (vert) et Blue (bleu).

La “force” de chaque composante est donnée par un nombre entier compris entre 0 et 255. Si une composante vaut 0, la couleur correspondante n’est pas du tout présente. Inversement, si une composante vaut 255, la couleur correspondante est présente à 100%. Et entre les valeurs 0 et 255, la quantité de couleur va croissante.

En extrapolant, il est facile de comprendre que vous disposez de 256 niveaux de rouge, de 256 niveaux de vert et de 256 niveaux de bleu. Ce qui représente 256 x 256 x 256 = 16 777 216 couleurs. Un peu plus de 16 millions de couleurs : il y a de quoi faire !

Rassurez-vous, il n’est pas nécessaire de connaitre toutes les valeurs des composantes RVB. Pour définir une couleur, vous utiliserez une application graphique quelconque : PhotoFiltre par exemple si vous êtes sous Windows (Vous trouverez des formations vidéo à PhotoFiltre sur cette page : https://www.mediaforma.com/photofiltre/).

Lancez PhotoFiltre, cliquez sur la couleur d’avant-plan ou d’arrière-plan dans la palette d’outils (1), déplacez le signe Plus dans la palette (2) et choisissez la luminosité de la couleur sélectionnée (3). Les composantes RGB sont disponibles dans les cases Rouge, Vert et Bleu :

Si vous utilisez un autre système d’exploitation, une application comparable à PhotoFiltre est forcément disponible : The Gimp ou PhotoShop par exemple.

Voyons maintenant si la procédure EnRouge est bien disponible sous la forme d’une macro. Il n’y a rien de plus simple. Basculez sur l’onglet Développeur dans le ruban, puis cliquez sur l’icône Macros dans le volet Code. Comme vous le voyez, la macro EnRouge a bien été créée :

Fermez la boîte de dialogue Macro.

Pour voir si le code fonctionne, sélectionnez plusieurs cellules dans la feuille. Toujours sous l’onglet Développeur du ruban, cliquez sur Macros, dans le groupe Code, sélectionnez la macro EnRouge et cliquez sur Exécuter. Voici le résultat :

Avant de terminer cette section, j’ai une question pour vous. Vous avez vu que cette instruction affectait un arrière-plan rouge aux cellules sélectionnées :

Selection.Interior.Color = RGB(255, 0, 0)

Quelle instruction devriez-vous utiliser pour affecter la couleur verte aux caractères qui se trouvent dans les cellules sélectionnées ?

Selection.Font.Color = RGB(0, 255, 0)

Pour terminer, changez le nom et le commentaire de la procédure EnRouge() :

Sub EnVert()

'

' Caractères en vert

'

    Selection.Font.Color = RGB(0, 255, 0)

End Sub

Dans cet article, vous allez faire connaissance avec l’application Microsoft Visual Basic for Applications, dans laquelle vous développerez vos projets VBA.

Pour accéder à cette fenêtre, basculez sur l’onglet Développeur du ruban et cliquez sur l’icône Visual Basic dans le groupe Code :

Si vous n’êtes pas réfractaire aux raccourcis clavier, vous pouvez également appuyer sur Alt + F11 pour parvenir au même résultat.

Examinons la fenêtre Microsoft Visual Basic pour Applications :

Il se peut que votre fenêtre soit légèrement différente. Les volets en trop ou manquants peuvent être affichés/supprimés avec les commandes du menu Affichage.

Premiers pas en VBA

Examinez le volet Explorateur de projets.

Si vous n’avez pas encore défini de macros dans le classeur en cours, vous allez créer un module. C’est en effet dans ce module que les instructions VBA rattachées au classeur en cours seront définies. Lancez la commande Module dans le menu Insertion. Le dossier Modules et l’entrée Module1 sont ajoutés dans l’explorateur de projets et une feuille blanche apparait dans la partie droite de la fenêtre :

Si vous avez défini une ou plusieurs macros, le dossier Modules et l’entrée Module1 doivent apparaître dans ce volet.

Supposons que vous ayez défini la macro DateLongue, comme indiqué dans la section “Une première macro”. Vous devriez avoir le code suivant dans le module 1 :

Sub DateLongue()

'

' DateLongue Macro

'

'

    Selection.NumberFormat = "[$-x-sysdate]dddd, mmmm dd, yyyy"

End Sub

Sur la première ligne, vous retrouvez le nom de la macro DateLongue, précédé du mot sub, pour subroutine, ou procédure en français. La procédure se termine par les mots End Sub. Le code de la procédure DateLongue se trouve entre les mots Sub et End Sub.

Dans cet exemple précis, vous trouvez plusieurs lignes de commentaires, qui commencent par une apostrophe :

'

' DateLongue Macro

'

'

Ainsi qu’une ligne qui vous laisse peut-être perplexe :

Selection.NumberFormat = "[$-x-sysdate]dddd, mmmm dd, yyyy"

Il s’agit d’une notation objet, car oui, VBA est un langage objet !

Si vous n’avez aucune idée de ce qu’est un langage objet, cliquez sur ce lien (renvoie vers la section “Si vous n’avez aucune idée de ce qu’est un langage objet”).

Cette ligne de code définit la propriété NumberFormat de l’objet Selection. En d’autres termes, le format des cellules sélectionnées. La chaîne affectée à cette propriété a été générée par l’enregistreur de macros. Elle indique que les dates doivent être affichées au format long :

  • dddd : nom du jour au format long
  • mmmm : nom du mois au format long
  • dd : numéro du jour
  • yyyy : année au format long

La première partie du format ([$-x-sysdate]) indique que la date sera affichée en fonction de la langue système. Ici, il s’agit du français. La date 12/08/2017 sera transformée en samedi 12 août 2017.

Si vous n’avez aucune idée de ce qu’est un langage objet

Un petit aparté pour ceux qui ne savent pas ce qu’est un langage objet et/ou qui n’ont jamais programmé en objet.

Eh bien, comme son nom l’indique, un langage objet manipule … des objets ! Vous pouvez considérer un objet comme une boîte qui possède des propriétés et des méthodes. Les propriétés définissent les caractéristiques de l’objet et les méthodes agissent sur l’objet.

Si nous prenons le cas particulier d’Excel, Les programmes VBA manipulent un ensemble d’objets mis à disposition du programmeur par Excel : des cellules, des lignes, des colonnes, des plages sélectionnées, des feuilles de calcul et des classeurs.

Propriétés

Pour accéder à une propriété, vous écrirez quelque chose comme ceci :

Objet.Propriété

Objet est le nom de l’objet et Propriété est la propriété à laquelle vous voulez accéder.

Vous pouvez lire la valeur d’une propriété et l’afficher dans une boîte de dialogue avec une instruction Msg. Par exemple :

Msg Objet.Propriété

Ou encore affecter une valeur à une propriété avec un simple signe = (égale à).

Si la valeur est numérique, il suffit de l’indiquer après le signe = :

Objet.Propriété = Valeur

Si la valeur est une chaîne de caractères, elle sera encadrée par des guillemets :

Objet.Propriété = "Valeur"

Méthodes

Pour appliquer une méthode à un objet, il suffit d’indiquer le nom de l’objet, suivi d’un point, suivi du nom de la méthode. Par exemple, pour basculer sur la feuille de calcul Feuil2 du classeur courant, vous appliquerez la méthode Activate à l’objet Worksheets(“Feuil2”) :

Worksheets("Feuil2").Activate

Ou encore, pour sélectionner la cellule B5 dans la feuille courante, vous appliquerez la méthode Select à l’objet Range(“B5”) :

Range("B5").Select

Et maintenant, tout le travail va consister à connaitre les objets d’Excel, leurs propriétés et leurs méthodes. Vous voyez que ce n’est pas si compliqué que ça !


Si vous voulez un bouton personnalisable, vous utiliserez un bouton de commande et non un bouton de formulaire.

Basculez sur l’onglet Développeur. Dans le groupe Contrôles, cliquez sur l’icône Insérer, puis sur l’icône Bouton de commande (Contrôle ActiveX) :

Dessinez le bouton sur la feuille de calcul en maintenant le bouton gauche de la souris enfoncé. Au relâchement du bouton gauche, un bouton intitulé CommandButton s’affiche.

Cliquez du bouton droit sur le bouton de commande et sélectionnez Propriétés dans le menu. La boîte de dialogue Propriétés s’affiche. Utilisez les propriétés (Name) et Caption pour respectivement donner un nom au bouton de commande (ici, DL) et choisir son libellé (ici, Date Longue) :

Sous l’onglet Développeur, dans le groupe Contrôles, cliquez sur Visualiser le code. Cette action affiche la fenêtre Microsoft Visual Basic pour Applications. Sélectionnez DL dans la première liste déroulante (1) et Click dans la seconde (3). Un code VBA s’affiche dans la partie centrale de la fenêtre. Entrez le nom de la macro (ici DateLongue) puis fermez la fenêtre Microsoft Visual Basic pour Applications :

Cliquez sur l’icône Mode Création pour quitter ce mode de fonctionnement :

Vous pouvez vérifier que le bouton de commande fonctionne en sélectionnant les cellules à mettre en forme et en cliquant sur le bouton.

Pour terminer, voyons comment personnaliser le bouton. Cliquez sur l’icône Mode Création (onglet Développeur, groupe Contrôles) pour passer en mode Création. Cliquez sur le bouton puis sur l’icône Propriétés. Vous pouvez choisir entre autres la couleur d’arrière-plan et la couleur d’écriture du bouton, l’image d’arrière-plan du bouton et son ombrage :

Une fois le bouton personnalisé, cliquez sur l’icône Mode Création (onglet Développeur, groupe Contrôles) pour pouvoir l’utiliser.

Vous en savez maintenant assez sur l’enregistreur de macros pour créer vos propres macros et les exécuter :

  • depuis la boîte de dialogue Macros;
  • avec un raccourci clavier ;
  • en cliquant sur une icône dans la barre d’outils Lancement rapide;
  • en cliquant sur une icône dans le ruban ;
  • en cliquant sur un bouton de contrôle ou un bouton de commande.

Pour terminer, nous allons voir comment affecter une macro à un bouton de formulaire.

Basculez sur l’onglet Développeur. Dans le groupe Contrôles, cliquez sur l’icône Insérer, puis sur l’icône Bouton (Contrôle de formulaire) :

Dessinez le bouton sur la feuille de calcul en maintenant le bouton gauche de la souris enfoncé. Au relâchement du bouton gauche, la boîte de dialogue Affecter une macro s’affiche. Sélectionnez la macro dans la liste et cliquez sur OK :

Cliquez sur le libellé du bouton et modifiez-le :

Si nécessaire, vous pouvez modifier la taille du bouton. Cliquez dessus et agissez sur ses poignées de redimensionnement. De même, vous pouvez modifier son emplacement. Pointez-le, maintenez le bouton droit de la souris enfoncé et déplace-le à l’endroit souhaité. Au relâchement du bouton droit de la souris, sélectionnez Placer ici dans le menu.

Les boutons de formulaire sont assez peu personnalisables. Pour accéder aux options disponibles, cliquez du bouton droit sur le bouton et sélectionnez Format de contrôle dans le menu :


Si vous préférez, vous pouvez définir une icône dans le ruban pour exécuter la macro.

Lancez la commande Options dans le menu Fichier. La boîte de dialogue Options Excel s’affiche. Sélectionnez Personnaliser le ruban dans la partie gauche de la boîte de dialogue (1). Cliquez sur Nouvel onglet (2) pour définir un nouvel onglet dans le ruban. Cliquez sur cet onglet puis sur le bouton Renommer pour lui donner un nom plus approprié que “Nouvel onglet”. Ici par exemple, nous appellerons le nouvel onglet Macros. Cliquez sur Nouveau groupe puis sur Renommer. Donnez le nom Dates au nouveau groupe :

Il ne vous reste plus qu’à insérer une icône qui représente la macro dans le groupe Dates. Sélectionnez Macros (1) dans la liste déroulante. Assurez-vous que le groupe Dates est sélectionné dans la zone de liste de droite, cliquez sur DateLongue (2) puis sur Ajouter (3). Si nécessaire, vous pouvez cliquer sur Renommer (4) pour choisir l’icône de la macro DateLongue :

Fermez la boîte de dialogue Options Excel en cliquant sur OK. La macro DateLongue est accessible dans le groupe Dates, sous l’onglet Macros du ruban :


Pour accéder facilement à une macro, vous pouvez lui affecter une icône dans la barre d’outils Accès rapide. Lancez la commande Options dans le menu Fichier. La boîte de dialogue Options Excel s’affiche. Sélectionnez Barre d’outils Accès rapide dans la partie gauche de la boîte de dialogue (1). Sélectionnez Macros dans la liste déroulante Choisir les commandes dans les catégories suivantes (2). Cliquez sur la macro dans la zone de liste inférieure (3), puis cliquez sur Ajouter (4) :

Si l’icône par défaut ne vous convient pas, vous pouvez la changer en cliquant sur le bouton Modifier, dans la partie inférieure droite de la boîte de dialogue :

Choisissez une icône et cliquez sur OK. Il ne vous reste plus qu’à cliquer sur OK pour ajouter l’icône de la macro dans la barre d’outils Accès rapide :


Définition d’une première macro

A titre d’exemple, nous allons définir une macro qui met en forme des dates :

Avant de sélectionner l’onglet Développeur et de cliquer sur l’icône Enregistrer une macro dans le groupe Code, sélectionnez les cellules dont le format doit être changé :

Puis cliquez sur l’icône Enregistrer une macro. La macro aura pour nom DateLongue. Elle sera accessible avec le raccourci clavier Contrôle + Majuscule + D, et elle sera stockée dans le classeur courant :

Un clic sur le bouton OK et l’enregistrement commence. Pour arriver au résultat recherché, le plus simple consiste à basculer sur l’onglet Accueil et à cliquer sur le lanceur de boîte de dialogue Nombre. La boîte de dialogue Format de cellule s’affiche. Sélectionnez Date dans la zone de liste Catégorie et le type Date Longue dans la zone de liste Type, puis cliquez sur OK :

Vous allez maintenant stopper l’enregistrement de la macro. Basculez sur l’onglet Développeur dans le ruban puis cliquez sur Arrêter l’enregistrement dans le groupe Code.

Tester la macro

Pour vérifier que la macro fonctionne, commencez par saisir quelques dates dans la feuille de calcul où a été définie la macro ou dans une autre feuille de calcul du classeur :

Sélectionnez les cellules que vous venez de définir puis appuyez simultanément sur les touches Contrôle, Majuscule et D du clavier. La mise en forme est immédiate :

Remarque

Pour exécuter la macro, vous pouvez également basculer sur l’onglet Développeur et cliquer sur l’icône Macros du groupe Code. La boîte de dialogue Macro s’affiche. Sélectionnez la macro à exécuter dans la zone d liste Nom de la macro et cliquez sur Exécuter :

Modifier une macro

Une fois qu’une macro a été définie, vous pouvez toujours modifier ou définir son raccourci clavier ou sa définition. Cliquez sur l’icône Macros, dans le groupe Code de l’onglet Développeur du ruban. La boîte de dialogue Macro s’affiche. Cliquez sur la macro concernée puis cliquez sur Options. Une nouvelle boîte de dialogue s’affiche dans laquelle vous pouvez définir ou modifier le raccourci clavier et la définition de la macro :

Faites les modifications nécessaires puis cliquez sur OK pour les prendre en compte.

De retour dans la boîte de dialogue Macro, vous avez peut-être été tenté de cliquer sur le bouton Modifier. Cette action déclenche l’ouverture de la fenêtre Microsoft Visual Basic pour Applications dans laquelle vous voyez le code VBA généré par l’enregistreur de macros :

Chaque fois que vous créez une macro, Excel écrit du code VBA à votre place. Il est donc tout à fait possible de faire du VBA sans … faire du VBA !