VBA, découverte du langage et automatisation de tâches

Tags :
  • MON
  • 2024-2025
  • VBA
Auteurs :
  • Charles Cook

Introduction au VBA et utilisation des macro pour des tâches chronophages.

Aucun prérequis

Les lien utiles pour la compréhension de celui-ci.

Ce premier MON fait suite à une problématique rencontrée lors de chacun de mes stages de césure, au cours desquels j'ai été confronté a des "macros" à corriger ou compléter. Ces "macros" permettaient d'automatiser des tâches pouvant être longues et chronophages sur Excel.

Table des matières

Introduction

Le VBA (Visual Basic for Application) est un langage de programmation commun à toutes les applications de la suite Microsoft Office, qui permet d'automatiser des traitements et d'ajouter de nouvelles fonctions afin de répondre à des besoins spécifiques. Cela permet également de personnaliser les documents de travail afin de faciliter la gestion ou le reporting. Dans ce MON, nous nous intéresserons à l'utilisation du langage VBA dans le cadre d'Excel.

Cas d'emploi du langage VBA

Le langage VBA permet de réaliser un certain nombre d'actions :

Interaction avec l'utilisateur par la création de boîtes de dialogue

MsgBox (Texte, Boutons, Titre)

Cette fonction permet simplement d'afficher un message à l'utilisateur lors de l'exécution de la Macro :

Sub exemple()
    MsgBox "Welcome in this Worksheet!"
End Sub

Elle peut également être utilisée pour demander confirmation de réalisation de la Macro :

Sub exemple()
    If MsgBox("Confirmation de suppression de la colonne A ?", vbYesNo, "Demande de confirmation") = vbYes Then
        Columns("A").ClearContents
    End If
End Sub

La boîte de dialogue de confirmation qui s'affiche est alors la suivante :

alt text

InputBox (Texte, Titre, Valeur par défaut)

Cette fonction permet de demander à l'utilisateur de rentrer une valeur dans la boîte de dialogue. Ainsi, le code suivant demande à l'utilisateur de rentrer son nom, avec comme valeur par défaut "NOM", puis affiche le message "Welcome Nom!" :

Sub exemple()
    Dim NomUtilisateur As String

    resultat = InputBox("Entrez votre nom", "Demande renseignement", "NOM")

    MsgBox "Welcome " & resultat & "!"
End Sub

alt text

Utilisation de variables

Les variables sont utilisées en VBA pour stocker et manipuler des données. Il faut pour cela les déclarer au préalable en précisant leur type. Le code suivant stock les différents composants de l'adresse de Centrale Méditerranée sous forme de variables pour afficher celle-ci dans une boîte de dialogue :

Sub exemple()
    Dim Numero As Integer, Rue As String, Code_Postal As Integer, Ville As String

    Numero = 38
    Rue = Frédéric Joliot Curie
    Code_Postal = 13013
    Ville = Marseille

    MsgBox Numero & "Rue" & Rue & Code_Postal & Ville
End Sub

Les conditions

Les conditions sont utilisées pour vérifier une caractéritsique avant la réalisation d'une Macro, ou alors réaliser une action différente en fonction du type ou de la valeur d'une donnée.

