JPO : Webinar d'information sur nos formations → RDV mardi à 17h30.

Excel VBA : Comment automatiser ses tâches avec ce langage ?

excel vba

Le VBA est un langage de programmation orienté objets. VBA signifie Visual Basic For Applications. Il s'agit d'une intégration de Visual Basic avec les applications Microsoft Office (MS Excel, MS PowerPoint, MS Access, MS Word et MS Outlook).

En exécutant VBA dans les applications Microsoft Office, vous pouvez automatiser les tâches répétitives. Les méthodes du VBA Excel et ses objets sont centrés autour des objets d’Excel à manipuler comme des cellules ou des plages ainsi que des lignes et des colonnes de tableau.

Un Objet possède des propriétés et des méthodes. Une propriété permet d’attribuer une valeur ou une caractéristique à l’objet. La méthode permet de réaliser une action avec l’objet. Ainsi si on imagine un objet désignant une cellule dans VBA Excel, une de ses propriétés permettrait de modifier la police ou la couleur de la cellule, c’est une caractéristique. Une méthode quant à elle pourrait supprimer cette cellule, c’est une action. On appelle une propriété ou une méthode d’un objet VBA en séparant l’objet de la propriété ou de la méthode par un point dans le code : Objet.Propriété=valeur.

Comme vous le savez, lorsque vous réalisez une macro automatique avec Excel, cette dernière enregistre vos actions afin de les reproduire par simple clic sur un bouton. Ces actions sont en fait enregistrées en VBA Excel. Ce que nous proposons est de créer des macros triviales pour consulter et comprendre le code ainsi généré. 

Nous y découvrirons les objets fondamentaux et apprendrons les propriétés et méthodes essentielles pour débuter de la meilleure des façons.

Activation de l'onglet Développeur :

Nous allons donc commencer par activer l’onglet Développeur :

  • Aller dans Fichier
  • Puis dans Option
  • Puis sélectionnez Personnaliser le ruban et vous retrouverez l’onglet Développeur qui est décocher. Il suffit de le cocher et cliquer sur Ok.

Désormais l’onglet développeur est disponible et également pour ouvrir l’environnement de développeur cliquer sur l’icône Visual Basic dans l’onglet développeur.

Comment créer une macro automatique ?

Nous allons créer une première macro. L’objectif est de voir le code généré. Une cellule étant sélectionnée, normalement A1 par défaut :

  • Aller sur  le ruban Développeur puis cliquer sur le bouton Enregistrer une macro,
  • Dans la boîte de dialogue nommer la macro : test_mef par exemple,
  • Sur la liste proposée, conserver ce classeur pour enregistrer la macro,
  • Cliquez sur Ok pour démarrer l’enregistrement.

À partir de ce point, nous devons réaliser les actions strictement nécessaires, car Excel nous enregistre.

  • Cliquer sur le bouton G du ruban Accueil pour mettre en gras,
  • Choisir une couleur de remplissage rouge toujours avec le ruban Accueil,
  • Puis définir une couleur de police blanche,

Nous pouvons à présent stopper l’enregistrement.

  • Cliquer sur le bouton Arrêter l’enregistrement,

Pour l’instant la macro existe seulement sous forme de code VBA. Nous allons créer ce bouton.

  • Cliquer sur le menu Fichier puis choisir Options dans la liste,
  • Dans la boîte de dialogue, sélectionner la catégorie Barre d’outils Accès rapide,
  • Au centre, choisir la catégorie Macros,
  • Puis sélectionner la macro test_mef dans la liste du dessous et cliquer sur Ajouter,
  • Cliquer sur Modifier en bas pour choisir une image de bouton,
  • Cliquer deux fois sur Ok pour valider successivement les deux boîtes de dialogue,

Le bouton apparaît désormais dans la barre d’accès rapide, au-dessus du ruban

  • Saisir un texte dans une cellule et le valider par CTRL + Entrée pour la garder active,
  • Cliquer sur ce nouveau bouton depuis la barre d’accès rapide,

Comme vous le constatez, les propriétés de mise en forme définies par la macro s’appliquent instantanément à la cellule sélectionnée.

Comment créer une macro via le code VBA ?

Nous allons écrire la macro en lui attribuant un nouveau nom. À ce stade, son traitement sera similaire à celui de la macro précédente, nous changerons seulement certaines valeurs.

  • Dans l’éditeur de code, copier intégralement la macro (du Sub au End Sub),
  • La coller en dessous, dans la page du module,
  • Changer son nom après le Sub en : mef_bleue,

