Excel: recherche dans une base

Fermé
Alain - 8 déc. 2009 à 03:49
 Alain - 16 déc. 2009 à 16:59
Bonjour,

J'ai une base de données A1 à F100. Dans cette base "A" comprend tous les prénoms et "F" comprend tous les montants. Dans la colonne "A", chaque prénom ne peut y être plus de neuf fois et il sont tous un à la suite de l'autre par ordre alphabétique et pas toujours la même quantité.

La case G1, j'indique le prénom dont je veux rechercher la valeur du ou des montants.

Les cases H1 à H9, sont le résultat des montants qui correspondent à chaque prénom.

Puisque la quantité de chaque prénom est variable je dois capturer les montants qui sont en relation avec ces prénoms. Les autre cases seront vides "".

Exemple,

Il y a 5 Paul et 4 Henri dans la colonne "A". Si dans la case G1 j'indique Paul, Je dois retrouver dans les cases H1 à H5 les montants qui correspondent à Paul dans la base de données (les cases H6 à H9 seront vides, ""). Si par-contre j'indique Henri dans la case G1, je dois retrouver dans les cases H1 à H4, les montants qui correspondent à Henri dans la base de données (les cases H5 à H9 seront vides, "").

J'essaie par tous les moyens d'utiliser la fonction "RechercheV" et les commandes connexes, je n'arrive pas à trouver la solution.

Merci de m'aider à résoudre mon problème.

Alain
A voir également:

16 réponses

Mike-31 Messages postés 18354 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 1 janvier 2025 5 110
8 déc. 2009 à 09:27
Salut,

Avec cette formule matricielle à valider en cliquant en même temps sur Ctrl la toche Shift (c'est la touche majuscule) et Entrée

=SI(LIGNES($1:1)<=NB.SI(Nom;$G$1);INDEX(Montants;PETITE.VALEUR(SI(Nom=$G$1;LIGNE(INDIRECT("1:"&LIGNES(Nom))));LIGNES($1:1)));"")


regardes sur l'exemple ci-dessous

https://www.cjoint.com/?mijBGcSqhu

0
salut, c'est gilou
friant de vos solutions j'ai particulierement epluché cette derniere permettant (haut la main) de supplanter la RECHERCHEV . Je cite :=SI(LIGNES($1:1)<=NB.SI(Nom;$G$1);INDEX(Montants;PETITE.VALEUR(SI(Nom=$G$1;LIGNE(INDIRECT("1:"&LIGNES(Nom))));LIGNES($1:1)));"") ,àvalider .......
ce qui "m'ebaubi " c'est le passage PETITE .VALEUR et ensuite "1:&lignes(nom) ce qui vaut 1: 49 (dans l'exmp)
49 etant le nb de lignes donc 1:49 ressemblant etrangement a un "format d'heure" ;lors de l'epluchage j'ai remplacer ce segment par "1:49" ça marche ;alors pouvez vous m'expliquer le pourqoi du comment de :
si ce n'est que pour renseignér la fonctoin LIGNE en amont d'INDIRECT de plus pour petite valeur :je ne saisie pas
merci d'etre pedagogue
0
Bonjour Mike,

Un grand merci pour cette formule. J'ai fait l'essai de ton fichier sur Excel 2002 et cela fonctionne tres bien.

J'essai de comprendre le principe de fonctionnement et j'essai de transposer cette formule dans un autre fichier et je ne suis pas capable d'avoir un résultat comme le tiens. Est-ce que tu peux prendre quelques minutes afin de m'expliquer ce que je dois faire pour ceci ?


La grille des noms et montants sera dans la feuille nommée "Test" , les noms seront dans la colonne "i" et les montants dans la colonne "N". Ici j'aimerais précisé que dans cette feuille, toutes les colonnes et les lignes sont utilisées. Donc je vais capturer seulement les infos de ces deux colonnes.

La case dont j'inscris le prénom demandé sera dans une autre feuille nommé "Situation actuelle" et sera dans la cellule B3. Les résultats eux, seront dans cette même feuille "Situation actuelle" et seront dans les cellules C10 à C19.

J'imagine que lorsque je vais voir la formule, je comprendrais le montage.

Merci, d'avance.

Alain.
0
Mike-31 Messages postés 18354 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 1 janvier 2025 5 110
9 déc. 2009 à 11:33
Re,

Récupères ton fichier avec quelques explications