Penons l'exemple d'une feuille excel comprenant respectivement dans les cellule A1, B1 et C1 le prénom, nom et ville de l'école d'un étudiant centralien. Le code suivant permet donc de vérfier que toutes les informations sont bien renseignées (il n'y a pas de case vide), puis de donner l'adresse mail associée dans la celulle D1. Un message d'erreur s'affiche si la ville renseignée ne correspond pas à une école du groupe Centrale :

Sub exemple()
    Dim nom As String, prenom As String, ville As String, ecole As String

    If IsEmpty(Range("A1")) Or IsEmpty(Range("B1")) Or IsEmpty(Range("C1")) Then
        MsgBox "Donnée manquante"
    Else
        prenom = Range("A1")
        nom = Range("B1")
        ville = Range("C1")
        Select Case ville
            Case Is = "Marseille"
                ecole = "med"
            Case Is = "Paris"
                ecole = "supelec"
            Case Is = "Lille"
                ecole = "lille"
            Case Is = "Nantes"
                ecole = "nantes"
            Case Is = "Lyon"
                ecole = "lyon"
            Case Else
                MsgBox "Erreur ville"
        End Select
        Range("D1") = prenom & "." & nom & "@centrale-" & ecole & ".fr"
   
    End If
        
End Sub

Les boucles

Les boucles sont utilisées pour répéter des instructions tout en allégant le code, afin de ne pas répéter la même instructions plusieurs fois dans une même macro.

Do While

Cette fonction permet de réaliser instruction tant que la condition est vraie :

Sub exemple()
    Do While [CONDITION]
        *Instruction*
    Loop
End Sub

Do Until

Cette fonction permet de réaliser une instruction jusqu'à ce que la condition soit vraie :

Sub exemple()
    Do Until [CONDITION]
        *Instruction*
    Loop
End Sub

For Next

Cette fonction permet de réaliser une instruction pour un indice variant d'une valeur à une autre :

Sub exemple()
    Dim k As Integer
        
    For k = 1 To 10
        *Instruction*
        k=k+1
    Next
End Sub

Les tableaux

Les tableaux sont utilisés en langage VBA afin de stocker un grand nombre de valeur contrairement aux variables qui ne permettent le stockage que d'une unique valeur. De plus, stocker les valeurs d'une base de données sous forme de tableau permet d'accéder et de manipuler les données plus facilement.

La fonction suivante permet de créer un tableau avec i lignes et j colonnes :

Sub exemple()
    Dim tableau(i-1,j-1)
End sub

On peut ensuite accéder à chaque donnée du tableau en écrivant =

tableau(n,m)

Avec n le numéro de la ligne et m le numéro de la colonne.

Application simple

L'objectif de cette dernière partie est de mettre en pratique dans un exemple simple les différents éléments que nous avons vu ci-dessus. Ainsi, le but est de parvenir, à partir d'une base de données contenant une liste d'élèves centraliens, à créer l'adresse mail associée à chacun et extraire les élèves centraliens de Marseille sur une feuille à part afin de simplifier la consultation de leurs informations.

Inputs

La base donnée servant d'imput comprend 4 colonnes, contenant dans l'ordre les informations suivantes :

Pour cet exemple, la base de données contient 100 étudiants.

Objectif

L'objectif est d'automatiser un certain nombre d'actions :

Code

Le code commenté ci-après :

Sub Trie()
    Dim nom As String, prenom As String, ville As String, ecole As String, i As Integer, j As Integer, k As Integer, tableau(99, 3)
    j = 1   'Compteur qui va permettre de créer le tableau des étudiants de centrale Marseille
    k = 1   'Compteur qui va permettre d'afficher les étudiants de centrale Marseille dans une nouvelle feuille
    For i = 1 To 100     'Compteur qui va permettre de passer en revue l'ensemble de la base de données
        prenom = Range("A" & i + 1)
        nom = Range("B" & i + 1)
        ville = LCase(Trim(Range("C" & i + 1)))     'LCase et Trim permettent de comparer lessuites de caractères sans prendre en compte les majuscules ou les espaces
            If ville = "marseille" Then
                ecole = "med"
                
                'Création du tableau pour les élèves de centrale Marseille
                
                tableau(j - 1, 0) = Range("A" & i + 1)
                tableau(j - 1, 1) = Range("B" & i + 1)
                tableau(j - 1, 2) = Range("C" & i + 1)
                tableau(j - 1, 3) = Range("D" & i + 1) & "A"
                j = j + 1
            ElseIf ville = "paris" Then
                ecole = "supelec"
            ElseIf ville = "lille" Then
                ecole = "lille"
            ElseIf ville = "nantes" Then
                ecole = "nantes"
            Else
                ecole = "lyon"
        End If
    Range("E" & i + 1) = prenom & "." & nom & "@centrale-" & ecole & ".fr"  'Création de l'adresse mail
    Next
    
'Affichage du tableau dans une nouvelle feuille "ECM" afin de pouvoir voir les élèves de centrale Marseille

For k = 1 To 100
    Sheets("ECM").Range("A" & k) = tableau(k - 1, 0)
    Sheets("ECM").Range("B" & k) = tableau(k - 1, 1)
    Sheets("ECM").Range("C" & k) = tableau(k - 1, 2)
    Sheets("ECM").Range("D" & k) = tableau(k - 1, 3)
Next
    
End Sub

Résultats

Les résultats obtenus après avoir exécuté la macro sont les suivants :

Création des adresses mail

alt text

Extraction des centraliens de Marseille

alt text

Pistes d'amélioration

Il est possible d'améliorer le code suivant avec les éléments suivants :

Sources

Pour me former au langage VBA, j'ai utilisé les cours Excel Pratique