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

[Résolu/Fermé]
Signaler
Messages postés
15
Date d'inscription
vendredi 31 mai 2013
Statut
Membre
Dernière intervention
22 novembre 2016
-
Messages postés
26155
Date d'inscription
lundi 23 juillet 2007
Statut
Contributeur
Dernière intervention
5 septembre 2021
-
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

4 réponses

Messages postés
5589
Date d'inscription
lundi 16 avril 2012
Statut
Contributeur
Dernière intervention
5 septembre 2021
639
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;)

Messages postés
15
Date d'inscription
vendredi 31 mai 2013
Statut
Membre
Dernière intervention
22 novembre 2016

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
Messages postés
26155
Date d'inscription
lundi 23 juillet 2007
Statut
Contributeur
Dernière intervention
5 septembre 2021
6 032
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!
Messages postés
15
Date d'inscription
vendredi 31 mai 2013
Statut
Membre
Dernière intervention
22 novembre 2016

ç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,
Messages postés
26155
Date d'inscription
lundi 23 juillet 2007
Statut
Contributeur
Dernière intervention
5 septembre 2021
6 032
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