Opérateur variable d'une condition matricielle

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

  1. Frenchie83 Messages postés 2254 Statut Membre 339
     
    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
    1. Victor Porée Messages postés 79 Statut Membre 2
       
      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
    2. Victor Porée Messages postés 79 Statut Membre 2
       
      Serait-ce possible de créer une fonction qui décompose le test logique en trois arguments, dont l'opérateur ?
      0
      1. Frenchie83 Messages postés 2254 Statut Membre 339 > Victor Porée Messages postés 79 Statut Membre
         
        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
    3. Victor Porée Messages postés 79 Statut Membre 2
       
      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
  2. Frenchie83 Messages postés 2254 Statut Membre 339
     
    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
    1. Victor Porée Messages postés 79 Statut Membre 2
       
      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
  3. 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,
    0