https://www.cjoint.com/?mjlGCQ6eJD
0
Mike-31 Messages postés 18354 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 1 janvier 2025 5 110
9 déc. 2009 à 11:33
Re,

Récupères ton fichier avec quelques explications

https://www.cjoint.com/?mjlGCQ6eJD
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Re-Bonjour Mike,

Je tiens à te remercier grandement de m'avoir répondu aussi rapidement et avec autant de précision, quelle générosité.

Je vérifie le tout, digère l'information et je vais essayer de transposer dans un autre fichier. Si je réussi, c'est que j'aurais très bien compris la leçon et j'aurais augmenter considérablement ma connaissance avec les recherche dans les matrices.

Aussitôt que j'aurais terminé, je vais conclure le tread.

Merci, a+

Alain
0
Bonjour Mike,

Je vois dans la programmation, la recherche dans la colonne "noms" ainsi que le résultat dans la colonne "montants.

Ma première question est, Au lieu de capturer les valeurs qui sont présentes dans la colonne "montants", si je veux saisir les valeurs dans la colonne "Type" (qui est la colonne précédente à la colonne "montants"), que dois-je faire ?

J'ai modifié dans la formule le mot "montants" pour le mot "type" en espérant saisir les valeurs qui sont dans la colonne "Type" et ce ne fut pas le cas. Je me retrouve plutôt avec une erreur#NOM.

Merci,

Alain.
0
Mike-31 Messages postés 18354 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 1 janvier 2025 5 110
11 déc. 2009 à 11:33
De la cellule I2 à I50 la plage à été nommée Nom
Dans les mêmes limites de N2 à N50 la plage à été nommée Montants

Si tu renommes une plage exemple la plage Montants par Type il faut changer le nom dans la Formule en respectant les majuscules etc ...

=SI(LIGNES($B$3:$C3)<=NB.SI(Nom;$B$3);INDEX(Montants;PETITE.VALEUR(SI(Nom=$B$3;LIGNE(INDIRECT("1:"&LIGNES(Nom))));LIGNES($B$3:$C3)));"")


=SI(LIGNES($B$3:$C3)<=NB.SI(Nom;$B$3);INDEX(Type;PETITE.VALEUR(SI(Nom=$B$3;LIGNE(INDIRECT("1:"&LIGNES(Nom))));LIGNES($B$3:$C3)));"")

et confirmer la formule en matricielle comme je te l'ai expliqué sur la pièce jointe

