Bonjour 
@Daniel Desch, job75 
😉,
J'avais commencé. J'ai terminé donc je publie.
Je n'ai pas compris la même chose. Je me base sur votre 
premier énoncé de question que vous avez modifié par la suite (la notion de sens de recherche a disparu, l'exemple de colonnes I à K a été supprimé !). 
Comment voulez-vous qu'on vous propose quelque chose qui se tient si vous changez la question sans prévenir? 😡😡😡😡😡
Avec ce que j'avais compris (pour la recherche en ligne), on recherche dans les lignes (1ère ligne puis 2ème ligne, etc.) de la plage origine la première cellule respectant les critères. Cette cellule devient la cellule du coin supérieur gauche de la plage résultat. Ensuite, à partir de cette cellule, on étend cette plage vers la droite jusqu'à la cellule précédant la première cellule ne respectant plus les conditions.
On étend ensuite la plage trouvée, ligne par ligne, vers le bas tant que toutes les cellules de la ligne respectent les conditions.
Ce raisonnement aboutit à une fonction qui respecte les résultats que vous souhaitiez avant de modifier votre énoncé, à savoir:
'***************************************************************************************************************
Fonction à utiliser : 
Plage_SiEntre(xrg, xMin, xMax, xSens)
   paramètre 1 -> la plage à examiner
   paramètre 2 -> la valeur minimum à considérer
   paramètre 3 -> la valeur maximum à considérer
   paramètre 4 -> c'est un paramètre optionnel
- si paramètre 4 absent, on examine la plage par ligne: ligne 1 puis ligne 2, etc.
 
- si paramètre 4 présent (égal à n'importe quoi), on examine la plage par colonne: colonne 1 puis colonne 2, etc.
 
   La fonction retourne un 
RANGE
   Si aucune cellule ne vérifie les condition alors Plage_Si retourne 
NOTHING
'***************************************************************************************************************