“Excelle, et tu vivras.”

J Joubert

Découvrez l’univers puissant d’Excel et maximisez votre productivité

Le langage VBA, ou Visual Basic for Applications, est un outil puissant pour automatiser des tâches dans Microsoft Excel. Dans cet article, nous allons vous guider à travers les bases du VBA, spécialement conçu pour les débutants, sans besoin de connaissances préalables en programmation.

Qu'est-ce que le Langage VBA ?

Le langage VBA (Visual Basic for Applications) est un langage de programmation intégré à Microsoft Office. Il permet d’automatiser des actions, d’interagir avec des feuilles de calcul Excel et d’accomplir une variété de tâches de manière efficace.

L’utilisation de VBA dans Excel offre des avantages considérables. Vous pouvez automatiser des tâches répétitives, réduire les erreurs humaines et gagner du temps. Imaginez la création automatisée de rapports, la mise à jour de données en un clic, ou même l’analyse de données complexe en quelques secondes.

Pour en savoir plus sur l’amélioration continue et la démarche qualité, consultez notre article de blog détaillé sur le sujet : [La démarche PDCA: quel est son impact pour la construction].

Avant de plonger dans le code, familiarisez-vous avec l’environnement de développement VBA. Ouvrez Excel, allez dans « Développeur » et explorez l’éditeur VBA. Vous y trouverez des modules, des procédures et des commentaires pour organiser votre code.

Programmation de fonctions personnalisées

Fonctions, variables, et types de variables

Une fonction, en informatique comme en mathématiques, est un processus retournant un résultat à partir d’une ou plusieurs données.

En mathématiques, on a plutôt l’habitude que le résultat soit numérique et ne dépende que d’une seule donnée (ou variable), elle-même numérique.

En informatique, on va manipuler des fonctions plus variées : la ou les variables, ainsi que le résultat d’une fonction, peuvent être du texte, une valeur logique (vrai ou faux)… De plus, pour des questions de mémoire nécessaire pour stocker des informations, on distinguera différentes familles de variables numériques : les entiers, les nombres décimaux restant dans une plage restreinte, les nombres décimaux pouvant prendre de grandes valeurs…

En VBA, on rencontre en particulier les types de variables suivants :

  • String (chaines de caractère) : N’importe quel texte
  • Byte (Petits entiers naturels) : De 0 à 255
  • Integer (Petits nombres entiers) : De -32 768 à 32 767
  • Long (Grands nombres entiers) : De -2 147 483 648 à 2 147 483 647
  • Single (Petits nombres décimaux (avec jusqu’à 7 chiffres significatifs)) : Sur [-3,4×1038 ; 3,4×1038]
    Les valeurs inférieures à 1,4×10-45 sont assimilées à 0
  • Double (Grands nombres réels) : Sur [-1,7×10308 ; 1,7×10308]
    Les valeurs inférieures à 4,9×10-324 sont assimilées à 0
  • Boolean (Booléen (valeurs logiques)) : True ou False
  • Variant (Universel) : Le type Variant englobe tous les types précédents. Il est à éviter en programmation car il ne permet pas de contrôler la cohérence de certains programmes.

NOTA : Les plus utilisés dans nos cas courants sont les types soulignés.

Remarques :

Dans la plupart des langages de programmation, il est obligatoire de préciser le type de chaque variable d’un programme. Ce n’est pas le cas pour le langage VBA qui affecte le type « Variant » à toute variable dont le type n’est pas déclaré. Le typage des variables peut donc paraître comme une contrainte superflue, mais il est malgré tout très fortement recommandé de s’y astreindre, car :

  • On détectera plus facilement les failles éventuelles d’un programme. Par exemple, si un programme fait appel à une variable censée ne prendre que des valeurs entières et si on n’a pas précisé le type de cette variable, alors un utilisateur qui attribuerait à cette variable une valeur non entière risque d’être confronté à un « bug » du programme sans en comprendre la cause.
  • Si on souhaite programmer dans un autre langage que VBA, moins permissif, on aura déjà acquis de bons réflexes.

Squelette du programme d’une fonction

Le programme d’une fonction en VBA comporte au minimum les lignes suivantes :

Function NomDeLaFonction(Var1 As Type1, Var2 As Type2,…) As TypeDuResultat

NomDeLaFonction=[Résultat ou Formule permettant de calculer le résultat]

End Function

