re-bonjour
je n'ai pas la possibilité de tester sur 2013, mais cela fonctionne avec 365. Il faudra sans doute passer par une fonction personnalisée.
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
voir utilisation en colonne D