Les macros Excel peuvent vous faire gagner beaucoup de temps en automatisant les processus Excel que vous utilisez souvent. Mais les macros sont en fait assez limitées. Il est facile de faire une erreur avec l'outil d'enregistrement, et le processus d'enregistrement est délicat.
L'utilisation de VBA pour créer des macros vous donne beaucoup plus de puissance. Vous pouvez dire à Excel exactement quoi faire et comment le faire. Vous avez également accès à beaucoup plus de fonctions et de capacités. Si vous utilisez régulièrement Excel, cela vaut la peine d'apprendre à créer des macros VBA.
Nous allons commencer par les bases.
VBA est Visual Basic pour Applications , un langage de programmation que vous pouvez utiliser dans de nombreuses applications Microsoft. Visual Basic est un langage de programmation et VBA en est la version spécifique à l'application. (Microsoft a abandonné Visual Basic en 2008, mais VBA est toujours aussi performant).
Heureusement pour les non-programmeurs, VBA est très simple et l'interface que vous utilisez pour l'éditer offre beaucoup d'assistance. De nombreuses commandes que vous utiliserez, des suggestions contextuelles et des complétions automatiques, vous aideront à faire fonctionner votre script rapidement.
Pourtant, VBA prend un certain temps pour s'y habituer.
Si VBA est plus difficile que d'enregistrer une macro, pourquoi l'utiliseriez-vous ? La réponse courte est que vous obtenez beaucoup plus de puissance des macros VBA.
Au lieu de cliquer autour de votre feuille de calcul et d'enregistrer ces clics, vous pouvez accéder à la gamme complète de fonctions et de capacités d'Excel. Vous avez juste besoin de savoir comment les utiliser.
Et une fois que vous êtes plus à l'aise avec VBA, vous pouvez faire tout ce que vous pourriez faire dans une macro ordinaire en beaucoup moins de temps. Les résultats seront également plus prévisibles, comme vous le dites à Excel exactement ce qu'il faut faire. Il n'y a aucune ambiguïté.
Une fois que vous avez créé votre macro VBA, il est facile de l'enregistrer et de la partager afin que n'importe qui d'autre puisse en profiter. Ceci est particulièrement utile lorsque vous travaillez avec de nombreuses personnes qui ont besoin de faire les mêmes choses dans Excel.
Regardons une simple macro VBA pour voir comment cela fonctionne.
Regardons une macro simple. Notre feuille de calcul contient les noms des employés, le numéro du magasin où les employés travaillent et leurs ventes trimestrielles.
Cette macro ajoutera les ventes trimestrielles de chaque magasin et écrira ces totaux dans les cellules de la feuille de calcul (si vous ne savez pas comment accéder à la boîte de dialogue VBA, consultez notre procédure pas à pas VBA ici) :
Sub StoreSales()
Dim Sum1 comme devise
Dim Sum2 comme devise
Dim Sum3 comme devise
Dim Sum4 comme devise
Pour chaque cellule dans la plage ("C2:C51")
Activer.Cellule
Si est vide (cellule), puis quittez pour
Si ActiveCell.Offset(0, -1) =1 Alors
Sum1 =Sum1 + Cell.Value
SinonSi ActiveCell.Offset(0, -1) =2 Alors
Sum2 =Sum2 + Cell.Value
SinonSi ActiveCell.Offset(0, -1) =3 Alors
Sum3 =Sum3 + Cell.Value
SinonSi ActiveCell.Offset(0, -1) =4 Alors
Sum4 =Sum4 + Cell.Value
Fin si
Cellule suivante
Plage("F2").Valeur =Somme1
Plage("F3").Valeur =Somme2
Plage("F4").Valeur =Sum3
Plage("F5").Valeur =Somme4
Fin du sous-titre
Cela peut sembler long et compliqué, mais nous allons le décomposer afin que vous puissiez voir les éléments individuels et en apprendre un peu plus sur les bases de VBA.
Au début du module, nous avons "Sub StoreSales()". Ceci définit un nouveau sous appelé StoreSales.
Vous pouvez également définir des fonctions --- la différence est que les fonctions peuvent renvoyer des valeurs, et les subs ne le peuvent pas (si vous connaissez d'autres langages de programmation, les subs sont l'équivalent des méthodes). Dans ce cas, nous n'avons pas besoin de renvoyer une valeur, nous utilisons donc un sub.
À la fin du module, nous avons "End Sub", qui indique à Excel que nous en avons terminé avec cette macro VBA.
Les premières lignes de code de notre script commencent toutes par "Dim". Dim est la commande de VBA pour déclarer une variable.
Donc "Dim Sum1" crée une nouvelle variable appelée "Sum1". Cependant, nous devons indiquer à Excel de quel type de variable il s'agit. Nous devons choisir un type de données. Il existe de nombreux types de données différents dans VBA --- vous pouvez trouver la liste complète dans les documents d'aide de Microsoft.
Étant donné que notre macro VBA va traiter des devises, nous utilisons le type de données Currency.
L'instruction "Dim Sum1 As Currency" indique à Excel de créer une nouvelle variable de devise appelée Sum1. Chaque variable que vous déclarez doit avoir une instruction "As" pour indiquer à Excel son type.
Les boucles sont parmi les choses les plus puissantes que vous puissiez créer dans n'importe quel langage de programmation. Si vous n'êtes pas familier avec les boucles, consultez cette explication des boucles Do-While. Dans cet exemple, nous utilisons une boucle For, qui est également abordée dans l'article.
Voici à quoi ressemble la boucle :
Pour chaque cellule de la plage("C2:C51")
[un tas de trucs]
Cellule suivante
Cela indique à Excel de parcourir les cellules de la plage que nous avons spécifiée. Nous avons utilisé un objet Range, qui est un type d'objet spécifique dans VBA. Lorsque nous l'utilisons de cette façon---Range("C2:C51")---il indique à Excel que nous sommes intéressés par ces 50 cellules.
"Pour chaque" indique à Excel que nous allons faire quelque chose avec chaque cellule de la plage. "Next Cell" vient après tout ce que nous voulons faire et indique à Excel de démarrer la boucle depuis le début (en commençant par la cellule suivante).
Nous avons également cette déclaration :"Si IsEmpty(Cell) Then Exit For."
Pouvez-vous deviner ce qu'il fait ?
Remarque : Strictement parlant, l'utilisation d'une boucle While aurait peut-être été un meilleur choix. Cependant, dans un souci d'enseignement, j'ai décidé d'utiliser une boucle For avec une sortie.
Le cœur de cette macro particulière se trouve dans les instructions If-Then-Else. Voici notre séquence d'instructions conditionnelles :
Si ActiveCell.Offset(0, -1) =1 Alors
Sum1 =Sum1 + Cell.Value
SinonSi ActiveCell.Offset(0, -1) =2 Alors
Sum2 =Sum2 + Cell.Value
SinonSi ActiveCell.Offset(0, -1) =3 Alors
Sum3 =Sum3 + Cell.Value
SinonSi ActiveCell.Offset(0, -1) =4 Alors
Sum4 =Sum4 + Cell.Value
Fin si
Pour la plupart, vous pouvez probablement deviner ce que font ces déclarations. Cependant, vous ne connaissez peut-être pas ActiveCell.Offset. "ActiveCell.Offset(0, -1)" indique à Excel de regarder la cellule qui se trouve une colonne à gauche de la cellule active.
Dans notre cas, cela indique à Excel de consulter la colonne du numéro de magasin. Si Excel trouve un 1 dans cette colonne, il prend le contenu de la cellule active et l'ajoute à Sum1. S'il trouve un 2, il ajoute le contenu de la cellule active à Sum2. Et ainsi de suite.
Excel passe en revue toutes ces déclarations dans l'ordre. Si l'instruction conditionnelle est satisfaite, elle complète l'instruction Then. Sinon, il passe au prochain ElseIf. S'il va jusqu'au bout et qu'aucune des conditions n'a été remplie, il n'entreprendra aucune action.
La combinaison de la boucle et des conditions est ce qui pilote cette macro. La boucle indique à Excel de parcourir chaque cellule de la sélection, et les conditions lui indiquent quoi faire avec cette cellule.
Enfin, nous arrivons à écrire les résultats de nos calculs dans les cellules. Voici les lignes que nous utilisons pour cela :
Range("F2").Value =Sum1
Plage("F3").Valeur =Somme2
Plage("F4").Valeur =Sum3
Plage("F5").Valeur =Somme4
Avec ".Value" et un signe égal, nous définissons chacune de ces cellules sur la valeur d'une de nos variables.
Et c'est tout! Nous disons à Excel que nous avons fini d'écrire ce Sub avec "End Sub" et que la macro VBA est terminée.
Lorsque nous exécutons la macro avec les Macros bouton dans le Développeur tab, on récupère nos sommes :
Lorsque vous regardez pour la première fois la macro VBA ci-dessus, elle semble assez complexe. Mais après l'avoir décomposé en ses éléments constitutifs, la logique devient claire. Comme tout langage de script, il faut du temps pour s'habituer à la syntaxe de VBA.
Mais avec la pratique, vous développerez votre vocabulaire VBA et pourrez écrire des macros plus rapidement, avec plus de précision et avec beaucoup plus de puissance que vous ne pourriez jamais les enregistrer.
Lorsque vous êtes bloqué, lancer une recherche Google est un moyen rapide d'obtenir des réponses à vos questions VBA. Et la référence Excel VBA de Microsoft peut être utile si vous êtes prêt à l'explorer pour une réponse technique.
Une fois que vous maîtrisez les bases, vous pouvez commencer à utiliser VBA pour des tâches telles que l'envoi d'e-mails à partir d'Excel, l'exportation de tâches Outlook et l'affichage des informations de votre PC.