On peut choisir librement le nom qu’on souhaite donner à la fonction et à ses variables. Les seules contraintes sont :

  • Ne pas utiliser un nom ayant déjà une autre signification pour Excel (nom déjà donné à une autre fonction, à une variable…) . Exemple : Somme, Produit, Recherche, etc.
  • Ne pas mettre d’espace. Cette contrainte est générale à tout ce à quoi on attribue un nom.
  • Ne pas utiliser certains caractères spéciaux, comme %…
  • Même si c’est toléré en VBA, éviter d’utiliser des caractères accentués (é, è, à…)
  • Privilégier des noms évocateurs pour que la relecture du programme soit plus aisée.
  • Préférer des noms avec une première lettre en majuscule.

Utilisation d’une fonction dans une feuille de calcul

Une fois programmée dans un module d’un classeur Excel, une fonction peut être utilisée dans les feuilles de ce classeur comme n’importe quelle autre fonction habituelle d’Excel, en passant par exemple par le bouton « Insérer une fonction » de l’onglet « Formules ». On retrouve la formule dans la catégorie « Personnalisée » de la boite de dialogue « Insérer une fonction » :

Programmation d'une macro

Ossature d’une macro

Une macro (appelée aussi procédure) est une séquence d’instructions en langage VBA qu’Excel interprète et qui conduisent à la réalisation de différentes actions ou tâches. Une macro s’écrit dans un module (comme pour les fonctions) selon la syntaxe suivante :

Sub NomDeLaMacro()

[séquence d’instructions traduisant ce que la macro doit faire]

End Sub

  • On ne détaillera pas les macros dites « sans passage de paramètres » ce qui explique la présence de parenthèses vides.
  • A la différence d’une fonction, la première ligne du programme d’une macro ne se termine pas par « As TypeDeResultat », car le rôle d’une macro n’est pas de retourner un résultat.
  • Parmi les instructions figurant dans le corps d’une macro, on peut trouver :
    • Des structures conditionnelles « If/Then/Else/End If »
    • La déclaration et l’utilisation de variables locales
    • L’appel à une fonction programmée dans le même projet VBA

Exemple de macro :

Sub AfficherMessage()

MsgBox "Bonjour, je suis votre premier programme VBA !"

End Sub

Exécution d’une macro

Pour exécuter une macro, il y a plusieurs solutions. Soit en utilisant le gestionnaire de macro (Alt + F8) soit en créant un bouton.

La seconde solution est préférable dans le cas où plusieurs utilisateurs viendront à se servir de la macro en question.

Pour créer un bouton il faut se rendre dans l’onglet « Développeur » (procédure d’affichage en §2.2, figure 2), puis dans le domaine « Contrôle » cliquez sur « Insérer » et « Bouton » (cf. Figure 4).

Il faut ensuite tracer l’emprise du bouton (emplacement, taille, etc.) et lui affecter la macro souhaitée (figure 5). Si  la macro ne convient plus au bouton (erreur, macro obsolète, inexistante, etc.) , il y a toujours une possibilité d’affecter une macro différente au même bouton (sans pour autant recréer un autre bouton de la même taille au même endroit). Dans ce cas-là, il suffit de cliquer droit sur le bouton en question et sélectionner « Affecter une macro ».

Exécution d’une macro VBA

Appel aux cellules d’un classeur

Dans un programme VBA, on peut faire référence à une cellule d’un classeur Excel afin de récupérer ou modifier son contenu ou ses paramètres de mise en forme. Ainsi, les lignes suivantes permettent de déclarer une variable locale et d’y enregistrer le contenu d’une cellule située sur la Lème ligne et la Cème colonne d’une feuille du classeur :

Dim NomDeVariableLocale As TypeVariableLocale

NomDeVariableLocale=Sheets(« NomDeFeuilleDeClasseur »).Cells(L,C).Value

 

Dans la syntaxe « Sheets(“NomDeFeuilleDeClasseur”).Cells(L,C).Value », on va donc du plus général au plus précis :

  • Sheets(“NomDeFeuilleDeClasseur”) permet de préciser la feuille du classeur sur laquelle se trouve la cellule à laquelle on veut faire référence.
  • Cells(L,C) permet de préciser que la cellule se trouve sur la ligne numéro L et la colonne numéro C ; L et C doivent donc être des nombres entiers.
  • Value est là pour signifier qu’on s’intéresse à l’information contenue dans la cellule.

 

