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
Rechercher des sujets similaires à "fonction selrange alternative ens ifs"