Comment utiliser le tableau de paramètres (ParamArray) pour un nombre d’arguments variable en VBA Excel

Pour ce nouveau chapitre de la formation dédiée à l’apprentissage de VBA sur Excel, je vais vous présenter le fonctionnement du tableau de paramètres (ParamArray) qui permet de faire passer plusieurs paramètres en tant que tableau (Array). De cette manière, le nombre de paramètres nécessaire au fonctionnement d’une méthode (ou d’une fonction) n’a pas besoin d’être défini.

 

Téléchargement

Vous pouvez télécharger le fichier d'exemple de cet article en cliquant sur le lien suivant :

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.
 

 

 

Tutoriel Vidéo

 

 

1. Qu’est-ce qu’un tableau de paramètres

Dans ce tutoriel, nous allons voir comment créer une fonction dans laquelle nous allons souhaiter faire passer un tableau en tant qu’argument, en utilisant ce que nous appellerons un tableau de paramètres.

Nous verrons que cela nous permettra en autres choses de pouvoir passer un nombre non défini d’arguments.

L’une des fonctions intégrées à Excel utilisant ce type de paramètre est la fonction SOMME().

En effet, pour utiliser cette fonction, nous pouvons saisir différents types d’arguments, quel qu’en soit le nombre :

  • Nous pouvons saisir une valeur unique :
=SOMME(120)
  • Plusieurs valeurs
=SOMME(120;10;-5)
  • Des cellules :
=SOMME(B21;C21;D21)
  • Une plage de cellules :
  • :
=SOMME(B21:D21)
  • Plusieurs plages de cellules :
=SOMME(B21:C21;D21)
  • Mais également des mélanges de plusieurs types :
=SOMME(120;B21:C21;D21)

Pour arriver à réaliser cela, l’argument est ici déclaré en utilisant le mot-clé ParamArray (tableau de paramètres), que nous pourrons identifier lors de l’utilisation des fonctions avec les crochets

Bien entendu, pour comprendre l’usage du tableau de paramètres, il est nécessaire de comprendre comment fonctionne une variable de type Tableau, en consultant le chapitre dédié de la formation sur l’apprentissage de VBA, dont le fonctionnement est identique.

Pour résumer, les tableaux de variables permettent de manipuler des ensembles de variables d’un même type, en les rassemblant dans une seule et même variable identifiée par un index.

 

2. Créer la fonction SOMME_INTERVALLE()

Pour illustrer l’usage que nous pouvons avoir du tableau de paramètres, nous allons reproduire la fonction SOMME(), que nous allons personnaliser pour ne prendre en compte que les valeurs comprises dans un intervalle, c’est-à-dire entre une valeur plancher, et une valeur plafond.

Pour cela, nous allons partir du tableau suivant :

Excel formation - Paramarray VBA - 01

Dans celui-ci, nous retrouvons les ventes réalisées par une entreprise, mois par mois, dans trois pays (la France, L’Allemagne et l’Espagne).

Nous allons voir regrouper les niveaux d’activités mensuels en fonction des paliers de réalisation du Chiffre d’affaires :

  • De zéro à 300 000€
  • De 301 000 à 600 000€
  • Et de 601 000€ à 1 000 000€

Bien entendu, pour créer cette fonction, nous allons utiliser VBA :

  • Pour commencer, nous lancer VBE en appuyant sur les touches [Alt]+[F11],
  • Ensuite, nous créons un nouveau module : Menu Insertion > Module :

Excel formation - Paramarray VBA - 02

Et c’est dans ce module que nous allons insérer la fonction, en saisissant le mot-clé Function, suivi du nom de la fonction, par exemple SOMME_INTERVALLE() :

Function SOMME_INTERVALLE()
 
End Function

Lorsque que nous validons la création de la fonction en appuyant sur la touche [Entrée] du clavier, Excel insère automatiquement la ligne End Function.

Tout ce que nous saisirons entre la ligne commençant par Function, et celle terminant par Function sera exécuté à chaque fois que nous appellerons la fonction.

Dans un premier temps, pour comprendre le fonctionnement du tableau de paramètres, nous allons nous contenter de dupliquer le fonctionnement de la fonction SOMME() classique.

Comme nous l’avons vu, la déclaration de l’argument passe par l’utilisation du mot-clé ParamArray :

Function SOMME_INTERVALLE(ParamArray  valeurs() As Variant)
 
End Function

Attention, un argument défini avec le mot-clé ParamArray, doit obligatoirement être typé en tant que Variant.

À partir de ce moment-là, il est donc possible d’exploiter un nombre non défini de variable directement à partir de valeurs.

Pour en récupérer la somme, il suffit donc d’utiliser une boucle For… Each :

Function SOMME_INTERVALLE(ParamArray  valeurs() As Variant)
    Dim total As Double
    Dim v As Variant
    
    For Each v In valeurs
        total = total + v
    Next
    
    SOMME_INTERVALLE = total
