Option Explicit [COLOR="Green"]'Toutes les variables devront être déclarée dans un instruction 'Dim'[/COLOR]
Function fonction2(p1 As Range, p2 As Byte) [COLOR="Green"]' La fonction prend deux arguments : la cellule où
' figure la donnée (p1) et un nombre entier (<256) indiquant quel "barème" on veut utiliser.[/COLOR]
Dim oVal, i As Long [COLOR="Green"]' Déclaration (obligatoire, voir ci-dessus) des données.[/COLOR]
fonction2 = "" [COLOR="Green"]' Valeur retournée par défaut par la fonction.[/COLOR]
If Not IsEmpty(p1) Then
[COLOR="Green"]' Code exécuté si la cellule où figure la donnée n'est pas vide.
' Les trois lignes suivantes placeront les paramètres requis dans le tableau 'oVal'.
' - Si le barème demandé est 1 (valeur de 'p2'), il faut prendre les données des colonnes 1 & 2 (A & B).
' - Si le barème demandé est 2 (valeur de 'p2'), il faut prendre les données des colonnes 3 & 4 (C & D).
' - ...
' - Si le barème demandé est 'p2', il faut prendre les données des colonnes 2 * p2 - 1 & 2 * p2.
' Il est inutile de prendre toutes les lignes des deux colonnes requises.
' On a besoin des valeurs dans la plage dont les "coins" inférieur gauche et supérieur droit sont :
' 'Sheets("DATA").Cells(2, 2 * p2 - 1).End(xlDown)'
' qui désigne la dernière cellule non vide de la colonne 2 * p2 - 1 à partir de la deuxième ligne.
' 'Sheets("DATA").Cells(2, 2 * p2)'
' qui désigne la cellule de la deuxième ligne de la colonne 2 * p2.
' Ces valeurs sont placées dans le tableau 'oVal'.[/COLOR]
With Sheets("DATA")
oVal = .Range(.Cells(2, 2 * p2 - 1).End(xlDown), .Cells(2, 2 * p2)).Value
End With
[COLOR="Green"]' Les trois lignes suivantes servent à trouver dans quelle ligne du tableau 'oVal' sont
' les paramètres dont on a besoin. La boucle est exécutée jusqu'à ce que la valeur contenue
' dans la cellule 'p1' soit inférieure à la valeur contenue dans la ligne i et la première
' colonne du tableau. Dans ce cas on sort de la boucle (instruction 'Exit For').
' Si la valeur contenue dans la cellule 'p1' est supérieure à toutes les valeurs contenues dans
' la première colonne du tableau 'oVal', la boucle s'exécute tant que i n'est pas supérieur
' au nombre de lignes du tableau 'oVal' (ce nombre est 'UBound(oVal, 1)').[/COLOR]
For i = 1 To UBound(oVal, 1)
If p1.Value < oVal(i, 1) Then Exit For
Next i
[COLOR="Green"] ' Si i est inférieur ou égal à la nombre de lignes du tableau 'oVal', la fonction renvoie
' la valeur contenue dans la ligne i et dans la deuxième colonne du tableau 'oVal' :[/COLOR]
If i <= UBound(oVal, 1) Then fonction2 = oVal(i, 2)
End If
End Function