RechercheV conditionnelle sur plusieurs feuilles/tableaux

Bonjour à tous et à toutes,

Je voudrais me créer une BDD (dans un 1er temps sous excel) de films.

Ainsi, sur un fichier Excel, j'ai créé plusieurs feuilles de calcul.

Sur ma première feuille, appelée Liste Films, j'ai (oh surprise ) une liste de films, triés de A à Z et surtout, tout genre confondus.

Sur la seconde feuille, appelée Action, j'ai tous les films d'action

Sur la troisième feuille, appelé Animation, j'ai tous les films d'animation

etc... (vous avez compris le principe).

Chaque feuille est composée ainsi :

  • 1ere colonne (colonne A): un N° d'ID
  • 2nde colonne (colonne B): Le titre du film
  • 3e colonne (colonne C): Une note

Ce que cherche à faire c'est, sur la première feuille de calcul, où j'ai tous mes films, c'est ajouter deux ou trois colonnes (en D, E et F) appelée Genre 1, Genre 2 et Genre 3 pour indiquer quel(s) est(sont) le(s) genre(s) de chaque film. Excel chercherait ainsi dans chacune des feuilles où se trouvent les films rangés par genre, et quand il trouve le genre, qu'il m'indique lequel (genre), en face de chaque films, sur la 1ere feuille, dans les colonnes Genre 1 (colonne D), Genre 2 (colonne E) et Genre 3 (colonne F).

Je pense qu'il faut écrire une formule qui combine une recherche avec une ou plusieurs conditions, voire créer une macro en VBA, mais je ne sais pas comment articuler ma formule et encore moins créer une macro en VBA.

J'ai essayé une rechercheV classique pour les films d'action, mais, pour une raison que j'ignore, il m'indique #N/A comme erreur sur tous les films, y compris ceux qui sont dans la feuille Action.

J'ai essayé un =SI(ESTerreur , mais ça n'a pas fonctionné non plus (ou alors je l'ai mal écrite )

Pourriez-vous m'aider, mais aussi et surtout m'expliquer car j'aimerai avant tout apprendre pour pouvoir faire tout seul par la suite ?

D'avance merci pour vos réponses .

Bonjour, Bienvenue sur le forum,

Merci de nous joindre un exemple de fichier avec quelques lignes de données à chaque feuille.

A ta place, je ne serais meme pas passe par de la programmation.

Dans tes feuilles actions/commedie etc j'aurais directement ecrit:

  • 1ere colonne (colonne A): un N° d'ID
  • 2nde colonne (colonne B): Le titre du film
  • 3e colonne (colonne C): Une note
  • 4e colonne (colonne D): Le genre (identique donc sur chaque page)

Apres faire un joli copier coller de toutes ces feuilles les unes a la suite des autres dans ta page principale (Liste Films).

Finir par faire un tri alphabetique de ta colonne B...

Bonjour,

Désolé de ne vous répondre que maintenant, mais je viens juste de voir que vous m'aviez répondu (la notification de réponse par mail n'a visiblement pas fonctionée)

@Raja : je joins à mon message le fichier dont je parle

@Poulu : J'ai bien pensé le faire, malheureusement ça ne fonctionne pas car un film peut avoir plusieurs genres. Du coup, j'aurais autant de fois un film qu'il aura de genres. Ainsi, si je prends le film "Terminator", il a 2 genres : Action et Science-fiction; du coup, avec la méthode que tu préconises, je l'aurais en double (une fois pour Action et une autre fois pour Science fiction).

73liste-films.xlsx (79.04 Ko)

Bonjour,

Moi si j'étais vous je rangerai tous les films sur une même feuille en leur donnant à chacun un index different car dans votre cas, 5 films ont l'id 1, l'id 2 (etc...). Vous pouvez facilement ranger tous vos films sur une seule feuille et vous bidouiller une autre feuille pour manipuler l'information selon vos gouts.

Bonjour Lean,

Moi si j'étais vous je rangerai tous les films sur une même feuille en leur donnant à chacun un index différent car dans votre cas, 5 films ont l'id 1, l'id 2 (etc...).

J'ai déjà rassemblé tous les films sur la 1ere feuille (Liste films). Sur les autres pages (celles où j'ai rangé les films genre par genre), il y a effectivement, pour un même film plusieurs ID.

Ainsi, si on prend le film "10 000", sur la 1ere feuille, où j'ai tous mes films, ce film a l'ID 8. Par contre, sur la feuille où sont regroupés tous les films d'Action, ce même film a l'ID 1.