Pour bien comprendre cette syntaxe, voyons celles permettant de basculer la couleur de la police de caractère d’une cellule en rouge et de basculer la couleur de remplissage d’une cellule en bleu :

Sheets(« NomDeFeuilleDeClasseur »).Cells(i,j).value= « Blabla »

Sheets(« NomDeFeuilleDeClasseur »).Cells(m,n).Font.Color=vbRed

Sheets(« NomDeFeuilleDeClasseur »).Cells(p,r).Interior.Color=vbBlue

Structure conditionnelle (If/End If)

Lorsqu’on souhaite mettre en place un test afin de préciser, en fonction du résultat de ce test, comment un programme doit s’exécuter, on fait appel à la structure conditionnelle « If/Then/Else/End If » selon l’une des syntaxes suivantes.

Cas où il y a des instructions différentes à exécuter selon que le test est concluant ou non

If [Condition à tester] Then

[Première instruction à exécuter quand le test est concluant]

[Deuxième instruction à exécuter quand le test est concluant]

[…]

[Dernière instruction à exécuter quand le test est concluant]

Else

[Première instruction à exécuter quand le test n’est pas concluant]

[Deuxième instruction à exécuter quand le test n’est pas concluant]

[…]

[Dernière instruction à exécuter quand le test n’est pas concluant]

End If

On note en particulier que le passage à la ligne est impératif après le « Then » et le « Else ».

Cas où il n’y a des instructions à exécuter que lorsque le test est concluant

Le bloc de lignes introduit par la commande « Else » est alors inutile :

If [Condition à tester] Then

[Première instruction à exécuter quand le test est concluant]

[Deuxième instruction à exécuter quand le test est concluant]

[…]

[Dernière instruction à exécuter quand le test est concluant]

End If

Conditions multiples

