Récupérer chaque occurence d'une liste sans utiliser filtre, ou TCD

benoua

XLDnaute Occasionnel
Bonjour le forum!

J'ai déjà eu ce pb il y'a quelques années, mais pas moyen de remettre la main sur le sujet qui m'avait aidé. Mais je sais que c'est possible.
J'ai d'un coté une table avec une liste de ville avec un montant associé. Les villes peuvent se répéter.
J'ai besoin sur une autre feuille, de récupérer la liste de ces occurences de manière automatique. C'est à dire si je rajoute une ligne sur ma table avec une nouvelle ville, que celle-ci vienne s'ajouter à la suite automatiquement.
Le fichier joint n'est qu'un exemple, mais pour l'utilisation que je veux avoir je peux pas utiliser de filtre ou de TCD.
Je sais que je peux le faire avec une formule matricielle mais j'ai pas utilisé ça depuis des années et même avec les supers explications de microsoft je n'arrive pas à comprendre...
Je préfère éviter d'avoir à utiliser une macro mais si y'a pas le choix...
Merci pour l'aide!
 

Pièces jointes

  • xld.xlsx
    9.5 KB · Affichages: 52
  • xld.xlsx
    9.5 KB · Affichages: 59
  • xld.xlsx
    9.5 KB · Affichages: 55

Dugenou

XLDnaute Barbatruc
Re : Récupérer chaque occurence d'une liste sans utiliser filtre, ou TCD

Bonjour,
voir pj avec une zone nommée et un petit artifice pour l'affichage
Cordialement
 

Pièces jointes

  • benoua liste sans doublons.xlsx
    10.1 KB · Affichages: 116

Guy_L

XLDnaute Occasionnel
Re : Récupérer chaque occurence d'une liste sans utiliser filtre, ou TCD

Bonjour,
Intéressé par le sujet, j'ai analysé le fichier proposé par benoua et j'en ai extrait la formule

=INDEX(listeVille;MIN(SI(NB.SI(G$12:G12;listeVille)=0;LIGNE(INDIRECT("1:"&LIGNES(listeVille)));LIGNES(listeVille))))&""

Puis j'ai essayé de la comprendre en la "décortiquant":

LIGNES(listeVille) compte le nombre de ligne de la liste
INDEX fait référence à la liste de 24 lignes et se sert du reste de la formule comme no_lig (N° de ligne)
MIN cherche le minimum résultat de la formule "SI"
NB.SI compte le nombre de valeurs contenues dans la plage G$12:G12 (avec un incrément) qui répondent au critère listeVille. Là, déjà, je ne comprends pas comment une liste peut être le critère de NB.SI. Pouvez-vous m'expliquer ?
Avec INDIRECT, ça se corse: en effet, cette fonction s'accompagne normalement d'une syntaxe faisant référence à une cellule (par exemple D5), mais ici, la syntaxe est INDIRECT(1:24) [puisqu'il y a 24 lignes] Comment cela focntionne t'il ?
LIGNE détermine le N° de la ligne obtenu à partir de la formule LIGNE(INDIRECT("1:"&LIGNES(listeVille))). Dans le cas où le test "SI" est vrai, ce sera ce N° de ligne qui sera le résultat, sinon, on aura 24. Mais à quoi sert alors le "MIN" ?

Enfin, je ne comprends pas non plus ce que vient faire le &"" en fin de formule.

Une fois la formule écrite, elle est validée par CTRL + MAJ + ENTREE, ce qui lui ajoute { } de part et d'autre. Est-ce que cela signifie que la formule change alors de "statut" ?

Merci d'avance pour vos réponses
 

Dugenou

XLDnaute Barbatruc
Re : Récupérer chaque occurence d'une liste sans utiliser filtre, ou TCD

Bonjour,
le nb.si(plageA;plageB) en matriciel (avec les {} obtenue par la validation ctrl+maj+enter) donne une matrice de comptage des valeurs de la plage 1 dans la plage2. Avec SI ... = 0 on n'appelle que les valeurs non encore présentes (on dédoublonne en fait)
Avec le min on appelle toujours le N° de ligne qui répond au test SI(...=0
le &"" en final permet de masquer les 0
Je ne sais pas si c'est très clair !
 

Discussions similaires

Réponses
31
Affichages
367
Réponses
5
Affichages
165

Statistiques des forums

Discussions
311 720
Messages
2 081 897
Membres
101 833
dernier inscrit
sandra25