[Excel] Plage de données var dans un "EQUIV"

Fermé
JeanPierreK - 3 nov. 2010 à 17:38
 JeanPierreK - 8 nov. 2010 à 10:57
Bonjour à tous,
je suis confronté à un petit souci sur Excel que je vais tenter de vous exposer :

Contenu de la cellule A1 : France
Contenu de la cellule A2 : Suisse
Contenu de la cellule A3 : Belgique
Contenu de la cellule B1 : BA:BA
Contenu de la cellule B2 : BB:BB
Contenu de la cellule B3 : BC:BC

J'ai donc ici, un tableau de 2C et 3L qui associe une colonne à chaque Pays.

En cellule D1 j'ai le nom de l'un des 3 pays et
En cellule D2 j'ai la formule : =RECHERCHEV(D1;A1:B3;2;FAUX)

De cette façon ma formule recherche vertical recherche dans le tableau (A1:B3) le nom du pays rentré en case D1 et me restitue la plage de données qui lui ai associé.
Je rentre par exemple France en D1 et j'ai BA:BA en D2.

Jusqu'ici tout va bien :)

Par la suite je veux faire appel à cette plage de données dans la fonction EQUIV :

[...]EQUIV("VilleA";BA:BA;0)

Jusqu'ici tout va bien !! :)

Mais le hic, c'est quand je veux remplacer le BA:BA de ma formule EQUIV par le contenu de la cellule D2. Je n'arrive pas à faire lire à excel le contenu car il considère que que mon nouveau tableau de recherche correspond à la cellule D2 (ce qui est normal aprés tout).

Y a t'il un moyen de lire le contenu d'une cellule dans une formule pour pouvoir utiliser la formule suivante :

[...]EQUIV("VilleA";FORMULEX(D2);0)

Merci d'avance
A voir également:

3 réponses

Vaucluse Messages postés 26496 Date d'inscription lundi 23 juillet 2007 Statut Contributeur Dernière intervention 1 avril 2022 6 419
4 nov. 2010 à 13:30
Re
Essayez ce modèle pour voir d'une part si tout fonctionne et d'autre part s'il est moins lourd et revenez si non ou si besoin d'info complémentaire.
Le modèle utilise une ligne de codage (Ligne 1 au dessus du tableau de réf)
et une cellule de renvoi en Z1
http://www.cijoint.fr/cjlink.php?file=cj201011/cijs0awPoI.xls
à vous lire
crdlmt

1
J'ai compris le fonctionnement de vos formule, j'ai cependant plusieurs questions :
Comment nommer les plages de données de la même façon que vous le faite ? (Insertion => Nom => Définir ????)
Pour la création des Listes 1 , 2 et 3 est t'il possible de prendre, par exemple, 2000 lignes alors que seulement les 1300 premières ne sont pas vide ou cela va t'il posé problème pour la recherche d ela valeur MAX de la liste ?
J'adapterai votre formule à ma maquette des que je saurais comment inserer les plages de données "proprement" :)
Merci pour votre aide.
0
Vaucluse Messages postés 26496 Date d'inscription lundi 23 juillet 2007 Statut Contributeur Dernière intervention 1 avril 2022 6 419
4 nov. 2010 à 15:08
RE

Je ne comprend pas tout

Si vous parlez de LIST1,LIST2,LIST3
La création des liste 1,2,3 est indépendantes de la hauteur des tableaux. Elles vont actuellement jusqu'à 100, il suffit de modifier les limites de champ dans les noms.Les cellules vides ne sont pas concernées, on peut le faire, mais ça ne semble pas utile pour l'instant avec les formules du modèle.
Si vous parlez du tableau d'édition et du nombre de code en colonne B, (1300 modèles?)il suffira de rajouter dans les formules sur les trois listes (C,D,E):
=SI(ESTVIDE(B5;"";formule actuelle complète)


Le code MAX n'est utilisé que sur la première ligne pour reporter en Z1 le nom de la liste concernée, il n'est pas lié au nombre de lignes dans les listes. La formule qui définit la valeur des codes ne travaille que sur les lignes 2,3,4

Nommez un champ:
Sélectionnez le et effectivement:
Insertion / Nom /Définir et entrez le nom en haut de la fenêtre
vous pouvez retouchez les limites du champ en bas de la fenêtre si besoin, attention de bien bloquer les limites
Ces champs nommés peuvent être délimités par des formules qui justement, limitent le champ aux nombres de lignes pleines.

N'hésitez pas si d'autres besoins

Crdlmnt
0
Merci beaucoup, j'ai commencé à adapter votre système à une copie de ma maquette.
Je viens d'obtenir le bon résultat pour la première valeur recherchée, je peux donc commencer à étendre la formule sur tout le classeur.
Une fois que j'aurai effectué cette opération je viendrai vous tenir informé du changement en terme de rapidité effective de calcul.
Merci encore pour votre aide.
PS : sur le fichier en pièce jointe je parle de modele 1 2 3 etc, l'équivalent dans ma maquette serait de 59K modele.
Concernant l'analogie avec les pays, j'en ai le même nombre (3) , j'ai 4 "type de téléviseur" (au lieu de 2 dans le fichier exemple : plat et cathodique), et j'ai 3 "marque de téléviseur" (comment dans le fichier exemple).
La seule grosse différence concerne donc le nombre de "modele".
Bref bref, ça fait un grand PS tout ça, je vais tester et vous fait un retour dès que possible (ce soir ou demain matin)
0
Aprés test, votre solution me fait gagner environ 30% de temps de calcul (~10sec ==> 7sec) ce qui est loin d'être négligeable. Je vous remercie pour votre aide
0
Vaucluse Messages postés 26496 Date d'inscription lundi 23 juillet 2007 Statut Contributeur Dernière intervention 1 avril 2022 6 419
3 nov. 2010 à 17:40
Bonjour
Essayez de remplacer votre BA:BA
par: INDIRECT(D2) qui transformera le texte en adresse.
Crdlmnt
0
Vaucluse Messages postés 26496 Date d'inscription lundi 23 juillet 2007 Statut Contributeur Dernière intervention 1 avril 2022 6 419
3 nov. 2010 à 17:42
suite du message précédent
Vous pouvez même écrire directement:
=EQUIV("villeA";INDIRECT(RECHERCHEV(D1;A1:B3;2;0)) ;0)sans passer par D2
0
Merci pour votre réponse extrêmement rapide !
J'ai cependant déjà essayé d'introduire mon rechercheV dans mon equiv mais j'ai une erreur #valeur.
Cependant j'ai pu contourner mon problème avec un si(D1=France;BA:BA;si(D1=suisse;BB:BB;BC:BC)) dans la formule.

Mais je dois appliquer cette formule sur environ 300 cellules de 7 onglets différents. Actuellement j'utilise un recherchev. je trouve bien le résultat escompté mais le calcul (F9 ou calculate en vba) est assez long (environ 10 sec ...) et je cherche à le réduire. J'ai pu constater que dans plusieurs reporting existants la ou je travaille , les gens avaient utilisé un Indirect(adresse(equiv[...]))) à la place de mon recherchev([...]). Et je me suis dit que peut-être le temps de calcul pour le recherchev etait réputé pour être long.