Pour appliquer ce que vous me proposez de faire, j'ai donc entré la formule suivante sur la feuille Action :

=RECHERCHEV(B2;'Liste films'!A$2:C$23768;1;FAUX)

Ainsi, avec cette formule, je demande à Excel, de m'afficher, sur la feuille Action, le résultat d'une recherche verticale, sur la 1ere colonne de la 1ere feuille (Liste films).

Problème, quand le titre est un chiffre (comme ici), Excel ne m'indique pas l'ID qu'il a trouvé sur la feuille Liste films, mais le titre même du film (alors que je précise bien que je cherche sur la 1ere colonne, pas sur la 2de !). Autrement dit, ici, pour mon exemple du film "10 000", il m'affiche comme ID "10 000" au lieu de "8".

Le pire c'est quand je fais une recherche sur des lettres (99% des films), j'ai alors "#N/A" comme résultat

Alors, ensuite, plus loin, vous écrivez :

Vous pouvez facilement ranger tous vos films sur une seule feuille et vous bidouiller une autre feuille pour manipuler l'information selon vos gouts.

Le problème, c'est ce que j'expliquais à Poulu, un même film peut avoir entre 1 et 4 genres. Donc oui, je peux mettre tous mes films sur une même feuille, où ils auront un ID unique, mais par contre, j'en aurais beaucoup en double voire en quadruple, car ils appartiendront à plusieurs genres différents.

Par contre, je ne comprends pas la seconde partie de cette phrase :

et vous bidouiller une autre feuille pour manipuler l'information selon vos gouts.

Comment, concrètement vous "manipulez l'information" ? Autrement dit (je reprends mon exemple du film "10 000"), comment faites-vous pour avoir en :

Colonne 1 : ID : 8

Colonne 2 : Titre du film : 10 000

Colonne 3 : Note (facultative) : 4.3/10

Colonne 4 : Genre 1 : Action

Colonne 5 : Genre 2 : Aventure

Colonne 6 : Genre 3 : Drame

Colonne 7 : Genre 4 : Fantastique

Vous pensez peut-être que j'ai la liste de tous les films avec les genres de chacun et qu'il ne me reste plus, à partir de cette liste, qu'à découper cette grande liste et en faire d'autres (listes), rangées elles, par genre. Or, c'est l'inverse que j'ai. J'ai plusieurs listes, rangées par genre et je veux, à partir de ces listes, n'en faire plus qu'une seule où je retrouverai tous les genres d'un film.

Bonsoir

Quelque chose m'échappe

spip93 a écrit :

Chaque feuille est composée ainsi :

  • 1ere colonne (colonne A): un N° d'ID
  • 2nde colonne (colonne B): Le titre du film
  • 3e colonne (colonne C): Une note

Avec ta formule

