Recherche automatique en fonction 2 critères

Bonjour à tous,

j'aurais besoin de votre aide pour écrire une fonction de recherche.

Il s'agit de créer une fonction de recherche automatique en fonction de deux critères (une correspondance exacte de termes entre ma BDD (modifiable) et mon TABLEAU REF (vérouillé) et une valeur immédiatement supérieur entre BDD et TABLEAU REF).

En détail :

TABLEAU REF :

Col_A : Type

Col_B : Pente

Col C : Qmin

BDD :

Col_E : Pente

Col_F : Q100

Col_G : Qmin (à calculer)

Col_H : Type (à calculer)

Ce que je veux rechercher et afficher automatiquement :

Qmin (à calculer) en fonction de 2 critères (BDD[Pente] = Ref[pente] et Ref[Qmin] > BDD[Q100])

(rechercher et afficher la première valeur rencontrée de "Qmin" qui est supérieure à "Q100" selon la valeur de "pente" )

Type (à calculer) en fonction de 2 critères (BDD[Pente] = Ref[pente] et Ref[Qmin] > BDD[Q100])

(rechercher et afficher le "type" selon la première valeur rencontrée de "Qmin" qui est supérieure à "Q100" et selon la valeur de "pente")

Jusqu'à aujourd'hui je fonctionnais par "SI" imbriqués (mais imbriquer jusqu'à plus de 10 "SI" donne une formule compliquée à vérifier). Si vous avez d'autres formules plus simples, je suis preneur.

En vous remerciant pour votre aide.

Lilian

Salut Lilian,

Je ne sais pas le faire par formule, mais je te propose une solution par macro. J'ai considéré que les différentes parties de ta feuille ne peuvent pas varier (plages fixes). Si ce n'est pas le cas, il faudra modifier mon code en conséquence.

Cordialement.

Bonjour,

Un essai

Cordialement,

Leakim

EDIT: Salut Yvouille, j'ai tenté en formule, moi je sais pas le faire en macro

Salut Leakim,

Je crois que l'on a pas compris la même chose Par exemple pour la cellule G20, j'ai pensais qu'il fallait trouver un résultat plus élevé que la valeur en F20, non ?

Amicalement.

Bonjour,

Si si j'ai bien compris cela moi aussi. Après je t'avoue que je laisse la vérification à Daniel92

Il redira si c'est opérant ou pas !?! Mais je comprends que tu n'obtiens pas les mêmes résultats... C'est sûrement moi qui ai pataugé.

Leakim

Bonjour à tous les deux

et merci beaucoup pour vos réponses très rapides!!!

Vos propositions sont pas mal du tout mais en fait c'est pas exactement ce que je cherchais :

- la méthode de Yvouille fonctionne bien mais j'aurais préféré ne pas avoir de macro dans le tableau, j'ai bcp de mal à modifier les codes (vu que mon tableau d'origine est plus compliqué...)

- la méthode de Leakim par formule est similaire à mes "si" imbriqués dans le sens où c'est une formule à rallonge, un peu compliquée (comme vous aviez remarqué plus haut dans les commentaires, la formule ne marche pas pour la cellule G20).

Désolé, du coup c'est pas encore ce que je cherchais.

Peut-être qu'il n'y à pas de formule simple à part le VBA ?

Sinon avez-vous d'autres propositions ?

Et en tout cas, encore merci pour vos premières réponses et essais!!

Bien cordialement,

Lilian

Bonjour,

Perso, je suis à fond

Je ne parviens pas à faire entendre à la fonction EQUIV() le critère -1 qui correspond selon l'aide excel à la rechercher la valeur sup ???

Désolé

Cordialement,

Leakim

Salut,

Lelion a écrit :

- la méthode de Yvouille fonctionne bien mais j'aurais préféré ne pas avoir de macro dans le tableau,

Parfois tu n'as pas le choix

Lelion a écrit :

j'ai bcp de mal à modifier les codes (vu que mon tableau d'origine est plus compliqué...)

On peut t'aider à placer ce code dans ton fichier

Cordialement.

Re-bonjour à tous les deux,

leakim a écrit :

Je ne parviens pas à faire entendre à la fonction EQUIV() le critère -1 qui correspond selon l'aide excel à la rechercher la valeur sup ???

=> En effet, c'est aussi pour cette raison que j'ai abandonné l'idée du EQUIV() qui pourtant est super mais dans ce cas ne fonctionne pas. (à méditer... )

Yvouille a écrit :

Salut,

Lelion a écrit :

- la méthode de Yvouille fonctionne bien mais j'aurais préféré ne pas avoir de macro dans le tableau,

Parfois tu n'as pas le choix

Lelion a écrit :

j'ai bcp de mal à modifier les codes (vu que mon tableau d'origine est plus compliqué...)