End Function

Nous commençons ici par déclarer deux variables :

  • Une variable v qui va permettre de passer en revue tous les éléments de l’argument passé en tant que ParamArray,
  • Une seconde variable total qui va permette de récupérer la valeur totale de chacun de ces éléments. Cette variable est typée en tant que Double, c’est-à-dire un grand nombre décimal.

Ensuite, nous mettons en place une boucle For… Each dans laquelle nous allons affecter à la variable v le contenu de chacun des éléments de ParamArray.

Et pour finir, pour sommer les éléments, nous affectons à la variable total sa propre valeur à laquelle nous ajoutons la valeur de chaque variable v

Nous pouvons maintenant tester en revenant dans la feuille de calcul, puis en appelant la fonction que nous venons de créer, comme nous le ferions pour n’importe quelle fonction d’Excel :

Excel formation - Paramarray VBA - 03

Pour le moment, nous ne pouvons calculer que des valeurs numériques, mais peu importe le nombre d’argument !

En effet, si nous essayons d’y insérer une référence de cellule, nous aurons alors une erreur :

Excel formation - Paramarray VBA - 04

Pour contourner cette erreur, nous commençons par regarder si l’argument en cours d’analyse (v) est une valeur numérique, et lorsque c’est le cas, nous venons y intercaler le calcul de somme que nous venons de voir :

        If IsNumeric(v) Then
            total = total + v
        Else
        End If

Dans le cas contraire, nous considèrerons qu’il s’agira d’une plage de cellules.

Et à ce moment-là, pour en effectuer la somme, nous allons déclarer deux variables :

  • La variable plage qui va correspondre à v, ce dernier ne pouvant pas être exploité directement,
  • La variable cellule qui va permettre de passer en revue toutes les cellules de la plage actuelle

Puis nous allons utiliser une nouvelle boucle pour passer en revue toutes les cellules de la plage :

            Dim plage As Range, cellule As Range
            Set plage = v
            
            For Each cellule In plage
                total = total + cellule
            Next

Et voilà, nous pouvons maintenant tester la fonction sur la feuille de calcul, en utilisant, des valeurs numériques, ou encore des plages de cellules complexes :

(Code)=SOMME_INTERVALLE(454872;B10;B11:B20)(/Code)

Excel formation - Paramarray VBA - 05

Maintenant, pour pouvoir ajouter les valeurs d’intervalle à notre fonction, nous allons devoir introduire deux nouveaux arguments valeurMin et valeurMax.

La seule contrainte étant que nous devons conserver le ParamArray en toute fin de liste d’argument !

Ces nouveaux arguments devront donc être insérés juste avant :

Function SOMME_INTERVALLE(valeurMin As Double,  valeurMax As Double, ParamArray valeurs() As Variant) 

Maintenant que ces arguments ont été créés, nous pouvons les utiliser pour savoir si la valeur doit être sommée :

…
            If v >= valeurMin And v  <= valeurMax Then total = total + v
…                If cellule >= valeurMin And  cellule <= valeurMax Then total = total + cellule

Excel formation - Paramarray VBA - 06

=SOMME_INTERVALLE(0;300000;B9:B20)

 

=SOMME_INTERVALLE(300001;600000;B9:B20)

 

=SOMME_INTERVALLE(600001;1000000;B9:B20)

 

Et voilà, nos trois tranches sont maintenant correctement calculées !

 



Articles qui pourraient vous intéresser

Comment exporter une feuille dans un classeur (ouvert ou fermé) sur Excel ?
Sortez du lot : comment créer un CV moderne et impactant avec Excel
Comment ajouter une apostrophe en début de cellule sur Excel ?
Comment cacher des données dans des cellules Excel ?
Comment certifier gratuitement une macro VBA sur Excel ?
Comment remplacer un texte dans une cellule avec la fonction REMPLACER d’Excel ?
Les arguments de valeurs et de références (ByVal et ByRef) de VBA sur Excel
Comment créer un menu dynamique sur Excel ?
Comment traduire un texte dans toutes les langues en utilisant une fonction Excel
Comment utiliser les fonctions de base d’Excel (Addition, soustraction, multiplication, division)
Comment trouver et contrôler toutes les formules d'une feuille de calcul Excel
Comment calculer des sous-totaux dans un tableau Excel : la fonction SOUS.TOTAL

Contact - Plan du site - À propos - Contact

© Excel-Formation 2018 - Excel, simplement

Haut de la page

Excelformation.fr propose de nombreuses formations pratiques et gratuites sur Microsoft Excel : des cours pour apprendre à structurer et analyser les données, des tutos sur les fonctions avancées, les formules et les formules avancées d'Excel, les formules matricielles, les mise-en-formes conditionnelles, les graphiques Excel (xls, xlsx, xlsm,…). Des tutoriels pour apprendre à automatiser les tâches répétitives (via des macro-commandes en VBA) de vos classeurs Excel.