Une rechercheV un peu complexe !
olivier
-
Mike-31 Messages postés 18405 Date d'inscription Statut Contributeur Dernière intervention -
Mike-31 Messages postés 18405 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Voilà mon problème. J'utilise une base de données au travail qui me fait perdre trop de temps.
Mon premier onglet correspond à la base et regroupe 4 colonnes :
- A - Code pays
- B - Code produit
- C - Nom Produit
- D - RechercheV
Mes onglets reprennent les codes pays et reprennent le même schéma de colonne.
J'effectue dans ma base une rechercheV répondant à ce format : RECHERCHEV(B2;"Code pays"!B:B;1;FAUX)
Je souhaiterai que le "code pays" s'adapte automatiquement à la ligne et à l'onglet qui correspondent.
Dans un deuxième temps, je fais dans chaque onglet une rechercheV, ou je définis manuellement la plage correspondante :
RECHERCHEV(B2;BASE!"Bx:Bx";1;FAUX)
Je souhaiterai que la plage "Bx:Bx" se détermine en fonction du code pays de l'onglet et de la base.
Pour être plus clair, j'ajoute un fichier exemple sur cjoint. J'espère que vous trouverez une solution. Merci de votre aide.
http://cjoint.com/?EEmpSgtu0DU
Voilà mon problème. J'utilise une base de données au travail qui me fait perdre trop de temps.
Mon premier onglet correspond à la base et regroupe 4 colonnes :
- A - Code pays
- B - Code produit
- C - Nom Produit
- D - RechercheV
Mes onglets reprennent les codes pays et reprennent le même schéma de colonne.
J'effectue dans ma base une rechercheV répondant à ce format : RECHERCHEV(B2;"Code pays"!B:B;1;FAUX)
Je souhaiterai que le "code pays" s'adapte automatiquement à la ligne et à l'onglet qui correspondent.
Dans un deuxième temps, je fais dans chaque onglet une rechercheV, ou je définis manuellement la plage correspondante :
RECHERCHEV(B2;BASE!"Bx:Bx";1;FAUX)
Je souhaiterai que la plage "Bx:Bx" se détermine en fonction du code pays de l'onglet et de la base.
Pour être plus clair, j'ajoute un fichier exemple sur cjoint. J'espère que vous trouverez une solution. Merci de votre aide.
http://cjoint.com/?EEmpSgtu0DU
A voir également:
- Une rechercheV un peu complexe !
- Recherchev ne renvoie pas la bonne valeur ✓ - Forum Excel
- Racine complexe pci express ✓ - Forum Pilotes (drivers)
- Si recherchev ✓ - Forum Excel
- Tableau complexe word - Guide
- Recherchev et rechercheh combiné ✓ - Forum Excel
6 réponses
bonjour,
Si j'ai bien compris, il suffit de nommer feuille Base chaque groupe de pays, exemple B2:B7 nommée ALL, B8:B13 nommée ANG etc ...
la formule devient feuille ALL D3
=RECHERCHEV(B2;ALL;1;0)
pour éviter le message d'erreur #NA complète la formule
=SIERREUR(RECHERCHEV(B2;ALL;1;0);"")
et incrémente vers le bas idem pour les autres onglets
Si j'ai bien compris, il suffit de nommer feuille Base chaque groupe de pays, exemple B2:B7 nommée ALL, B8:B13 nommée ANG etc ...
la formule devient feuille ALL D3
=RECHERCHEV(B2;ALL;1;0)
pour éviter le message d'erreur #NA complète la formule
=SIERREUR(RECHERCHEV(B2;ALL;1;0);"")
et incrémente vers le bas idem pour les autres onglets
Re,
Ok pas très compliqué, mais la je n'ai pas le temps de te décrire la formule maintenant, je t'explique ça dans la soirée
A+
Mike-31
Une période d'échec est un moment rêvé pour semer les graines du savoir.
Ok pas très compliqué, mais la je n'ai pas le temps de te décrire la formule maintenant, je t'explique ça dans la soirée
A+
Mike-31
Une période d'échec est un moment rêvé pour semer les graines du savoir.
Re,
voila, tu vas essayer de faire seul, si tu n'y arrives pas je te retournerais ton fichier. feuille Base, sélectionne toute la colonne K en cliquant sur l'entête K et nomme la, dans mon exemple Lign
en K2 colle cette formule
et incrémente la vers le bas
ensuite feuille ALL en D2 colle cette formule
=RECHERCHEV(B2;INDIRECT("Base!"&"B"&PETITE.VALEUR(Lign;1)&":"&"B"&PETITE.VALEUR(Lign;2));1;0)
et incrémente la vers le bas
en D2 feuille ANG
colle la même formule mais il faudra modifier ,PETITE.VALEUR(Lign;1) par PETITE.VALEUR(Lign;3)
et PETITE.VALEUR(Lign;2) par PETITE.VALEUR(Lign;4)
dans la feuille BLG en D2 modifier PETITE.VALEUR(Lign;5) et modifier PETITE.VALEUR(Lign;6)
etc ... en espérant que l'ordre ALL, ANG, BLG etc ... sont toujours dans cet ordre
explication des formules
=SI(ET(A2=A1;A2=A3);"";LIGNE()) je recherche le changement de valeur colonne A et si la valeur change j'affiche l'index ligne
ensuite en D2 cet la bonne vieille formule RECHERCHEV(B2;la matrice;1;0) mais je vais déterminer les bornes de chaque matrice en recherchant le valeurs croissantes d'index ligne et cette formule va m'afficher la première petite valeur ="B"&PETITE.VALEUR(Lign;1)
cette deuxième la deuxième petite valeur ="B"&PETITE.VALEUR(Lign;2)
soit dans l'exemple B2 et B7 ce qui constitue les bornes de ma première matrice et comme il s'agit d'adresse de cellules constituées il faut l'encadrer d'un INDIRECT
ce qui donne
INDIRECT("Base!"&"B"&PETITE.VALEUR(Lign;1)&":"&"B"&PETITE.VALEUR(Lign;2))
ce qu'Excel traduit
=RECHERCHEV(B2;Base!B2:B7;1;0)
tu as remarqué que lorsque la valeur n'existe pas Excel affiche un message d'erreur #NA pour éviter cela en D2 colle plutôt cette formule qui gèrera ce problème et ton tableau sera plus propre
à toi de jouer
--
A+
Mike-31
Une période d'échec est un moment rêvé pour semer les graines du savoir.
voila, tu vas essayer de faire seul, si tu n'y arrives pas je te retournerais ton fichier. feuille Base, sélectionne toute la colonne K en cliquant sur l'entête K et nomme la, dans mon exemple Lign
en K2 colle cette formule
=SI(ET(A2=A1;A2=A3);"";LIGNE())
et incrémente la vers le bas
ensuite feuille ALL en D2 colle cette formule
=RECHERCHEV(B2;INDIRECT("Base!"&"B"&PETITE.VALEUR(Lign;1)&":"&"B"&PETITE.VALEUR(Lign;2));1;0)
et incrémente la vers le bas
en D2 feuille ANG
colle la même formule mais il faudra modifier ,PETITE.VALEUR(Lign;1) par PETITE.VALEUR(Lign;3)
et PETITE.VALEUR(Lign;2) par PETITE.VALEUR(Lign;4)
dans la feuille BLG en D2 modifier PETITE.VALEUR(Lign;5) et modifier PETITE.VALEUR(Lign;6)
etc ... en espérant que l'ordre ALL, ANG, BLG etc ... sont toujours dans cet ordre
explication des formules
=SI(ET(A2=A1;A2=A3);"";LIGNE()) je recherche le changement de valeur colonne A et si la valeur change j'affiche l'index ligne
ensuite en D2 cet la bonne vieille formule RECHERCHEV(B2;la matrice;1;0) mais je vais déterminer les bornes de chaque matrice en recherchant le valeurs croissantes d'index ligne et cette formule va m'afficher la première petite valeur ="B"&PETITE.VALEUR(Lign;1)
cette deuxième la deuxième petite valeur ="B"&PETITE.VALEUR(Lign;2)
soit dans l'exemple B2 et B7 ce qui constitue les bornes de ma première matrice et comme il s'agit d'adresse de cellules constituées il faut l'encadrer d'un INDIRECT
ce qui donne
INDIRECT("Base!"&"B"&PETITE.VALEUR(Lign;1)&":"&"B"&PETITE.VALEUR(Lign;2))
ce qu'Excel traduit
=RECHERCHEV(B2;Base!B2:B7;1;0)
tu as remarqué que lorsque la valeur n'existe pas Excel affiche un message d'erreur #NA pour éviter cela en D2 colle plutôt cette formule qui gèrera ce problème et ton tableau sera plus propre
=SIERREUR(RECHERCHEV(B2;INDIRECT("Base!"&"B"&PETITE.VALEUR(Lign;1)&":"&"B"&PETITE.VALEUR(Lign;2));1;0);"")
à toi de jouer
--
A+
Mike-31
Une période d'échec est un moment rêvé pour semer les graines du savoir.
Merci beaucoup Mike, ça fonctionne parfaitement pour les onglets et je vais déjà économiser beaucoup de temps. Tu as été très clair. Et ton explication m'a permis de comprendre ta démarche.
Enfin, aurais-tu une solution qui simplifie la première RechercheV (celle de la base) ? Pour que la "table des matrices" s'adaptent automatiquement à l'onglet correspondant.
Cordialement
Enfin, aurais-tu une solution qui simplifie la première RechercheV (celle de la base) ? Pour que la "table des matrices" s'adaptent automatiquement à l'onglet correspondant.
Cordialement
Re,
Dans mes explications j'ai omis de te préciser que la colonne K feuille Base peut être masquée et dans mon exemple j'ai pris la colonne K mais peut être n'importe quelle colonne du moment que tu nommes cette colonne.
Ta dernière demande, feuille Base, tu peux éventuellement insérer plus de lignes que nécessaire dans chaque Cde PAYS et en cellule D2 tu colles cette formule
=RECHERCHEV(B2;INDIRECT("'" & A2 & "'!B:B");1;0)
mais comme mes explications précédentes tu peux avoir un message d'erreur #NA dans le cas de cellule non renseignée ou valeurs erronées je te propose de mettre en D2 cette formule avec gestion d'erreur
et tu l'incrémentes vers le bas
A+
Mike-31
Une période d'échec est un moment rêvé pour semer les graines du savoir.
Dans mes explications j'ai omis de te préciser que la colonne K feuille Base peut être masquée et dans mon exemple j'ai pris la colonne K mais peut être n'importe quelle colonne du moment que tu nommes cette colonne.
Ta dernière demande, feuille Base, tu peux éventuellement insérer plus de lignes que nécessaire dans chaque Cde PAYS et en cellule D2 tu colles cette formule
=RECHERCHEV(B2;INDIRECT("'" & A2 & "'!B:B");1;0)
mais comme mes explications précédentes tu peux avoir un message d'erreur #NA dans le cas de cellule non renseignée ou valeurs erronées je te propose de mettre en D2 cette formule avec gestion d'erreur
=SIERREUR(RECHERCHEV(B2;INDIRECT("'" & A2 & "'!B:B");1;0);"")
et tu l'incrémentes vers le bas
A+
Mike-31
Une période d'échec est un moment rêvé pour semer les graines du savoir.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
J'aurai dû préciser que chaque semaine, j'ai des nouvelles listes avec un nombre d'entrées par pays aléatoires.
(Mes trois premières colonnes proviennent d'une extraction)
Je souhaite que mon "code pays" soit automatiquement celui de la ligne et que ma RechercheV analyse l'onglet correspondant.