Recherche de valeur dans une colonne
#1
Régulier XLPages

Inscription: 25/09/2011

Messages: 54

Système d'exploitation:
PC
Version Excel utilisée:
2007
Posté le : 13-10-2012 17h12

Bonjour Didier, Le Forum,

Je cherche la solution au problème suivant: rechercher une  valeur de la colonne B dans la colonne A et s'il elle est trouvée,  la placer en colonne C et dans le même ordre de classement qu'en B. (voir en PJ)

Je galère grave depuis pas mal de temps, et à bout de force je fais appel à vous.  

Jean-Marie va sûrement trouver !

Cordialement.

Turfman.
Pièce jointe:
zip Classeur1.zip   [ Taille: 7.12 Ko - Téléchargements: 1111 ]
Hors Ligne
Rapport   Haut 

Re: Recherche de valeur dans une colonne
#2
Accro XLPages

Inscription: 09/05/2007
De Courcelles-les-Montbéliard

Messages: 286

Système d'exploitation:
PC & Mac
Version Excel utilisée:
Mac 2004 - 2011, et PC 2003 - 2010
Posté le : 14-10-2012 10h32
Bonjour Turfman, Didier, le Forum

Pour savoir si une valeur numérique existe dans une plage, il y a une fonction nommée NB.SI()
=nb.si(C6:C25;E6)
elle retourne soit 0 ou 1. 
Si ceci vaut pour une seule valeur numérique, on peut le faire sur une suite de valeurs
=NB.SI(C6:C25;E6:E25)
Pour que cela fonctionne correctement il faut valider cette partie en matricielle, c'est à dire par les touches Ctrl+Shift+Entrer. Cette partie va retourner une suite de 20 valeurs comportant des 0 ou des 1. Pour voir cette suite de valeur sélectionne une plage de cellules (I6:I25), rentre la formule et valide par Ctrl+Shift+Entrer.


Tu peux remarquer qu'il y a une correspondance entre les valeurs E6:E25 avec les valeurs retournées, elles sont ordonnées. Si l'on recherche dans cette plage retournée la position de la première valeur 1, on pourra l'associer avec la valeur de la plage E6:E25.


Normalement, on devrait utiliser les valeurs de la fonction NB.SI dans une plage (ou tableau) intermédiaire et utiliser une autre cellule pour rechercher et retourner la valeur. Mais restons dans une formule unique qui retournera les valeurs voulues, même si cela va se compliquer....


Ensuite avec la fonction EQUIV on va rechercher la première égale à 1 et avec la fonction INDEX on retourne la valeur. Ce qui donne une formule avec 3 fonctions imbriquées. Validation par Ctrl+Shift+Entrer
=INDEX(E$6:E$25;EQUIV(1;NB.SI(C$6:C$25;E$6:E$25);0);1);"")
Si l'on glisse vers le bas cette formule, on obtiendra systématiquement la même valeur. Il faut donc aller plus loin
et écarter la première valeur déjà retournée. On pourrait le faire par une imbrication dans la fonction NB.SI
=NB.SI(SI(NB.SI(G$6:G6;C6:C25)=0;C$6:C$25;"");E$6:E$25)
Mais seulement voilà, même si Excel ne retourne pas de message d'erreur lors de la validation, la fonction retourne un message d'erreur #VALEUR!, cela veut dire qu'elle n'accepte pas la partie conditionnelle dans le premier argument.
Il faut donc utiliser une autre fonction pouvant retourner une suite de 0 ou de 1 et acceptant la partie conditionnelle. Cette fonction s'appelle FREQUENCE.
Sans vouloir rentrer dans les détails du fonctionnement de cette fonction, il faut remplacer ce qui ne fonctionne pas par 
=FREQUENCE(SI(NB.SI(G$5:G5;C$6:C$25);"";C$6:C$25);(E:E;C:C))


