Recherche de valeur selon 2 critères

Unnamed

XLDnaute Nouveau
Bonsoir à tous, je viens pour mon premier message sur le forum avec un petit problème dont je n'arrive pas à me sortir. A noter que je débute en VBA.

Je m'explique, j'ai une base de donnée de salariés d'une entreprise. Je voudrais retrouver des informations spécifiques à un salarié extraite de ma base de donnée dans une autre feuille. Ainsi l'utilisateur clique sur un bouton qui ouvre un userform dans lequel il rentre le nom du salarié et les informations correspondantes vont s'inscrire dans un tableau sur une feuille annexe à la BDD. Pour ce faire, le nom inscrit dans le userform s'inscrit dans une cellule sur une autre feuille et à cette cellule est attachée différentes recherchev qui permettent d'afficher son salaire, son poste etc..

Le problème se pose si deux salariés ont le même nom de famille. Comme l'utilisateur rentre le nom et pas d'autre information, excel affiche le premier resultat qu'il trouve. J'ai pensé alors à faire un nouveau userform qui demanderait à la fois le nom et le prénom. Mais je ne parviens pas à faire une recherchev avec 2 critères.

Je joints avec un fichier pour vous montrer : Regarde la pièce jointe TEST.xlsm (toutes les informations sont fictives).
Qu'on écrive Bonnet Sophie ou Bonnet Martin la colonne "Poste" ne change pas puisqu'elle ne regarde que le nom de famille. La colonne "Salaire..." affiche #N/A car j'ai mis la formule : =RECHERCHEV($A$2&$B$2;Tableau1[#Tout];4;FAUX) qui ne veut rien dire je pense.

Quelqu'un pourrait-il m'aider s'il vous plait?

Merci d'avance et bonne soirée.
 

Pièces jointes

pascal21

XLDnaute Barbatruc
Re : Recherche de valeur selon 2 critères

bonsoir à tous
une astuce toute bête lorsqu'il faut entrer 2 critères
colonne A le nom
colonne B le prénom
colonne C cette formule =a1 & " " & b1 ce qui donne dans c1 "nom prénom" tu n'as donc plus 2 critères pour recherchev mais bien 1 seul
il faut bien sur mettre cette colonne dans la matrice et comme valeur recherchée
voir ici une demande similaire avec un fichier que j'ai fourni
et ici pour une approche beaucoup plus pro "rubrique recherchev"
 
Dernière édition:

Unnamed

XLDnaute Nouveau
Re : Recherche de valeur selon 2 critères

@bcharef : Oui c'est ça, merci !

Je vais essayer de l'appliquer à mon logiciel parce qu'il y a beaucoup d'autres colonnes normalement.
Pourrais-tu juste m'expliquer un peu plus en détail les fonctions que tu as ajouté ?

EDIT : je n'y arrive pas vraiment, c'est vraiment complexe comme méthode.

@pascal21 : en effet la concatenation pourrait être plus simple en échange de quoi, l'approche plus professionnelle me parrait plus intéressante même si j'ai du mal à la comprendre. Il me semble que c'est ce que bcharef a fait à sa manière non ?
Dans le deuxieme lien il est écrit ceci :
"On fait une recherche sur 2 critères (Nom+ Prénom)

=INDEX(Villes;EQUIV(1;(Noms=F2)*(Prénoms=G2);0))
valider avec Maj+Ctrl+entrée
[...]
Remarque: Sommeprod() ne permet pas de récupérer une valeur Alpha.
La formule =BDLIRE(A1:C10;"ville";F1:G2) donnerait le même résultat mais plus rapidement."

La formule BDLIRE est-elle applicable ici ?
J'ai essayé comme ceci (toujours dans mon fichier de base) : =BDLIRE(Tableau1[#Tout];"Poste";A2:B2)
Mais j'ai une erreur #VALEUR! Sauf que je ne comprends pas pourquoi.

Ensuite j'ai aussi trouvé ceci sur un autre site : ICI {=INDEX(plage3;MAX(SI((crit1=plage1)*(crit2=plage2);LIGNE(plage3);0)))}

Que j'ai adapté ainsi sans trop comprendre : =INDEX(Tableau1[Poste];MAX(SI((A2=Tableau1[Nom])*(B2=Tableau1[Prénom]);LIGNE(Tableau1[Poste]);0)))
Mais ca ne fonctionne pas non plus.
 
Dernière édition:

bcharef

XLDnaute Accro
Re : Recherche de valeur selon 2 critères

Bonsoir pascal21,
Re bonsoir Unnamed,
Rebonsoir à toutes et à tous.

La fonction ESTNA() permet de tester le type de la valeur non disponible (#N/A) de la cellule, alors, si le test est VRAI (Le résultat affiche #N/A), alors, il faut mettre "Inexistant", ou bien, "", comme vide; si non, il faut afficher le résultat de la formule, soit dans notre cas (INDEX(Poste;EQUIV(A2&B2;Zone;0)

L'usage de la combinaison des deux fonctions Equiv() et Index(), la première, soit equiv(), permet de déterminer la position de la valeur recherchée dans la plage où elle existe, alors, que la deuxiéme, soit,Index() permet de renvoyer une valeur dans une matrice ou bien une plage, selon la position déterminée par la fonction Equiv().

Le fichier ci-joint porte plus d'éclaircissement.

Dans l'espoir, que, j'ai pu éclaircir ton besoin.

En cas d'ambigüité, n'hésite pas.

Salutations distinguées.

BCharef
 

Pièces jointes

Unnamed

XLDnaute Nouveau
Re : Recherche de valeur selon 2 critères

Re-bonsoir

Merci pour tes lumiere bcharef, en effet c'est plus clair maintenant, mais je trouve que c'est une procédure assez lourde même si elle est très bien construite et précise. Je comprends ce qu'il se passe mais je ne saurai la créer moi-même. Comme c'est pour un exercice car je suis étudiant, je préfèrre éviter de l'utiliser car j'aurai du mal à l'expliquer.

Par contre en m'opstinant un peu, j'ai réussi grâce à la fonction BDLIRE qui est très pratique à mettre en place. J'ai compris d'où venais mon erreure précédente :
Plutot que de mettre : =BDLIRE(Tableau1[#Tout];"Poste";A2:B2)
Il faut mettre : =BDLIRE(Tableau1[#Tout];"Poste";A1:B2)

A priori ca fonctionne, merci beaucoup à vous deux.
 

Discussions similaires

Réponses
2
Affichages
187
Réponses
9
Affichages
421
  • Question Question
Microsoft 365 Synthèse de données
Réponses
23
Affichages
933

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
315 283
Messages
2 118 012
Membres
113 408
dernier inscrit
lausablk