Menu

Obtenir la position d'un élement dans un tableau à 2 dimensions [Résolu/Fermé]

andrean0102 15 Messages postés vendredi 31 mai 2013Date d'inscription 22 novembre 2016 Dernière intervention - 21 nov. 2016 à 15:47 - Dernière réponse : Vaucluse 21881 Messages postés lundi 23 juillet 2007Date d'inscriptionContributeurStatut 24 avril 2018 Dernière intervention
- 22 nov. 2016 à 11:22
Bonjour à tous,

Je cherche à obtenir via une formule (exit VBA) la position exacte d'un élement qui se trouve dans un tableau à 2 dimensions.

Par exemple, si j'ai ce tableau en A1-C3:

1-2-3
4-5-6
7-8-9

et que je recherche 5 j'aimerais obtenir comme résultat B2.

Je pense que j'aurai ma réponse grâce aux formules matricielles mais je ne les maîtrise pas.

Merci d'avance,

Bàv
Afficher la suite 

5 réponses

PHILOU10120 4964 Messages postés lundi 16 avril 2012Date d'inscription 21 avril 2018 Dernière intervention - 21 nov. 2016 à 16:12
0
Utile
Bonjour Andrean0102

En prenant vos critères

Mettre en E1 le nombre cherché
en E2 cette formule

=ADRESSE(SIERREUR(EQUIV($E$1;$A$1:$A$3;0);0)+SIERREUR(EQUIV($E$1;$B$1:$B$3;0);0)+SIERREUR(EQUIV($E$1;$C$1:$C$3;0);0);SIERREUR(EQUIV($E$1;$A$1:$C$1;0);0)+SIERREUR(EQUIV($E$1;$A$2:$C$2;0);0)+SIERREUR(EQUIV($E$1;$A$3:$C$3;0);0);1;1;)

andrean0102 15 Messages postés vendredi 31 mai 2013Date d'inscription 22 novembre 2016 Dernière intervention - 22 nov. 2016 à 09:16
0
Utile
Merci pour cette réponse. Seulement, que faire si la table compte 100 colonnes/100 lignes? voir plus?

Dans ce cas-ci, il faut tester ligne par ligne puis colonne par colonne, ce qui n'est pas possible dans des bases de données plus importantes.

Merci d'avance,

Bàv
Vaucluse 21881 Messages postés lundi 23 juillet 2007Date d'inscriptionContributeurStatut 24 avril 2018 Dernière intervention - Modifié par Vaucluse le 22/11/2016 à 09:56
0
Utile
Bonjour
(salut Philou)
pour un champ de valeur de B2 à CW100 et sous réserve que la valeur cherchée (nombre ou texte)ne s'y trouve qu''une seule fois
valeur cherchée en CX1
=ADRESSE(SOMMEPROD(($A$1:$CW$100=$CX$1)*(LIGNE($A$1:$A$100)));SOMMEPROD(($A$1:$CW$100=$CX$1)*(COLONNE($A$1:$CW$1))))

notez que le champ de recherche commencent sur la cellule A1 et les champs lignes/colonnes commencent sur la cellule A1
$A$1:$C$100 / $A$1:$A$100 / $A$1:$CW$1
(et pas sur le départ du tableau de valeur qui commence en B2)

si vous ne pouvez pas débuter sur cette cellule A1, il faut rajouter une correction aux résultats de chaque somme prod pour trouver le bon N° de ligne ou colonne

vous pouvez même si besoin inclure le nom de la feuille dans le résultat

=ADRESSE(SOMMEPROD(($A$1:$CW$100=$CX$1)*(LIGNE($A$1:$A$100)));SOMMEPROD(($A$1:$CW$100=$CX$1)*(COLONNE($A$1:$CW$1)));;;"nom feuille")

crdlmnt

La qualité de la réponse dépend surtout de la clarté de la question, merci!
andrean0102 15 Messages postés vendredi 31 mai 2013Date d'inscription 22 novembre 2016 Dernière intervention - 22 nov. 2016 à 10:37
0
Utile
1
ça fonctionne super, merci beaucoup.

Par hasard, avez-vous le temps d'expliquer en détails la formule?

Je ne parviens pas à comprendre le principe du SOMMEPROD(($A$1:$CW$100=$CX$1)*(LIGNE($A$1:$A$100)) pour identifier la ligne

et le SOMMEPROD(($A$1:$CW$100=$CX$1)*(COLONNE($A$1:$CW$1)) pour identifier la colonne.

Merci d'avance,
Vaucluse 21881 Messages postés lundi 23 juillet 2007Date d'inscriptionContributeurStatut 24 avril 2018 Dernière intervention - 22 nov. 2016 à 11:22
Re

SOMMEPROD va chercher dans le tableau la valeur A1:CW100 la valeur inscrite en CX1

c'est la fonction du premier item ($A$1:$CW$100=$CX$1)

et va donc affecter 1 à ce qu'elle trouve, pour le multiplier avec le second item qui, lui correspond aux N° de lignes ou de colonnes dans la feuille de ligne 1 à Ligne 100 donc 1à 100 et de colonne A à CW

le résdultat est donc 1*par le N° de ligne ou de colonne où se trouve la valeur
le code ADRESSE remonte l'ensemble
bien entendu, cette solution suppose que vous n'avez pas deux fois la même valeur, sinon la fonction multiplie le nombre de fois où se trouve la valeur par le cumul des lignes trouvées!!

crdlmnt