Lorsque la condition à tester résulte de la combinaison de plusieurs critères, on peut utiliser les opérateurs logiques « And » et « Or ». Par exemple, si on veut tester la condition « x est-il dans l’intervalle [1;3[ ? », on écrira :

If x>=1 And x<3 Then

Ou encore, si on veut tester la condition « x est-il dans le domaine ]-∞;1[u]3;+∞[ ? », on écrira :

If x<1 Or x>3 Then

Structure boucle déterminée (For/Next)

Notion de boucle

En informatique, une boucle est une séquence d’instructions destinées à être répétées un certain nombre de fois.

Plutôt que de répéter le code lui-même, à l’aide de multiples copier-coller, il existe différents types d’instructions précisant à l’ordinateur que certaines lignes de code sont à parcourir à plusieurs reprises. Ce sont en général les critères donnés pour indiquer le nombre d’itérations qui différencient les types de boucles les uns des autres.

On aborde ici la boucle s’appuyant sur les commandes VBA « For » et « Next ».

Syntaxe

La boucle « For/Next » s’appuie sur une variable jouant le rôle d’un compteur dont la valeur est incrémentée selon un pas donné, au gré des répétitions, d’une valeur initiale à une valeur finale. La syntaxe est la suivante :

Dim VarCompteur As TypeVariableCompteur

For VarCompteur=[Valeur initiale] To [Valeur finale] Step [Valeur du pas]

[Première instruction à répéter]

[Deuxième instruction à répéter]

[…]

[Dernière instruction à répéter]

Next VarCompteur

Remarques :

  • En pratique, la variable « VarCompteur » prend généralement des valeurs entières et est donc de type « Double » (voire « Integer »).
  • Dans le cas où le pas vaut 1, on peut omettre le « Step » à la fin de la ligne comportant l’instruction « For ».
  • La valeur initiale peut être supérieure à la valeur finale si on met un pas négatif.
  • On peut très facilement « tourner en boucle », c’est-à-dire lancer une boucle sans fin… Dans un tel cas, la combinaison de touches « Ctrl+Pause » provoque l’interruption du programme. Malgré tout, il est recommandé de sauvegarder son travail AVANT d’exécuter un programme comportant une boucle.

Structure boucle indéterminée (Do/Loop)

Critère de sortie de boucle

L’utilisation de la structure de boucle « For/Next » vue au paragraphe précédent suppose qu’on sache et/ou qu’on fixe à l’avance le nombre de fois que les instructions doivent être répétées.

Dans certains cas, cette structure n’est donc pas adaptée. Il se peut par contre qu’au gré des répétitions, certaines « données » évoluent régulièrement, et que l’on souhaite stopper la répétition des instructions au moment où ces « données » vérifient une certaine condition. On utilise alors une des syntaxes de boucle « Do/Loop ».

Syntaxe

La boucle « Do/Loop » peut s’écrire selon 4 syntaxes voisines :

Do

[Première instruction à répéter]

[Deuxième instruction à répéter]

[…]

[Dernière instruction à répéter]

Loop Until [condition]

Ou :

Do Until [condition]

[Première instruction à répéter]

[Deuxième instruction à répéter]

[…]

[Dernière instruction à répéter]

Loop

Ou :

Do

[Première instruction à répéter]

[Deuxième instruction à répéter]

[…]

[Dernière instruction à répéter]

Loop While [condition]

Ou :

Do While [condition]

[Première instruction à répéter]

[Deuxième instruction à répéter]

[…]

[Dernière instruction à répéter]

Loop

Remarques :

  • Les syntaxes avec la commande « While » (tant que) sont équivalentes aux syntaxes avec la commande Until (jusqu’à ce que) à ceci près que la condition testée avec l’une des deux commandes doit être le contraire de celle testée avec l’autre.
  • Dans les syntaxes se terminant par la ligne « Loop Until [condition] » ou « Loop While [condition] », le test de la condition apparaît après les lignes des différentes instructions contenues dans la boucle : ces instructions sont donc exécutées au moins une fois.
  • Dans les syntaxes commençant par la ligne « Do Until [condition] » ou « Do While [condition] », le test de la condition est réalisé avant l’exécution des instructions : par conséquent, si la condition est vérifiée lors de l’entrée dans la boucle, aucune des instructions figurant dans la boucle n’est réalisée (le programme « saute » directement à la ligne suivant le « Loop »).
  • Comme pour les boucles « For/Next », on peut très facilement « tourner en boucle », c’est-à-dire lancer une boucle sans fin ! Dans un tel cas, la combinaison de touches « Ctrl+Pause » provoque l’interruption du programme. Malgré tout, il est recommandé de sauvegarder son travail AVANT d’exécuter un programme comportant une boucle.

Astuces

Pour créer des macros « adaptées » alors qu’on ne connait pas forcement la syntaxe ou les options à utiliser, voici un petit conseil. Il existe dans Excel une fonction qui permet d’enregistrer les opérations effectuées… (Onglet « Développeur » / « Enregistrer une macro », voir l’animation ci-dessous)

Réalisez les opérations à effectuer, et à la fin de la procédure cliquer sur « Arrêter l’enregistrement » (même emplacement que « Enregistrer une macro » ), puis aller dans le VBE (Alt + F11). Un nouveau module a été créé et VBA a « traduit » les opérations réalisées en code. On peut s’inspirer/adapter cette syntaxe à la macro souhaitée.

Enregistrement et visualisation d’une nouvelle macro

Ressources pour apprendre davantage

Avec nos formations , nous nous engageons à offrir une expérience de formation sur mesure inégalée.

Qu’il s’agisse de documents, d’exercices pratiques ou de sessions de tutorat personnalisé, nos ressources supplémentaires sont soigneusement élaborées pour s’adapter à votre base de connaissances, garantissant ainsi une adéquation parfaite avec vos besoins spécifiques.

Notre engagement est de vous aider à atteindre vos objectifs de manière efficace et engageante. 

Conclusion

Le langage VBA est une compétence précieuse pour automatiser des tâches dans Excel. En pratiquant et en explorant davantage, vous pouvez devenir un expert en VBA et augmenter votre productivité de manière significative.

N’oubliez pas que la pratique régulière est la clé pour maîtriser le VBA. Alors, lancez-vous, expérimentez, et voyez comment ce langage puissant peut simplifier votre travail avec Excel.

 

🌟Ne perdez pas de vue ces précieuses informations !
Épinglez cet article dans vos favoris dès maintenant 🌟

Nous espérons que cet article vous a été utile et informatif. Pour vous assurer de pouvoir y revenir facilement chaque fois que vous en avez besoin, pensez à épingler cette page dans vos favoris. C’est simple : il vous suffit de cliquer sur l’icône d’épinglage dans votre navigateur ou d’appuyer sur « Ctrl + D » (ou « Cmd + D » sur Mac).

De cette façon, vous aurez toujours un accès rapide à ces informations utiles. N’hésitez pas à partager cet article avec vos amis et collègues, car le partage de connaissances est une façon merveilleuse de faire progresser ensemble.

Avec gratitude,
L’équipe ImaaGO