Créer une fonction CRITERE

Résolu
Victor Porée Messages postés 79 Statut Membre -  
Victor Porée Messages postés 79 Statut Membre -
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. :)


A voir également:

5 réponses

ccm81 Messages postés 11033 Statut Membre 2 433
 
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
Victor Porée Messages postés 79 Statut Membre 2
 
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
Victor Porée Messages postés 79 Statut Membre 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
Gyrus Messages postés 3360 Statut Membre 526
 
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
Victor Porée Messages postés 79 Statut Membre 2
 
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
ccm81 Messages postés 11033 Statut Membre 2 433
 
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
Victor Porée Messages postés 79 Statut Membre 2
 
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Arkana0 Messages postés 6902 Statut Modérateur 182
 
Bonjour,

Tu peux t'intéresser à https://www.excel-pratique.com/ et aller sur le cours de vba
-1
Victor Porée Messages postés 79 Statut Membre 2
 
Bonjour,

Merci pour ce lien,

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