Opérateur variable d'une condition matricielle

Résolu
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,



--
Cordialement,
Victor Porée.

4 réponses

  • Votes
  • Date
  • Date décroissante
  1. 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. 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 ?
    2. Serait-ce possible de créer une fonction qui décompose le test logique en trois arguments, dont l'opérateur ?
    3. @Victor PoréeBonjour
      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
    4. 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,
  2. 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
    1. 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.
  3. 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,