Rapport de message :*
 

Re: Recherche de valeur dans une colonne

Titre du sujet : Re: Recherche de valeur dans une colonne
par JeanMarie le 14/10/2012 18:08:22

Re...

Turfman, pour la compréhension de tout le monde, il est bon de rester sur le fil de départ.

Pour ce qui d'une version en passant par des colonnes intermédiaires, voici deux possibilités.

Dans un premier temps, ce que je n'avais pas remarquer avec ma première formule, c'est que tu as des doublons dans la plage E6:E25. cela va provoquer un problème, il faut donc neutraliser les valeurs ces doublons pour éviter de les avoir plusieurs fois dans la colonne G.

On peut le faire de plusieurs manières. En voici une, formule à mettre en I6 et glisser vers le bas
=SI(E6;SI(NB.SI(E$5:E5;E6);"";E6);"")
L'étape suivante est de dénombrer le nombre de valeurs sans doublons que contient la plage C6:C25, tu connais déjà la formule à mettre en J6 et glisser vers le bas
=NB.SI(C$6:C$15;I6)
On obtient une suite de 0 ou de 1.


Comme écrit dans mon premier poste, on utilise la fonction EQUIV ppur rechercher la position du premier 1 dans la plage. Formule en K6
=EQUIV(1;J6:J25;0)
Problème, on ne peut pas faire un glisser vers le bas, EQUIV ne retournant invariablement que la position du premier 1 dans la plage, il va falloir russé. On peut utiliser la fonction DECALER qui permet de déterminer une référence de cellules en fonction de paramètres mathématiques.
En formule à mettre en J7, et glisser vers le bas

=EQUIV(1;DECALER(J$6:J$25;SOMME(K$6:K6););0)
On obtient par cette fonction l'écart entre chaque valeurs de communes entre B (sans doublon) et A.
Avec la fonction INDEX on récupère la valeur, formule à mettre en L6
=SI(ESTNA(K6);"";INDEX(E$6:E$25;K6;1))

En L7 il faut cumuler les différents écarts, formule en L7 et glisser vers le bas

=SI(ESTNA(K7);"";INDEX(E$6:E$25;SOMME(K$6:K7);1))

Avec cette suite de colonnes intermédiaires on obtient le résultat voulu.

Tu verras à la longue que le départ conditionne les fonctions que tu devras utiliser pour résoudre un problème.
Rechercher la même valeur 1 pose des problèmes, et si l'on indexait la série de 0 et de 1 ....

Voici une autre solution.
Pour commencer à la fin de ton tableau B, met un " " (espace) en E26.

Pour cette solution, on va repartir des valeurs de ton tableau B sans les doublons, donc ce qu'il y a dans la plage I6:I25. 

Formule en N5 et glisser vers le bas

=SI(NB.SI(C$6:C$15;I6);LIGNE(A1);21)
Tu vas obtenir une suite valeur 21;2;21;4;21;21;7;21;9.......
Ta plage de ton tableau B contient 20 lignes, et je t'ai fais mettre un espace la la 21 ligne de ce tableau, cette servira de gestion d'erreur.

Pour ce qui est de la formule avec INDEX en Q6, et glisser vers le bas.
=INDEX(E$6:E$26;PETITE.VALEUR(N$6:N$25;LIGNE(A1));1)
On obtient le résultat demandé.

La fonction LIGNE(A1) retourne le numéro de la ligne de la référence de la cellule. cela évite de changer l'incrément dans la fonction PETITE.VALEUR

La fonction PETITE.VALEUR retourne la énième plus petite valeur de la plage en référence. Cela permet de faire un tri croissant...

Turfman tu as donc deux solutions sans utilisation de formules matricielles.

@+Jean-Marie