cliquer en même temps sur les touches Ctrl, Shift (qui est le touche majuscule et Entrée il faut que la formule se place entre ces accolades {}

0
bonjour
merci pour le fichier explcation
bon week end
0
Bonjour Mike,

Merci de m'avoir répondu, voici ce que j'ai fait.

Dans ton fichier, j'ai copié la colonne N dans la colonne O et j'ai nommé la cellule O1 "Type". Ensuite j'ai copié, dans la feuille "Situation Actuelle", les cellules C10 à C24 et collé dans D10 à D24.

Jusque là, ça va bien, j'ai les valeurs identiques pour C10-C24 et D10-D24.

Maintenant, je modifie le mot "Montants" pour le mot "Type" dans les formules et je m'assure de faire le Ctrl-Shift-Enter afin de voir apparaitre les accolades, ce qui signifie que c'est devenu en mode matrice, et je me retrouve avec des erreur de résultat.

Ensuite, je reviens dans la case D10 et je remet le mot "Montants" au lieu de "Type" et je revois le montant comme celui de C10.

Donc je suis capable de revenir à la valeur initiale, mais je ne suis pas capable de mettre une autre valeur à rechercher (donc une autre colonne).

En passant, j'ai décomposé la formule afin de me familiarisé avec les fonctions NB, Petites, Lignes, et Index. Il m'en reste encore beaucoup afin de maitrisé parfaitement ces fonctions, mais je suis certains qu'un jour ce serais en mesure de le faire. Merci de ton aide.

Alain.
0
Mike-31 Messages postés 18354 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 1 janvier 2025 5 110
11 déc. 2009 à 19:00
Re,

Ton erreur est normale, la plage nommée Nom commence en I2 jusqu'a I50, et tu copies la plage Montants de la colonne N dans la colonne O, jusque la pas de problème.

Par contre lorsque tu renommes la plage Montants en Type elle commence en O1 il y a décalage avec la plage Nom qui commence en I2, soit tu rectifies la plage Nom I1 à I50 pour qu'elle soit en symbiose avec la plage Type ou la plage Type commence en O2

https://www.cjoint.com/?mls3tEtpR8

Gilou, en voyant ton post je me posais la question à savoir si je t’avais donné les explications sur la formule. Si je t’ai oublié excuse moi et confirme le moi
0
bonjour MIKE
tu ne m'as pas envoyé d'explications detaillée ,mais ,à , la consultation du lien (+ chargement pour etude)
j'ai constaté que c'etait pas mal expliqué ; alors pour m'entrainer j'ai "extrapolé " cette fonction dans une de mes etudes ;en y rencontrant beacoup de problemes pour la faire marcher par exemple : les valeurs (resultat) affichées ne correspondent pas a celles de la valeur "cible" ;serait ce du au fait que differement à ton modele j 'ai plusieurs colonnes ( 5) ,j'en doute .Un autre probleme : valeur (gilou) ; dans le tableau je sais qu'il appararait 2 fois : la fonction me sort 2 valeurs mais ce sont les 2 premieres du tableau
j'ai passé mon dimanche apres midi a cherché ou je m'etais planté ; mais je n'abandonne pas , cette fonction est trop utile ;notement pour aller fouiller dans une B donnees
alors si tu veux me faire parvenir des explications detaillées ,je suis plus que preneur
merci d'avance
0
Mike-31 Messages postés 18354 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 1 janvier 2025 5 110 > gilou
14 déc. 2009 à 14:52
Salut Gilou,

Récupère les explications sur le fichier joint. Pour tester ou construire une formule complexe ou imbriquée soit tu écris chaque partie de la formule dans des cellules différentes et lorsque tu obtiens le résultat escompter, tu imbriques les différentes parties.
Avec l’habitude, tu mettras dans la barre des formules la partie de la formule à tester en surbrillance et clic sur la touche F9 le résultat prendra la place de cette partie de formule et Echap pour sortir

https://www.cjoint.com/?moo0LCNunR
0
gilou > Mike-31 Messages postés 18354 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 1 janvier 2025
14 déc. 2009 à 17:48
bonsoir
merci pour ces explications detaillées et accompagnées de bons tuyaux ; en saucissaunant ainsi c'est tout de suite plus clair : yapuka
bonne soirée
0
Bonjour Mike,

Je crois que mon problème viens du fait que je ne comprends pas comment définir la plage de données.

À la base, les "noms" sont dans la plage I et les "Montants" sont dans la plage N. Normalement je construis mes formules afin de retrouver ces valeurs assez facilement. La formule que tu me suggères (que je dois dire, très efficace) ne me permet pas de retrouver cette plage aussi rapidement.

Donc j'imagine qu'il faut identifier une plage à quelque part dans Excel. Cette plage devrait être I(noms) et N(montants).

De plus si je veux ajouter une plage M(Type) et un plage O(Quantité), alors j'imagine qu'il faut que j'identifie ce changement de plage.

Ma question est, Comment as-tu identifié les plages I et N, et que dois-je faire pour ajouter une plage M et O (La plage I est toujours les noms qui permettent ma recherche des montants).

Merci de ta précieuse collaboration.

Alain.
0
Mike-31 Messages postés 18354 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 1 janvier 2025 5 110
11 déc. 2009 à 20:51
Re,

Commence par ouvrir ton classeur et vas dans Insertion/Nom/Définir et dis moi ce que tu vois dans cette boite de dialogue
0
Bonjour Mike,

Ça y est, j'ai enfin réussi à comprendre l'identification de la plage et une bonne partie de la construction de la formule.

Puisque tu m'as guidé dans la boite de dialogue, j'ai immédiatement compris l'identification des plages et j'ai ajouté ceux dont je voulais saisir les données.

Un grand merci à toi.

Alain.
0
Bonjour Mike,

Dans le même contexte de la recherche, j'aimerais te demander une autre question.

Voici la situation,

J'ai un fichier "fichier1.xls" qui contient ma table de clients (colonne 1) avec le numéro de compte(colonne 2) et le montants dans le compte (colonne 3). Le nombre de clients et le nombre de compte varient indéfiniment.

Il y a aussi "fichier2.xls" qui contient le numéro du compte (colonne 1) ainsi que d'autres informations (colonne 2, 3 et 4). Seul le numéro des comptes est en commun.

Le "fichier3.xls" est vide et sera utilisé pour avoir les données de "fichiers1.xls" et les données de "fichier2.xls" ensemble.

Et pour ce faire j'ai déjà débuté une première importation.À l'intérieur de "fichier3.xls" j'ai été dans l'onglet "Données" et dans "Données Externes" J'ai fait "importer les données", ce qui me permet d'avoir les données de "fichier1.xls" dans "fichier3.xls".

C'est là que ça ce gâte, je n'arrive pas à continuer la fusion.

Voici ma question,

Une fois que j'ai fais l'importation de "fichier1.xls" vers "fichier3.xls, j'aimerais importer les données de "fichier2.xls" dans "fichier3.xls" et les ajouter au données dans "fichier3.xls" (bien sur, ce sera à la suite des autres données, dans d'autres colonnes).

Pour faire l'importation de "fichier2.xls" dans "fichier3.xls" il s'agirait d'enligner les données à partir du numéro de compte.

Seul le numéro de compte est la donnée commune pour fusionner les trois fichiers.

Le résultat recherché serait d'ouvrir "fichier3.xls" les données seraient importés depuis "fichier1.xls" ensuite les données qui correspondent aux numéro de comptes (qui viennent d'arriver dans "fichier3.xls") seront importés depuis "fichier2.xls".

