top of page

VBA

Visual Basic for Applications (VBA) est un language de programmation de Microsoft qui est intégré dans toutes les applications de Microsoft Office. Dans cette fiche, nous allons voir VBA appliqué à Excel.  

 

Pour pouvoir accéder à l'onglet VBA sur Excel, il faut aller dans Option, puis Personnalisé le ruban et cocher Développeur. Dans l'onglet développeur, cliquez sur Visual Basic (en haut à gauche).

Il faut aussi activé les macros, pour cela il faut désactiver la sécurité des macros dans l'onglet développeur.

 

Exécuter une macro / programme :

- Soit sur VBA, cliquez sur Exécuter.

- Soit dans l'onglet Développeur sur Excel, cliquez sur Macro, sélectionnez votre macro puis cliquez sur Exécuter.

 

Pour mettre un point d'arrêt sur une ligne d'un programme, il faut cliquer à gauche de la ligne.

 

Pour exécuter pas à pas un programme, il faut utiliser la touche F8.

 

Pour faire un commentaire, il faut le précéder par un apostrophe :

' commentaire

 

Créer un programme / une macro :

sub nom_programme( )

   actions

end sub

 

Quand on écrit un programme, il est parfois utile de faire appel à un autre programme. À la place de faire un vulgaire copier coller du programme, je vous conseille d'utiliser plutôt la fonction call qui a pour argument le nom du programme dont on veut faire appel.

call(nom_programme)

Déclarer une variable :

dim nom_variable as type

 

Déclarer plusieurs variables :

dim nom_variable1, nom_variable2, nom_variable3 as type

 

Déclarer une variable qui sera utilisable en dehors de la macro :

public nom_variable as type

 

Les principaux types de variables sont :

- integer

- string

- single

- double

- long

 

Afficher un message à l'écran :

msgbox("Message textuel à écrire")

msgbox(variable à afficher) ' On ne met pas d'apostrophe pour les variables à afficher.

 

Pour faire une concaténation, on utilise le symbole & :

msgbox("La moyenne est : " & variable_moyenne)

 

Pour faire un saut de ligne / retour chariot, on utilise la commande char(10) ou char(13) :

msgbox("La moyenne est : " & variable_moyenne & char(10) & "La médiane est : " & variable_médiane)

 

Si on souhaite ajouter des options (boutons, titre) au message à afficher, on précède la commande msgbox( ) par l'instruction call :

call msgbox("Bonjour", option_bouton, "Écrire ici un titre")

call msgbox("Bonjour", , "Écrire ici un titre") ' On doit laisser les deux virgules si on ne veut pas préciser d'option pour les boutons.

 

 

On peut aussi utiliser une boîte de dialogue qui permet de récupérer une valeur dans une variable. On affiche une question, puis l'utilisateur rentre une valeur qui sera enregistrer dans une variable :

variable_reponse = inputbox("Écrire ici une question")

 

Interactions avec Excel :

Écrire dans une cellule :

- Soit cells(numéro ligne, numéro colonne) = "Ce texte sera écrit dans la cellule"

- Soit range("nom cellule") = "Ce texte sera écrit dans la cellule"

 

Pour préciser une feuille :

- Soit sheets("Feuil2").cells(1,1) = "..."

- Soit sheets("Feuil2").range("A1") = "..."

 

À l'inverse, on peut stocker dans une variable le contenu d'une cellule :

var = sheets("Feuil2").cells(2,4)

 

 

Renvoie vers un point du programme :

A : ' Création de mon ancre. Ne pas oublier les deux points.

goto A ' Renvoie vers mon ancre nommée A.

 

Incrémenter une valeur :

i = i + 1

 

Enfin, pour supprimer le contenu de toutes les cellules d'une feuille, il faudra utiliser la fonction clear :

Sheets("Feuil2").Cells.Clear ' Supprime le contenu de toutes les cellules de la feuille nommée Feuil2.

Pour supprimer le contenu d'une cellule en particulier :

Sheets("Feuil2").Range("A1").Clear ' Supprime le contenu de la cellule A1 de la feuille nommée Feuil2.

Sheets("Feuil2").Cells(1,1).Clear ' Supprime le contenu de la cellule A1 (ligne 1, colonne 1) de la feuille nommée Feuil2.

Boucle si :

Condition avec deux cas :