Alors pour revenir à mes moutons, si je test un Indirect(Adresse(Equiv([...]))) en incorporant 2 tests de comparaisons (SI) je me dis que je ne vais pas forcément voir de différence en terme de rapidité de calcul.

Qu'en pensez vous ?

PS : si je ne suis pas assez clair n'hésitez pas à me demander de reformuler ma problèmatique.
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
4 nov. 2010 à 10:41
Bonjour Jean Pierre, Vaucluse

Tu parles de 300 cellules de 7 onglets...

ces 300 cellules sont elles toutes différentes et dans colonnes renvoient elles ?
par exemple: vatican, feuille 6: colonne AA:AA ? en supposant que la colonne AA soit dans la m^me feuille que Vatican...
et quel est le but de la formule EQUIV, la ligne bien sûr mais pourquoi faire?

Au besoin, mettre un extrait (quelques lignes et feuilles) du classeur sans données confidentielles en pièce jointe (format XL97-2003) sur
http://cijoint.fr/
et coller le lien proposé dans le message de réponse
0
Michel, merci pour votre temps.
Ci joint un fichier fonctionnant exactement de la même façon que mon reporting :
http://www.cijoint.fr/cjlink.php?file=cj201011/cijaMcQ6AT.xls
(je n'ai pas cliqué rendre public le fichier, j'espère que cela ne posera pas de problème)
Je n'ai fait qu'un seul onglet car mes 7 onglets fonctionnent exactement de la même façon (disons que sur l'onglet N°2 nous avons des chaines hifi et des balladeurs MP3 à la place de TV, etc ...et chaque onglet possède le même nombre de colonnes).

Dans mon fichier, l'utilisateurs choisi un pays et un type de TV dans les listbox en B1 et B2 et (aprés F9) les prix s'affichent dans le tableau.

Le tableau dans mon exemple fonctionne bien mais je cherche donc à utiliser une formule constitué de Indirect(Equiv(Adress([...]))) pour (je l'espère) gagner du temps dans le recalcul des données et permettre ainsi une utilisation plus fluide du reporting pour mes différents utilisateurs.

"et quel est le but de la formule EQUIV, la ligne bien sûr mais pourquoi faire? "
Le but est de trouver le N° de ligne à utiliser dans la formule adresse([Ligne];[colonne];;[Feuille]). Pour essayer de faire simple, dans mon exemple je cherche (par exemple) Modele 1 dans la colonne AA OU dans la colonne AH OU dans la colonne AO et je veux donc connaitre le n° de ligne pour l'introduire dans la formule Adresse().

Avez vous besoin d'autre(s) précision(s) qui pourrait vous aider à ... m'aider ? :)
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
4 nov. 2010 à 12:17
Bien reçu, merci

Pas trop le temps cet après-midi mais je pencherais plutôt vers un tableau style AA2:AG8 pour la France que pour une colonne mais...
Par contre, je ne comprends pas pourquoi le calcul est si long... car on pourrait peut-être passer pour des matricielles;
il faudrait peut-être aussi que les tableaux aient la m^me hauteur

Je laisse la main à l'ami Vaucluse
Prut-^tre à ce soir ou demain si rien n'a été trouver...
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
4 nov. 2010 à 12:52
Re,

Vite fait avant d'aller manger avec une matricielle sans tableaux intermédiaires. il faut aligner tous les modèles quelque soit le pays
mais cela ne résoud pas le problème de temps et les matricielles sont toujours lentes..

http://www.cijoint.fr/cjlink.php?file=cj201011/cijJd07NFT.xls
testé sur la France
0
je ne connais pas les matricielles, je teste sur votre fichier et je vous fais un retour aprés manger
0