J'espère avoir apporté le plus de détails possible afin de résoudre mon problème.

Merci d'avance.

Alain.
0
Un détail,

je connais la formule "recherchev" par-contre étant donné que je ne connais pas le nombre de ligne que contient mes fichiers, je ne veux pas faire un copier-coller de la formule dans toutes les lignes.

Je voudrais plutôt avoir une séquence automatique en fonction du nombre de ligne que contient le "fichier3.xls" une fois que les donnes de "fichier1.xls" sont importées.

Un peu dans le même genre que ta première réponse qui ne permet d'afficher seulement les lignes qui sont nécessaires.

Merci

Alain.
0
Mike-31 Messages postés 18354 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 1 janvier 2025 5 110
15 déc. 2009 à 11:50
Re,

Je sais pas si j'ai tout bien compris,
tu souhaites rapatrier sur le fichier 3 les données des fichiers 1 et 2 avec un point commun le numéro de compte.

Si c'est ça il vaudrait mieux avoir les numéros de compte sur la colonne A fichier principal qui pourrait être le fichier 1

pour ne pas avoir à recopier ces numéros sur les fichier 2 et 3 faire un copier coller avec liaison de la colonne A du fichier 1
ensuite fonction RECHERCHEV sur les fichier 1 et 2

https://www.cjoint.com/?mplXFvYQOI

Pour les messages d'erreur causé par l'absence de données, on verra plus tard
0
Bonjour Mike,

Effectivement je peux utiliser le copier-coller avec liaison sur la colonne 1 et je peux également utiliser la fonction RechercheV.

Mon problème était que je devais manipuler les info ( pour le premier cas) ou avoir un fichier trop lourd ( dans le deuxième cas).

En utilisant la fonction RechercheV je devais faire un copier-coller de cette formule =si(A1<>"",rechercheV(A1;xx;yy;faux) à toutes les lignes.

J'ai trouvé la fonction qui me permet de faire le résultat souhaité sans etre obligé de copier-coller à toutes les lignes.


Voici comment j'ai fait,

Premièrement, dans le "fichier3.xls", j'ai été dans "données", "Données Externes" et ensuite "Importer les données". et j'ai sélectionner les données qui sont dans le "fichier1.xls". À ce moment toutes mes données du "fichiers1.xls" ce retrouvent dans le "fichier3.xls" sur plusieurs lignes et plusieurs colonnes. (peut inporte le nombre de ligne, ici le nombre de colonne reste stable)

Ensuite,

Dans le "fichier3.xls", au bout de la dernière colonne qui a des données, j'ai inscirt la formule RechercheV(A1;xx;yy;faux) et j'ai été dans "Données" et dans "Données Externes" ensuite dans "Propriété de la plage de données". Il y a une fenetre qui s'ouvre et dans le bas j'ai coché "Recopier les formules dans les contenu voisines".

Voilà c'est tout. À partir de maintenant quand j'ouvre le "fichier3.xls", les données sont importé de "fichier1.xls" et il y a une rechercheV qui se fait dans "fichier2.xls" et je vois le résultat dans les lignes dont j'ai des données et non pas à tous le fichier au complet.

Mike, Je te remercie grandement de ton aide, cela m'a permis de comprendre pas mal de chose et de résoudre mes problèmes.

Alain.
0