Nous avons une nouvelle macro avec un nouveau nom mais qui pour l’instant réalise exactement les mêmes actions que la précédente. Nous souhaitons que ce nouveau code mette la cellule en bleu avec un texte gris foncé dans un premier temps. Il nous suffit donc de se focaliser uniquement sur les valeurs des composantes de la fonction RGB(). Dans un deuxième temps, nous voudrions que cette macro soit capable d’appliquer une bordure à la sélection. Un bleu clair peut s’obtenir avec les composantes : 40,180,255. De même, un gris foncé peut s’obtenir avec les composantes : 76,76,76. ( Nous avons ces informations grâce à l’outil de Paint )

  • Modifier les composantes de couleur des fonctions RGB() de la sorte dans le code de cette nouvelle macro,

L’éditeur de code nous permet de la tester : 

Il faudrait d’abord sélectionner une cellule contenant du texte sur la feuille, et ensuite revenir dans l’éditeur de code et cliquer n’importe où entre les bornes de la procédure de la deuxième macro afin d’y placer le point d’insertion. C’est ainsi que le logiciel saura quel code exécuter au moment de lui demander.

Enfin il faudra cliquer sur le bouton matérialisé par une flèche verte dans la barre d’outils de l’éditeur de code.

En apparence rien ne se produit. En fait, ça va très vite.

UNE CARRIÈRE DANS LA DATA VOUS TEND LES BRAS !

Une reconversion dans le big data vous intéresse, mais vous ne savez pas par où commencer ? Découvrez nos formations en Data Science.

UNE CARRIÈRE DANS LA DATA VOUS TEND LES BRAS !

Une reconversion dans le big data vous intéresse, mais vous ne savez pas par où commencer

Découvrez nos formations en Data Science.
  • Afficher la feuille du classeur,

Vous remarquez que la cellule qui était présélectionnée a bien été affectée. Nous venons d’exécuter une macro. Nous souhaitons maintenant définir une bordure épaisse, pour la sélection par le code, nous pourrions donc passer par l’explorateur d’objets et la fenêtre des propriétés de l’éditeur de code. Tous deux sont accessibles par le menu Affichage. Mais il est encore plus simple de créer une macro automatique et de récupérer le code.

Pour cela il vous faudra sélectionner une cellule dans la feuille du classeur Excel.

Ensuite, dans le ruban Développeur, cliquer sur le bouton Enregistrer une macro et la nommer « Bordure ». Cliquez ensuite sur Ok pour débuter l’enregistrement

Avec le bouton Bordures du ruban Accueil, définir une bordure extérieure épaisse, puis, cliquer sur le bouton Arrêter l’enregistrement du ruban Développeur, et enfin cliquez sur revenir dans l’éditeur de code.

Sous la macro mef_bleue() vous constatez la présence d’une nouvelle procédure. Il s’agit de la macro bordure() que nous venons de créer. Son code paraît bien compliqué. En fait il s’agit d’une répétition systématique des mêmes propriétés réglées de la même façon. Excel traite les bordures indépendamment. D’abord la bordure de gauche : Selection.Borders(xlEdgeLeft), puis la bordure du dessus : Selection.Borders(xlEdgeTop), etc. Alors qu’il suffit de ne pas indiquer de paramètres à la propriété Borders de l’objet Selection pour que VBA Excel comprenne qu’on parle de la bordure extérieure. 

  • Sélectionner et copier le premier bloc With et le coller dans la macro mef_bleue() sous l’instruction Selection.Interior.Color= RGB(40, 180, 255),
  • Supprimer le paramètre dans les parenthèses de la propriété Borders ainsi que ses parenthèses,

Ainsi nous désignons l’ensemble de la bordure de la sélection et pas seulement l’un de ses côtés.

  • Supprimer la ligne .TintAndShade = 0, inutile comme nous l’avons vu précédemment,
  • Remplacer la ligne .ColorIndex = 0 par .Color = RGB(76, 76, 76),

.ColorIndex = 0 permet de régler la couleur de bordure sur le noir. Nous lui préférons comme précédemment la propriété .Color qui permet de définir une couleur précise à l’aide de la fonction RGB(). En l’occurrence ici nous définissons une couleur de bordure identique à celle du texte.

  • Sélectionner une cellule sur la feuille du classeur,
  • Revenir dans l’éditeur de code et placer le point d’insertion dans les bornes de la procédure mef_bleue(),
  • Cliquer sur la flèche de lecture pour exécuter le code,

La cellule apparaît bien avec les attributs de mise en forme précédents avec en plus la bordure. 

