Fonction SelRange, (alternative SI.ENS ou IFS)
Bonjour,
dans les dernières versions d'excel une option de sélection a été ajoutée à certaines fonctions (.SI.ENS ou IFS)
cette option n'est pas disponibles pour toutes les fonctions et pas disponibles pour les versions plus anciennes.
je vous propose une fonction qui offre cette possibilité et que vous pourrez utiliser avec n'importe quelle fonction qui travaille avec une plage de données).
Function SelRange(r, ParamArray parm())
'sélectionne une plage en fonction de critères (comme la fonction IFs ou .SI.ENS)
' r est la plage dans laquelle sélectionner les valeurs
'paramarray() est une liste de critères de sélection, les critères de sélection sont chacun composés de 2 parties
' la plage sur laquelle il faut vérifier le critère et le critère à vérifier
' exemple soit le tableau (avec plages nommées poids et age)
' poids age
' 40 20
' 30 25
' 50 30
' pour sélectionner les ages des poids compris entre 30 et 45
' selrange(age,poids,">=30",poids,"<=45")
' selrange retourne un tableau qui peut être exploité dans une autre fonction telle que
' Min, Max, Stdev, etc...
' =Min(selrange(age,poids,">=30",poids,"<=45"))
'
Dim res() 'tableau contenant les valeurs sélectionnées
For i = 1 To r.Count 'pour chaque valeur, on vérifie s'il faut la sélectionner
For j = LBound(parm) To UBound(parm) Step 2 'on vérifie les critères, on prend les paramètres 2 par 2
Set rc1 = parm(j) '1er paramètre la plage sur laquelle appliquer le critère
c1 = parm(j + 1) ' 2eme paramètre la valeur du critère à sélectionner
op = "" ' opérateur peut être >,< ou = sur 1 ou 2 caractères
For k = 1 To 2
ch = Mid(c1, k, 1)
If ch = "=" Or ch = "<" Or ch = ">" Then op = op & ch
Next k
c1 = Replace(c1, op, "")
If op = "" Then op = "=" 'si pas d'opérateur on met l'opérateur =
' conversion des données, donnée de la plage critère
If IsDate(rc1(i)) Then 'date
p1 = CDbl(rc1(i))
ElseIf IsNumeric(rc1(i)) Then 'nombre
p1 = rc1(i)
Else 'texte
p1 = Chr(34) & rc1(i) & Chr(34)
End If
'conversion des données, valeur critère
If Not IsNumeric(c1) Then c1 = Chr(34) & c1 & Chr(34) 'nombre
ev = "=" & p1 & op & c1 'equation de sélection
If Not Application.Evaluate(ev) Then j = 9999: Exit For 'la condition n'est pas vérifiée, la donnée ne sera pas sélectionnée
Next j
If j < 9999 Then 'toutes les conditions sont vérifiées on sélectionne la donnée
c = c + 1
ReDim Preserve res(c)
res(c) = r(i)
End If
Next i
SelRange = res
End Function