On peut t'aider à placer ce code dans ton fichier

Cordialement.

=> Tu as tout à fait raison, c'est juste un petit blocage de débutant

Ok donc ton option VBA mais en effet faudrait modifier la macro pour pouvoir :

1 - insérer de nouvelles lignes dans le tableau REF (rajouter un type "f" pour chaque pente "x", "y", "z" par exemple)

2 - faire en sorte que la recherche sur dans le tableau BDD se fasse jusqu'à ce qu'il n'y ait plus de valeurs.

Pour le 2ème point, j'ai montré ton code à un collègue qui connaît un peu le VBA. Il m'a ajouté une boucle "Dowhile" pour compter le nombre de ligne dans BDD (que le calcul se fasse tant qu'il y a des valeurs dans la colonne BDD[pente]).

Pour le 1er point, il n'a pas tout compris les termes "bytes" pour "j" "k" et "m" et comment ça fonctionne dans ta macro.

Il me proposait de créer le même style de boucle (que celle que je viens de décrire) à appliquer pour le tableau REF en précisant que le calcul se fasse tant qu'il y a des "x", puis en sortie de boucle tant qu'il y a des "y" puis en sortie de boucle tant qu'il y a des "z".

Je sais pas trop si je me suis fait comprendre, j'essaye avec mes mots de débutant...

En tout cas merci vous m'avez bien avancé dans la problématique.

Cordialement.

Lilian

Salut,

Il y a toujours un problème lorsque les membres présentes des fichiers exemple qui ne correspondent pas à la réalité. Dans ton cas, tu avais placé un tel cadre rouge autour de ton tableau, que je n’ai pas pu penser une minute qu’il pouvait s’allonger vers le bas. Autrement j’aurais bien entendu écrit un autre code.

Maintenant je trouve que de passer par une boucle Do While/Loop est assez fastidieux dans ce cas alors que l’on peut trouver la dernière ligne du tableau BBD par l’instruction End(xlUp), comme je le fais dans le fichier ci-joint. Mais il est bien entendu que si tu préfères passer par une boucle Do While, je peux laisser la main à ton ami.

D’ailleurs, si celui-ci désire des informations sur telle ou telle instruction, il doit utiliser le programme d’aide d’Excel qui est ….. excellent, ceci en plaçant le curseur sur le mot désiré et en tapant F1.

Ainsi, pour le mot Byte, il aurait reçu l’information suivante : Les variables de type Byte sont stockées sous la forme d'un nombre de 8 bits (1 octet unique), non signé, compris entre 0 et 255 alors que pour le mot Integer il aurait reçu ceci : Les variables de type Integer sont stockées sous la forme de nombres de 16 bits (2 octets) dont la valeur est comprise entre -32 768 et 32 767.

Afin d'utiliser moins de bits – lorsque c’est possible – j’utilise donc le type de variable Byte.

Avant de me lancer dans la transformation du code pour ta question au point 1, peux-tu me préciser le point suivant :

Vas-tu rajouter quelques types dans le tableau Ref une fois pour toute ou vas-tu continuer par la suite à ajouter des Types dans la colonne A à tous moments ?

En fonction de tes réponses, je verrai comment écrire mes corrections.

NB : Evite de placer une partie des informations sur ton fil et une partie dans le fichier, ça complique terriblement les choses lorsqu’il faut faire des allers-retours entre tes informations afin d’en saisir la quintessence.

A te relire.

Bonjour,

Yvouille a écrit :

Il y a toujours un problème lorsque les membres présentes des fichiers exemple qui ne correspondent pas à la réalité. Dans ton cas, tu avais placé un tel cadre rouge autour de ton tableau, que je n’ai pas pu penser une minute qu’il pouvait s’allonger vers le bas. Autrement j’aurais bien entendu écrit un autre code.

Ok je note la remarque (le tableau d'origine est en fait assez imposant et comporte un myriade de colonnes inutiles dans la problématique du post. C'était pour pas noyer l'info pour la personne qui m'aide).

Yvouille a écrit :

Maintenant je trouve que de passer par une boucle Do While/Loop est assez fastidieux dans ce cas alors que l’on peut trouver la dernière ligne du tableau BBD par l’instruction End(xlUp)

Je garde ton option, plus rapide en effet.

Yvouille a écrit :

D’ailleurs, si celui-ci désire des informations sur telle ou telle instruction, il doit utiliser le programme d’aide d’Excel qui est ….. excellent, ceci en plaçant le curseur sur le mot désiré et en tapant F1.

C'est ce qu'on a fait, on a vu la définition comme tu l'as montré mais on avait pas compris l'intéret du choix. Maintenant je comprend mieux, c'est un gain de temps de calcul pour excel vu que j'ai moins de 255 cellules dan mon tableau REF.

Yvouille a écrit :

Vas-tu rajouter quelques types dans le tableau Ref une fois pour toute ou vas-tu continuer par la suite à ajouter des Types dans la colonne A à tous moments ?

Partons du principe que je dois en rajouter à tous moments même si on n'aura pas plus de 5 types supplémentaires ( f, g h, i, j).

Ca me permettra de voir quel codage VBA tu utilises. (mais j'ai plus ou moins compris que tu changeais les valeurs de j et k dans ta boucle pour x, y et z.)

Par contre j'aurais une requête supplémentaire, si possible (c'est du chipotage, mais ça me simplifierait la vie).

Est-ce que ce serait possible de lancer cette macro automatiquement dès qu'une valeur (Q100 ou Pente) est ajoutée dans la BDD ?

Car je me vois mal relancer la macro à chaque fois en cliquant sur "Actualiser" (et si j'oublie, l'actualisation ne sera pas faite).

En gros faire comme si c'était une formule intégrée à la cellule.

Merci bien pour ton aide, le sujet est quasi-résolu.

Cordialement.

Lilian

Re-,

(je voulais revenir sur le fait de lancer la macro lorsque toute nouvelle ligne est créée dans la BDD.)

Est-il possible d'appeler une macro par l'intermédiaire d'une "fonction" personnalisée à écrire dans la cellule ? (comme le code qui existe derrière toute fonction RECHERCHEV(), EQUIV(), INDEX(), SOMME.SI.ENS() ou autre)

On inscrirait la macro comme nouvelle fonction dans la liste des fonctions d'Excel.

La fonction correspondrait à :

= MACRO1 ( plage_a_afficher ; valeur_cherchée_1 ; tableau_recherche_1 ; valeur_cherchée_2 ; tableau_recherche_2 )

la logique entre valeur_cherchée_1 et tableau_recherche_1 serait donc "="

le logique entre valeur_cherchée_2 et tableau_recherche_2 serait donc ">"

Et on écrirait alors dans les cellules :

de la colonne BDD[Qmin calc] : =MACRO1 ( Ref[Qmin] ; BDD[pente] ; Ref[pente] ; BDD[Q100] ; Ref[Qmin])

de la colonne BDD[Type calc] : =MACRO1 ( Ref[Type] ; BDD[pente] ; Ref[pente] ; BDD[Q100] ; Ref[Qmin])

Peut-être que je me plante complètement et qu'on ne peut pas entrer de telles fonctions personnalisées sous Excel... ?

Cordialement

Salut Lilian,

Je ne connais pas trop les fonctions personnalisées, probablement parce que l’on peut très bien s’en passer dans plus de 99 % des cas ????

Dans le fichier ci-joint, à chaque fois que tu modifies quoi que ce soit sur la feuille, une macro événementielle – placée dans le code de la Feuil1 - est déclenchée. Si les cellules E et F d’une ligne sont complétées, le code cherche alors les valeurs désirées dans les colonnes B et C, quel que soit le nombre de données rajoutées dans le tableau Ref et quelle que soit la ligne du tableau BBD.

A te relire.

Bonjour,

c'est parfait, exactement ce que je recherchais !

Je viens de tester et ça fonctionne à merveille.

Et pas de de soucis pour les fonctions personnalisées, je m'en passerai.

Merci beaucoup pour ton aide précieuse et rapide.

Sujet résolu

Bien cordialement,

Lilian

Bonjour a vous,

Beau boulot Yvouille !

J'en suis loin avec mes formules mais bon...

Je voulais juste apporter une contribution avec une mise en forme pour aider à la lecture.

Quand tu rentres une valeur elle s'encadre

Cordialement,

Leakim

Rechercher des sujets similaires à "recherche automatique fonction criteres"