Créer une fonction CRITERE

Résolu
Bonjour,

Je voudrais créer une fonction qui réponde à cette syntaxe :
=CRITERE(opérateur;valeur)


L'objectif est entre autres de pouvoir faire varier l'opérateur.

Ça pourrait donner, par exemple :

=NB.SI(A1:A5;CRITERE(B1;C1))

où B1 contient l'opérateur ">" et C1 la valeur "3".

Je précise que je n'y connais rien en VBA.

Merci. :)



--
Cordialement,
Victor Porée.

5 réponses

  1. Bonjour

    Peut être ceci, mais je ne vois toujours pas où tu veux en venir
    Public Function test(ech, ope As String, ref) As Boolean
    Dim ok As Boolean
    ok = False
    Select Case ope
    Case "=": If ech = ref Then ok = True
    Case ">": If ech > ref Then ok = True
    Case ">=": If ech = ref Then ok = True
    Case "<": If ech < ref Then ok = True
    Case "<=": If ech <= ref Then ok = True
    End Select
    test = ok
    End Function

    Cdlmnt
    1
    1. Bonjour ccm84,

      Encore merci pour ta réponse,

      Simplement, dans mon test logique, l'échantillon, l'opérateur et la valeur sont des variables définies dans différentes cellules. Je veux tout bonnement qu'une formule du genre fonctionne :
      =SI(A1&B1&C1;VRAI;FAUX)


      Effectivement, ça marche, mais pas quand l'échantillon est une plage. :/

      Pour que ce soit plus simple, je t'ai joint un exemple simplifié de ce que je veux faire :
      https://www.cjoint.com/c/FGjxcZm03fa
      0
  2. Bonjour tout le monde,

    Une réponse m'a été apportée par ailleurs :

    Function test(échantillon, opérateur, valeur)
    Dim r(), i, v, nc
    nc = Application.Caller.Columns.Count
    If échantillon.Count = 1 Then
    test = Evaluate(Replace(échantillon & opérateur & valeur, ",", "."))
    Else
    i = -1
    For Each v In échantillon
    i = i + 1
    ReDim Preserve r(i)
    r(i) = Evaluate(Replace(v & opérateur & valeur, ",", "."))
    Next v
    If nc = 1 Then test = Application.Transpose(r) Else test = r
    End If
    End Function


    Merci de m'avoir accordé de votre temps !

    Bon dimanche,
    1
    1. Bonjour,

      Bien que je ne voie pas la finalité ... voici la fonction personnelle correspondante :
      Function CRITERE(opérateur As String, valeur As String) As String
      CRITERE = opérateur & valeur
      End Function

      Fonction à placer dans un module standard.

      A+
      0
      1. Bonjour Gyrus,

        Merci pour ta réponse,

        Au temps pour moi, j'avais mal identifié le problème. Effectivement, une simple concaténation fonctionne parfaitement. C'est avec la fonction SI que ça ne fonctionne pas :
        =SI(A1&B1&C1;VRAI;FAUX)


        C'est donc plutôt une fonction TEST dont j'aurais besoin :
        =TEST(échantillon;opérateur;valeur)


        en guise de test logique.

        Ou peut-être serait-ce réalisable sans macro ?

        Bon weekend. :)
        0
    2. Bonjour

      Public Function critere(operation As String, valeur) As String
      critere = operation & valeur
      End Function

      Utilisation dans la feuille
      =NB.SI($A$2:$A$11;critere("<";2))

      Mais c'est bien compliquer pour pas grand chose

      Cdlmnt
      0
      1. Bonjour ccm81,

        Merci pour ta réponse,

        Au temps pour moi, j'avais mal identifié le problème. Effectivement, une simple concaténation fonctionne parfaitement. C'est avec la fonction SI que ça ne fonctionne pas :
        =SI(A1&B1&C1;VRAI;FAUX)


        C'est donc plutôt une fonction TEST dont j'aurais besoin :
        =TEST(échantillon;opérateur;valeur)


        en guise de test logique.

        Ou peut-être serait-ce réalisable sans macro ?

        Bon weekend. :)
        0
    3. Modérateur
      Bonjour,

      Tu peux t'intéresser à https://www.excel-pratique.com/ et aller sur le cours de vba
      -1
      1. Bonjour,

        Merci pour ce lien,

        Mais à vrai dire, ça ne m'aide pas vraiment...
        0