if condition then

    actions si la condition est remplie

else

    actions si la condition n'est pas remplie

end if

 

Condition avec plus de deux cas :

if condition then

    actions

elseif condition then

    actions

elseif condition then

    actions

else

    actions

end if

 

​À savoir : comme avec tous les langages de programmation, on peut utiliser les mots clés and et or. Avec and, les deux conditions doivent êtres réalisées. Avec or, au moins une des deux conditions doit être réalisée.

 

 

Astuce : dans une condition, pour vérifier qu'une cellule est vide, on utilise les guillemets avec rien dedans :

if cells(1,1) = "" then

 

On peut aussi utiliser select case, pour faire des conditions :

select case nom_variable

    case is < 0

        actions

    case 0 to 5

        actions

    case else

        actions

end select

 

 

Boucle pour :

for i = ... to ... step ...

    actions

next ' Avec la boucle if, on met end if à la fin, avec la boucle for, on met next.

 

L'option step est facultatif, elle sert à préciser le pas de la boucle (de 2 en 2 par exemple : step 2).

 

 

Boucle tant que :

while condition

    actions

wend ' Avec la boucle if, on met end if à la fin, avec la boucle while, on met wend.

 

 

Autres fonctions utiles :

 

Générer un nombre décimale aléatoire entre 0 et 1 (non compris) :

rnd(1)

À savoir que rnd(1) fait strictement la même chose que rnd(10).

 

Il est fortement conseillé de mettre la commande randomize, avant l'utilisation de la fonction rnd, afin de la réinitialiser et de la rendre imprévisible :

randomize

rnd(1)

 

Générer un nombre entier aléatoire entre 1 et 40

int(rnd(1)*40+1)

 

À savoir : la fonction int permet d'avoir la partie entière d'un nombre. Attention : cette fonction ne va pas faire un arrondi, elle va juste prendre les chiffres à gauche de la virgule.

 

Fonctions sur les chaînes de caractères :

 

Renvoyer un nombre de caractères à gauche de la chaîne :

left(variable textuelle, nombre de caractère)

 

Renvoyer un nombre de caractères à droite de la chaîne :

right(variable textuelle, nombre de caractère)

 

Renvoyer un nombre de caractères au milieu de la chaîne :

mid(variable textuelle, numéro du premier caractère, nombre de caractère)

 

 

Renvoyer la taille d'une chaîne de caractères :

len(variable textuelle)

 

Fonctions sur les dates :

Renvoyer l'année :

year(variable date)

 

Renvoyer le mois (en chiffre) :

month(variable date)

 

Renvoyer le jour (en chiffre) :

day(variable date)

 

Renvoyer le jour de la semaine (en lettre):

weekday(variable date)

 

Parcours de lignes et de caractères :

Parcours de toutes les lignes d'une colonne d'un fichier :

Si on connait le nombre de lignes :

for i=1 to NombreLignes

   ...

next

Si on ne connait pas le nombre de lignes :

i = 1

while cells(i,1) <> ""  ' Tant que la cellule i de la colonne 1 n'est pas vide.

   ...

   i = i + 1  ' Ne pas oublier d'incrémenter le compteur de lignes.

wend

Parcours de tous les caractères d'une cellule :

for i = 1 to len(cells(...,...)) ' Pour i allant de 1 à la fin de la chaine de caractères de la cellule ...

   if mid(cells(...,...), i, 1) = "..."  ' Si le caractère est égale à ...

      ...

   end if

next

Important : pour lancer une macro depuis Excel juste en cliquant sur un bouton personnalisable, il faut aller dans l'onglet développeur sur Excel, puis cliquer sur insérer et choisir un bouton.

Cela peut être utile pour qu'un utilisateur non initié au language VBA puisse lancer des macros depuis Excel.

 

 

Enfin, si vous ne savez pas comment coder une action sous Excel :

Allez dans l'onglet développeur, cliquez sur enregistrer une macro, faites l'action sous Excel, puis arrêter l'enregistrement.

Pour retrouver le code de l'action sous Excel, allez dans vos macros VBA.

Pour finir, quand vous enregistrer un fichier Excel, n'oubliez pas de spécifier le type "Classeur Excel (prenant en charge les macros)". Si vous ne le faites pas, vous perdrez tous vos programmes.

 

bottom of page