En intégrant cette partie dans la fonction INDEX(...;EQUIV(1;...;0);1), voici la formule à mettre en G6, et à glisser vers le bas.
=SIERREUR(INDEX(E$6:E$25;EQUIV(1;FREQUENCE(SI(NB.SI(G$5:G5;C$6:C$25);"";C$6:C$25);(E:E;C:C));0);1);"")
Je profite que tu es en version office 2007, pour utiliser la fonction SIERREUR pour écarter le message d'erreur.

trufman, j'espère que le développement de la construction de la formule te permettra de comprendre dans les essais infructueux que tu avais fait ce qui n'allait pas. Si tu as une incompréhension sur mes explications, n'hésite pas à me le dire, j'essayerai d'y apporter un éclaircissement.

Si tu souhaites aussi voir la construction de la fonction INDEX(EQUIV()) avec la fonction des tableaux intermédiaires, pose moi la question.
@+Jean-Marie 
Hors Ligne
Rapport   Haut 

Re: Recherche de valeur dans une colonne
#3
Régulier XLPages

Inscription: 25/09/2011

Messages: 54

Système d'exploitation:
PC
Version Excel utilisée:
2007
Posté le : 14-10-2012 12h21

Bonjour Jean-Marie, Didier, Le Forum,

Tout d'abord Jean-Marie je te remercie infiniment pour le temps que tu as bien voulu  consacrer pour traiter ma question.

Comme d'habitude  c'est nickel, tes explications sont toujours claires et précises et j'ai effectivement compris   pourquoi je n'arrivais pas à finaliser ma formule.

En effet   la construction de la fonction INDEX(EQUIV()) avec la fonction des tableaux intermédiaires m'intéresse et comme tu me le proposes  je vais te poser la question sur un autre fil de discussion.

Je te renouvelle  mes remerciements et crois moi, tu as ensoleillé ma journée.

Bien cordialement.

Turfman.


Hors Ligne
Rapport   Haut 

Re: Recherche de valeur dans une colonne
#4
Accro XLPages

Inscription: 09/05/2007
De Courcelles-les-Montbéliard

Messages: 286

Système d'exploitation:
PC & Mac
Version Excel utilisée:
Mac 2004 - 2011, et PC 2003 - 2010
Posté le : 14-10-2012 18h08
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 
Hors Ligne
Rapport   Haut 

Re: Recherche de valeur dans une colonne
#5
Débutant XLPages

Inscription: 04/09/2015
De France

Messages: 2

Système d'exploitation:
PC
Version Excel utilisée:
2010
Posté le : 04-09-2015 14h56

Bonjour, pour faire suite au problème posé , je voudrais le même mais pour une liste de noms propre et non des chiffres.

Par contre j'ai déjà effectuer le problème de doublon.

 

Merci d'avance

Hors Ligne
Rapport   Haut 

Re: Recherche de valeur dans une colonne
#6
Accro XLPages

Inscription: 23/05/2008
De La Varenne Saint-Hilaire

Messages: 356

Système d'exploitation:
PC
Version Excel utilisée:
2010
Posté le : 05-09-2015 16h30

Bonjour ThierryB et bienvenue parmi nous,

 

Ta question n'est pas très explicite, sans doute devrais-tu ouvrir ton propre fil et déposer un petit fichier exemple de ce que tu cherches à faire, tu auras certainement plus de réponses.

 

A bientôt,

 

mth

Hors Ligne
Rapport   Haut 

Re: Recherche de valeur dans une colonne
#7
Débutant XLPages

Inscription: 04/09/2015
De France

Messages: 2

Système d'exploitation:
PC
Version Excel utilisée:
2010
Posté le : 07-09-2015 10h40

Bonjour Mth

 

Ma question repose sur celle de ce fil ~~Recherche de valeur present dans les colonnes A et B résultat dans C.

 

Mais Ok, je vais préparer cela et créer un nouveau fil.

 

Merci

Hors Ligne
Rapport   Haut 


Vous pouvez voir les sujets.
Vous ne pouvez pas débuter de nouveaux sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

[Recherche avancée]


Qui consulte actuellement ce sujet ?   1 Utilisateur(s) anonymes