Obtenir la position d'un élement dans un tableau à 2 dimensions

Résolu/Fermé
andrean0102 Messages postés 15 Date d'inscription vendredi 31 mai 2013 Statut Membre Dernière intervention 22 novembre 2016 - 21 nov. 2016 à 15:47
Vaucluse Messages postés 26496 Date d'inscription lundi 23 juillet 2007 Statut Contributeur Dernière intervention 1 avril 2022 - 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
A voir également:

4 réponses

PHILOU10120 Messages postés 6368 Date d'inscription lundi 16 avril 2012 Statut Contributeur Dernière intervention 22 avril 2024 796
21 nov. 2016 à 16:12
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;)

0
andrean0102 Messages postés 15 Date d'inscription vendredi 31 mai 2013 Statut Membre Dernière intervention 22 novembre 2016
22 nov. 2016 à 09:16
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
0
Vaucluse Messages postés 26496 Date d'inscription lundi 23 juillet 2007 Statut Contributeur Dernière intervention 1 avril 2022 6 396
Modifié par Vaucluse le 22/11/2016 à 09:56
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!
0
andrean0102 Messages postés 15 Date d'inscription vendredi 31 mai 2013 Statut Membre Dernière intervention 22 novembre 2016
22 nov. 2016 à 10:37
ç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,
0
Vaucluse Messages postés 26496 Date d'inscription lundi 23 juillet 2007 Statut Contributeur Dernière intervention 1 avril 2022 6 396
Modifié par Vaucluse le 22/11/2016 à 11:25
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
0