Comme vous le savez, VBA arrive avec son lot de fonctions standards. Vous connaissez sans doute celles de conversion de type par exemple.
Or, Excel contient lui aussi tout un tas de fonctions qui peuvent être utiles dans nos macros. Nous pouvons citer la fonction MAX
pour trouver la valeur maximale d’une liste par exemple.
Pour utiliser une fonction Excel en VBA, la syntaxe possible est la suivante :
Application.WorksheetFunction.Max (1, 2, 3) ' Version longue
WorksheetFunction.Max (1, 2, 3) ' Version raccourcie
Application.Max(1, 2, 3) ' Version raccourcie 2
L’avantage des deux premières versions est qu’elles permettent de lister les fonctions disponibles avec la complétion intelligente. Nous remarquons que la casse est différente entre Excel et VBA. Par ailleurs, cela ne se voit pas dans cet exemple, mais les noms de fonction sont alors en anglais, c’est pourquoi il y a parfois un peu de travail de recherche pour trouver l’équivalence.
Parfois, nous pouvons trouver une fonction à la fois en VBA natif et via les fonctions Excel. Par exemple, la fonction VBA.Cos
et WorksheetFunction.Cos
. Autre exemple, la fonction JOINDRE.TEXTE
d’Excel peut prendre un argument supplémentaire (ignorer vide) par rapport à la fonction Join
de VBA, d’où la coexistence des deux. Dans ces cas, j’ai tendance à opter pour la version native en VBA.
Au cours de ce billet, nous allons lister de façon non exhaustive quelques fonctions du tableur en VBA.
Recherches de fonction
Nous ne savons pas toujours quelles sont les fonctions existantes, ni leur équivalence en VBA. Il y a donc parfois un peu de recherche.
Recherches depuis Excel
Si nous souhaitons faire des recherches depuis Excel, voici les possibilités.
Bibliothèque des fonctions
Pour commencer, nous pouvons effectuer des recherches depuis la bibliothèque de fonctions. Ce qui est pratique, c’est qu’elles y sont rangées par catégorie.
En sélectionnant une fonction depuis cette bibliothèque, une fenêtre pour renseigner les arguments apparaît. Celle-ci contient également quelques informations et un lien vers la documentation en ligne.
Fenêtre insertion de fonction
La fenêtre d’insertion de fonction permet aussi de rechercher par catégorie, mais aussi par nom. Nous disposons également de quelques informations et d’un lien vers une aide plus détaillée.
Traduction en VBA
Pour connaître les équivalences en VBA, il y a plusieurs moyens.
Enregistreur de macros
L’enregistreur de macros enregistre les noms de fonctions Excel en anglais, ce qui est un bon point de départ (la casse est notamment différente en VBA encore une fois).
Prenons un exemple en saisissant =JOINDRE.TEXTE(" ";VRAI;"Bonjour";"à";"tous")
dans une cellule :
Sub Macro9()
'
' Macro9 Macro
'
'
Range("H19").Select
ActiveCell.FormulaR1C1 = "=TEXTJOIN("" "",TRUE,""Bonjour"",""à"",""tous"")"
End Sub
IntelliSense
Comme indiqué en introduction, l’aide au développement du VBE liste les fonctions disponibles lors de la saisie de WorksheetFunction.
.
En reprenant l’exemple précédent, nous pouvons écrire WorksheetFunction.Te
dans le VBE et voir TextJoin
apparaître. La fonction Excel JOINDRE.TEXTE
a donc son équivalence TextJoin
en VBA.
Comme nous avons dit en introduction, il existe également la fonction Join
de VBA pour faire la même chose (à un argument prêt).
Dans ce cas, j’ai tendance à préférer l’utilisation de la fonction native VBA.
Documentation en ligne
Cette page de documentation concernant l’objet WorksheetFunction peut servir par exemple.
Au cours de cette section, nous avons vu comment rechercher des informations liées aux fonctions Excel en VBA.
Les fonctions sur les tableaux
Les fonctions nous intéressant particulièrement sont celles-ci concernant les tableaux. Nous allons pouvoir leur fournir des Range
ou encore des Array
.
Pour cette section, nous allons utiliser le jeu de données suivant sorti… tout droit de mon chapeau !
Petite disgression : si vous voulez utiliser les mêmes données, je vous les mets ci-dessous. Le plus simple est de copier-coller le contenu dans Excel puis de convertir les données en tableau comme illustré dans les images qui suivent. Enfin, si vous ne connaissez pas bien les listes de données, je vous invite également à lire à minima le début du billet dédié pour créer et nommer celle-ci.
Fichier des données (CSV séparateur point-virgules)
Jour;Nb de vols prévus;Nb de vol annulés;Taux annulation;Nb de passagers effectifs
01/07/2025;256;23;8,98%;28416
02/07/2025;546;54;9,89%;60606
03/07/2025;456;5;1,10%;50616
04/07/2025;565;12;2,12%;62715
05/07/2025;568;5;0,88%;63048
06/07/2025;265;32;12,08%;29415
07/07/2025;125;51;40,80%;13875
08/07/2025;156;15;9,62%;17316
09/07/2025;356;32;8,99%;39516
10/07/2025;358;45;12,57%;39738
11/07/2025;154;23;14,94%;17094
12/07/2025;155;12;7,74%;17205
13/07/2025;125;23;18,40%;13875
14/07/2025;544;35;6,43%;60384
15/07/2025;650;45;6,92%;72150
16/07/2025;444;23;5,18%;49284
17/07/2025;232;21;9,05%;25752
18/07/2025;124;23;18,55%;13764
19/07/2025;234;36;15,38%;25974
20/07/2025;154;45;29,22%;17094
21/07/2025;234;12;5,13%;25974
22/07/2025;452;56;12,39%;50172
23/07/2025;324;12;3,70%;35964
24/07/2025;124;56;45,16%;13764
25/07/2025;365;34;9,32%;40515
26/07/2025;400;25;6,25%;44400
27/07/2025;156;45;28,85%;17316
28/07/2025;121;15;12,40%;13431
29/07/2025;122;12;9,84%;13542
30/07/2025;23;15;65,22%;2553
31/07/2025;356;35;9,83%;39516
Illustrations pour convertir les données en plusieurs colonnes :
Quelques exemples :
Fonction Excel | Équivalent VBA | Description |
---|---|---|
MIN | WorksheetFunction.Min | Retourne le nombre le plus petit parmi une liste |
MIN.SI.ENS | WorksheetFunction.MinIfs | Retourne le nombre le plus petit parmi une liste pour un ensemble de conditions ou de critères donné |
MOYENNE | WorksheetFunction.Average | Retourne la moyenne des arguments |
SOMME | WorksheetFunction.Sum | Retourne la somme des arguments |
NB.SI | WorksheetFunction.CountIf | Retourne le nombre de cellules non vides répondant à la condition |
RECHERCHEV | WorksheetFunction.VLookup | Cherche une valeur dans la première colonne d’un tableau et retourne la valeur sur la ligne correspondante pour l’index de colonne voulu |
INDEX | WorksheetFunction.Index | Retourne la valeur à une position donnée d’un tableau donné |
Quelques exemples exécutés depuis la fenêtre d’exécution (CTRL + G) :
? WorksheetFunction.Min(Sheets(1).ListObjects(1).ListColumns("Taux annulation").DataBodyRange)
8,80281690140845E-03
? WorksheetFunction.MinIfs(Sheets(1).Range("D2:D32"), Sheets(1).Range("B2:B32"), "<200")
7,74193548387097E-02
? WorksheetFunction.Sum(Array(1, 1, 2))
4
? WorksheetFunction.CountIf(Sheets(1).ListObjects(1).ListColumns("Nb de passagers effectifs").DataBodyRange, ">50000")
7
? WorksheetFunction.VLookup(Sheets(1).Range("A20"), Sheets(1).ListObjects(1).DatabodyRange, 5)
25974
? WorksheetFunction.Index(Sheets(1).ListObjects(1).DatabodyRange, 1, 2)
256
Cette section a exposé quelques fonctions Excel en VBA concernant les tableaux.
Les autres fonctions
Il y a tout un tas de fonctions, que ce soit des fonctions financières, d’ingénierie, comptables, …. Si vous ne trouvez pas votre bonheur en VBA natif, peut-être le trouverez vous là.
Quelques exemples :
Fonction Excel | Équivalent VBA | Description |
---|---|---|
PDUREE | WorksheetFunction.PDuration | Retourne le nombre de périodes requises par un investissement pour atteindre une valeur spécifiée |
NB.JOURS.OUVRES | WorksheetFunction.NetworkDays | Retourne le nombre de jour ouvrés entre deux dates |
ROMAIN | WorksheetFunction.Roman | Retourne un nombre arabe converti en nombre romain |
LOI.BINOMIALE | WorksheetFunction.BinomDist | Retourne la probabilité d’une variable aléatoire discrète suivant la loi binomiale |
BESSELI | WorksheetFunction.BesselI | Retourne la fonction de Bessel modifiée ln(x) |
Durant cette section, nous avons brièvement vu quelques autres exemples de fonction Excel en VBA.
Le long de ce billet, nous avons vu l’avantage de connaître certaines fonctions Excel en VBA.
Lorsque vous avez besoin de faire une opération, demandez-vous si celle-ci n’existe déjà pas, que ce soit dans les fonctions VBA ou bien dans les fonctions Excel, avant de la redévelopper.
À bientôt !
Quelques ressources :