De retour sur la feuille, le bouton apparaît à côté du précédent. Si vous sélectionnez des cellules et que vous cliquez dessus, vous exécutez la macro de la même façon que la précédente. Nous allons maintenant nettoyer le travail précédent.

  • Revenir dans l’éditeur de code,
  • Sélectionner toutes les lignes de code de la procédure bordure(), du Sub au End Sub,
  • Les supprimer en enfonçant la touche Suppr du clavier,

Son code étant supprimé, la macro bordure ne sera plus proposée dans la liste des macros, notamment pour la création de boutons.

Les objets Range et Cells : Comment les utiliser ?

Quoi de mieux qu’une macro automatique pour connaître l’objet qui permet de désigner et manipuler une cellule en particulier ? Car jusqu’alors l’objet Selection impliquait que nous agissions sur une plage présélectionnée. Et si nous voulons agir sur des cellules précises, référencées par rapport à leurs coordonnées, comment fait-on ? C’est ce à quoi nous allons répondre en demandant à une macro de nous enregistrer pendant que nous sélectionnons une cellule en particulier.

  • Activer le ruban Développeur depuis la feuille du classeur Excel,
  • Cliquer sur le bouton Enregistrer une macro,
  • La nommer cellules par exemple et cliquer sur Ok pour démarrer,
  • Sélectionner par exemple la cellule G10 avec la souris,
  • Cliquer sur le bouton Arrêter l’enregistrement du ruban Développeur,
  • Afficher l’éditeur de code en cliquant sur le bouton Visual Basic du ruban Développeur,

Si vous ne voyez pas votre nouvelle macro dans l’éditeur de code, c’est qu’elle a été écrite dans un nouveau module.

  • Double cliquer alors sur la rubrique Module2 depuis la fenêtre Projet sur la gauche,

Le code excessivement simple de la macro apparaît. Vous notez l’utilisation de l’objet Range avec en paramètre et entre guillemets, les références de la cellule telles qu’elles sont identifiées sous ExcelRange à l’origine désigne une plage de cellules mais si une seule cellule est indiquée, c’est la cellule seule qui est pointée. Associée à l’objet Range, nous avons la méthode Select. Souvenez-vous, une méthode réalise une action et n’affecte pas de valeur à une propriété. Ici l’action est donc de sélectionner la cellule ou la plage désignée. L’objet Range possède donc des propriétés et méthodes simples à découvrir permettant de personnaliser et paramétrer les cellules.

  • Dans l’éditeur, sous la première ligne de code, saisir Range(‘G10’),

Lorsque vous tapez le point (.) après l’objet Range, vous appelez une propriété ou une méthode de l’objet. C’est pourquoi une petite liste déroulante s’affiche avec la saisie. Elle vous propose toutes les méthodes de l’objet (précédées d’une icône verte) ainsi que toutes ses propriétés (précédées d’une icône grise). Si vous tapez les premières lettres de la propriété, par exemple, la liste vous place sur les propriétés commençant de la sorte.

  • Taper ou sélectionner ainsi la propriété Font puis taper un nouveau point (.),

Vous appelez ainsi les propriétés dérivées de la propriété Font.

  • Taper ou sélectionner ainsi la propriété Size pour la taille de la police,
  • Lui affecter la valeur 12 (=12),

Comme nous le disions, l’objet Range sert initialement à désigner une plage de cellules. Pour ce faire, tout comme dans les fonctions Excel, il suffit d’indiquer les références séparées du symbole deux points (:) pour une plage de cellules contigües.

Sachez enfin qu’il existe l’objet Cells qui permet de désigner une cellule en fonction de son numéro de ligne et de son numéro de colonne. Cet objet attend deux paramètres, le numéro de la ligne et le numéro de la colonne. Ainsi pour la cellule C10, nous lui transmettrons les valeurs 10 pour la ligne et 3 pour la colonne. Comme cet objet manipule des cellules, il dispose des mêmes propriétés et méthodes que les objets Sélection et Range.

Nous espérons que cet article vous a plu, n’hésitez pas à vous abonner à notre newsletter pour être toujours au courant des actualités tech, data et IA.

Facebook
Twitter
LinkedIn

Tag de l'article :

Vous souhaitez être alerté des nouveaux contenus en data science et intelligence artificielle ?

Laissez-nous votre e-mail, pour que nous puissions vous envoyer vos nouveaux articles au moment de leur publication !

Newsletter icone

S'inscrire à la JPO :

Vous souhaitez recevoir notre newsletter data 💌 hebdomadaire ?