Opérateur variable d'une condition matricielle

Résolu/Fermé
Victor Porée
Messages postés
75
Date d'inscription
mardi 11 juin 2013
Statut
Membre
Dernière intervention
30 mai 2017
- 6 juil. 2016 à 20:58
Victor Porée
Messages postés
75
Date d'inscription
mardi 11 juin 2013
Statut
Membre
Dernière intervention
30 mai 2017
- 10 juil. 2016 à 18:19
Bonjour,

Soit une formule du genre :

{=PETITE.VALEUR(SI(Matrice>Cellule;Matrice))}


Mon problème est que, dans le test logique, la matrice, la cellule, et surtout l'opérateur sont variables (>;>=;<;<=;=). J'ai essayé la fonction INDIRECT, mais sans succès.

Des idées ?

Merci,


4 réponses

Frenchie83
Messages postés
2235
Date d'inscription
lundi 6 mai 2013
Statut
Membre
Dernière intervention
5 mars 2022
332
8 juil. 2016 à 12:52
Re
Petit rectificatif, je me suis aperçu après coup qu'avec les opérateurs => et = cela ne fonctionnait pas.

https://www.cjoint.com/c/FGikYmebKQl
Cdlt
1
Victor Porée
Messages postés
75
Date d'inscription
mardi 11 juin 2013
Statut
Membre
Dernière intervention
30 mai 2017
2
8 juil. 2016 à 15:39
Bonjour Frenchie83,

Merci, ça fonctionne bien. :)

Je ne maitrise pas le VBA, alors je vais prendre le temps d'analyser le code afin de pouvoir l'exploiter.

Sinon, sans VBA, c'est pas possible ?
0
Victor Porée
Messages postés
75
Date d'inscription
mardi 11 juin 2013
Statut
Membre
Dernière intervention
30 mai 2017
2
8 juil. 2016 à 16:04
Serait-ce possible de créer une fonction qui décompose le test logique en trois arguments, dont l'opérateur ?
0
Frenchie83
Messages postés
2235
Date d'inscription
lundi 6 mai 2013
Statut
Membre
Dernière intervention
5 mars 2022
332 > Victor Porée
Messages postés
75
Date d'inscription
mardi 11 juin 2013
Statut
Membre
Dernière intervention
30 mai 2017

9 juil. 2016 à 06:54
Bonjour
Sinon, sans VBA, c'est pas possible ? peut-être, mais ne trouvant pas de solution rapidement , j'ai abandonné au profit du VBA.
Serait-ce possible de créer une fonction qui décompose le test logique en trois arguments, dont l'opérateur ? Créer une fonction, passe encore par du VBA. Cela nécessite d'écrire un formule qui intègrera la nouvelle fonction. j'ai essayé mais je bute sur l'affichage du résultat (il m'affiche la formule au lieu du résultat). je ne vois toujours pas où est l'erreur.
Si vous demander à passer par une fonction personnalisée, je suppose que c'est pour avoir de la souplesse par rapport à la longueur de votre tableau. Si c'est cela, voici le code précédent modifié qui ne tient pas compte de la longueur du tableau.
Private Sub Worksheet_Change(ByVal Target As Range)
    On Error Resume Next
    If Not Intersect(Target, [G2]) Is Nothing Then
        Columns("E:E").ClearContents
        Select Case Target
            Case Is = ">", "<", ">=", "<="
                Op = Target
            Case Else
                Op = "="
        End Select
        DerLig = [A100000].End(xlUp).Row
        Range("E1:E" & DerLig).FormulaArray = "=IFERROR(SMALL(IF(RC[-4]:R[" & DerLig - 1 & "]C[-4]" & Op & "RC[2],RC[-3]:R[" & DerLig - 1 & "]C[-3]),ROW()),"""")"
    End If
    EnableEvents = False
End Sub

Pour la fonction personnalisée, si je trouve la solution, je vous l'enverrai.
Cdlt
0
Victor Porée
Messages postés
75
Date d'inscription
mardi 11 juin 2013
Statut
Membre
Dernière intervention
30 mai 2017
2
10 juil. 2016 à 18:18
Bonjour Frenchie83,

J'ai trouvé ailleurs la fonction personnalisée que je cherchais.
Je te remercie sincèrement de m'avoir accordé de ton temps. :)

Bon dimanche,
0
Frenchie83
Messages postés
2235
Date d'inscription
lundi 6 mai 2013
Statut
Membre
Dernière intervention
5 mars 2022
332
7 juil. 2016 à 04:18
Bonjour
Des idées? peut-être, mais pour plus de clarté, il serait préférable de mettre une copie de votre fichier en pièce jointe et de préciser ce que vous voulez faire (avec quelques exemples de résultats attendus)
Cdlt
0
Victor Porée
Messages postés
75
Date d'inscription
mardi 11 juin 2013
Statut
Membre
Dernière intervention
30 mai 2017
2
8 juil. 2016 à 00:33
Bonjour Frenchie83,

Merci pour ta réponse,

Voici mon fichier :
https://www.cjoint.com/c/FGhwCsLvS8a

Je veux tout simplement que mon opérateur (>, >=, <, <= ou =) soit spécifié dans une cellule.
0
Frenchie83
Messages postés
2235
Date d'inscription
lundi 6 mai 2013
Statut
Membre
Dernière intervention
5 mars 2022
332
8 juil. 2016 à 08:35
Bonjour
En passant par du VBA, si ça vous convient
https://www.cjoint.com/c/FGigIcgej3l
Cdlt
0
Victor Porée
Messages postés
75
Date d'inscription
mardi 11 juin 2013
Statut
Membre
Dernière intervention
30 mai 2017
2
10 juil. 2016 à 18:19
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,
0