=RECHERCHEV(B2;'Liste films'![surligner=#00FFFF]A$2:C$23768;1;FAUX)

Tu recherches un titre de film dans la colonne ID

Donc c'est normal que tu ais #NA

Le plus simple : Pourquoi ne pas fournir un fichier dans lequel tu notes ce que tu as et ce que tu veux

Bonsoir,

Parfois la méthode la plus adaptée n'est pas celle que l'on veut obstinément.

Pour se fil de discussion, il faudra se contenter du cahier des charges :

Avoir une liste qui va chercher les informations dans differentes listes en autorisant les doublons d'indexation.

Bonjour

En relisant je me suis aperçu que tu avais mis un fichier

Alors à tester

Merci Banzai. J'ai testé ton fichier et ta macro, ça fonctionne relativement bien. Le soucis, c'est que ça me met, dans la colonne du genre, la note du film et non un X comme on pourrait s'y attendre.

D'autre part, pourrais-tu STP m'expliquer ta macro (parce que ce qui m'intéresse ça n'est pas uniquement d'obtenir le résultat attendu, mais comprendre et apprendre comment obtenir (par moi-même) ce résultat ?

D'autre part, dans un autre message tu écris ceci :

=RECHERCHEV(B2;'Liste films'!A$2:C$23768;1;FAUX)

Tu recherches un titre de film dans la colonne ID

Donc c'est normal que tu ais #NA

Où est-ce que je pèche dans ma formule ? Pourquoi c'est normal que j'aie #N/A ? Parce que la valeur cherchée est du texte (Titre du film) et le résultat de cette recherche un chiffre (ID) ou parce que la valeur cherchée est sur une colonne (colonne B) et la zone de recherche sur une autre colonne (la colonne A); à moins que ce soit les deux ?

Quelle fonction je pourrais mettre en place pour remplacer celle-ci ?

Bonjour

spip93 a écrit :

c'est que ça me met, dans la colonne du genre, la note du film et non un X comme on pourrait s'y attendre.

Une note indique l'appréciation et pour choisir un film : la note indique le genre (comme un X) mais aussi son intérêt

Dans ta formule

=RECHERCHEV(B2;'Liste films'!A$2:C$23768;1;FAUX)

Tu recherches un titre de film (B2) dans la colonne des ID (A$2:C$23768)

Tu cherches du texte dans une colonne contenant des nombres : tu auras un messages d'erreur

Ta formule modifiée

=RECHERCHEV(B2;'Liste films'!B$2:C$23768;1;FAUX)

Tu recherche un titre (B2) dans la colonne Titre (B$2:C$23768) tu auras un résultat

Quelques commentaires dans le code

Bonsoir Banzai,

J'ai recopié la formule corrigée que tu as mise dans ton dernier message.

Effectivement, je n'ai plus #N/A, mais à la place... bah j'ai le titre du film Or moi ce que je cherchais c'est afficher l'ID qui se trouve sur la feuille Liste films, des films qui se trouvent, par exemple, sur la feuille Action.

Pour que ça fonctionne (enfin), il faut que j'inverse (sur la feuille Liste films) les colonnes ID et Titre et, sur la feuille Action, en colonne A, que je mette la formule suivante :

=RECHERCHEV(B2;'Liste films'!A$2:B$1590;2;FAUX)

Sinon, j'ai testé ton second fichier Excel et par conséquent ta seconde macro et c'est presque ça. J'ai un peu modifié ta macro de façon à ce qu'il m'affiche le nom de la feuille dans laquelle il a trouvé le film, plutôt qu'un X

Du coup, j'ai mis ceci :

Cells(J, 2 + I) = Sheets(I).Name 
'Cells(J, 2 + I) = Cel.Offset(0, 1)
'Cel.Offset(0, 2) = Sheets(I).Name

Bonjour

En principe RECHERCHEV n'est pas utilisé pour retourner ce que l'on cherche

Alors quand tu marques la zone de recherche A$2:C$23768, tu rechercheras toujours dans la 1ère colonne de la zone (ici la colonne A)

Si tu voulais l'ID il fallait utiliser INDEX/EQUIV

Exemple

=INDEX('Liste films'!A$2:A$23768;EQUIV(B2;'Liste films'!B$2:B$23768;0);1)

Fait à main levée alors peut-être des erreurs

Merci Banzai, ta formule Index/Equiv fonctionne très bien.

Pourrais-tu STP me l'expliquer ?

Voici ce que je comprends (dis-moi si j'ai bon) :

=INDEX('Liste films'!A$2:A$23768;

"Recherche, sur la feuille "Liste films", dans le tableau qui va de A2 à A23768..."

EQUIV(B2;'Liste films'!B$2:B$23768;0)

"...la valeur qui est située en B2 [autrement dit le titre du film], dans le tableau de la feuille "Liste films" qui va de B2 à B23768..."

;1)

"...dans la colonne 1 du tableau"

Cependant, j'ai 2 questions :

  • A quoi correspond le 0 de la fin ? Est-ce "la valeur exacte", équivalente à "Faux" quand on fait une recherche V ?
  • Le 1 correspond à la colonne du "tableau", mais lequel ? Celui qui va de A2 à A23768 ou celui qui va de B2 à B23768 ?

Encore Merci.

Bonne journée

Bonjour

Tu as très bien décodé la formule

INDEX(Tableau; Numéro_Ligne; Numéro_Colonne)

Tableau = A$2:A$23768

Numéro_Ligne = EQUIV(B2;'Liste films'!B$2:B$23768;0) : Oui on recherche le numéro de la ligne contenant le titre dans la colonne B et on veut la valeur exacte (le 0 - Equivalent à FAUX dans RECHERCHEV() )

Numéro_Colonne = 1 (celui-ci peut être omis car ce n'est qu'un tableau avec une seule colonne )

Donc tu as compris le 1 c'est le numéro de la colonne du tableau définit avec INDEX()

OK. MERCI POUR TOUT !

Rechercher des sujets similaires à "recherchev conditionnelle feuilles tableaux"