Monsieur Excel
Pour tout savoir faire sur Excel !

05 février 2017

Trouver la énième occurrence

De nombreux utilisateurs d’Excel connaissent la fonction equiv() et savent qu’elle sert par exemple à trouver la première occurrence d’une valeur ou d’un texte dans un vecteur quand son troisième argument est 0, grâce à la syntaxe : =equiv(valeur;vecteur;0).

Dans le tableau ci-dessous, nous avons tiré en colonne A des valeurs aléatoires de 1 à 10, histoire de pouvoir bien tester le fonctionnement de nos formules. Il suffit donc d’utiliser la touche F9 pour obtenir un nouveau tirage des valeurs de la colonne A.


La formule de D2, visible dans le commentaire associé, sert à calculer la position du premier 7 dans la colonne A.

La formule de D3, reproduite ensuite vers le bas, sert à calculer la position du second 7, du troisième, … et ainsi de suite.

Remarque  Dans le temps (avant Excel 2007), la fonction sierreur() n'existait pas et l'on était alors obligé d'utiliser une formule plus complexe avec un si(), ce qui nous obligeait à écrire deux fois l'expression à analyser !

4 Commentaire(s):

  • Bonjour à tous,
    Après essai de vos formules, je trouve une erreur si l'occurence 2 est en ligne 21, l'occurence 3 est ligne 22.

    Pour palier à ce soucis, je vous propose:
    =SI(NB.SI($A$2:$A$21;$D$1)>=LIGNES($1:1);EQUIV($D$1;A:A;0);"Aucune")
    et
    =SI(NB.SI($A$2:$A$21;$D$1)>=LIGNES($1:2);D2+EQUIV($D$1;DECALER($A$1;D2;0):$A$21;0);"")

    By Blogger Jacky Harlé, sur 6:34 PM  

  • Bonjour Jacky,

    Vous avez peut-être regardé ma copie d'écran un peu trop vite...

    En effet, ma table s'arrêtait en ligne 21 !

    Cordialement. Hervé Thiriez.

    By Blogger Hervé Thiriez, sur 9:49 AM  

  • Jacky Harlé a eu le mérite d'écrire les formules qui fonctionnent sous Excel 2003

    Cordialement vôtre.

    By Anonymous Anonyme, sur 1:24 PM  

  • Bonjour,
    La formule matricielle suivante permet de trouver directement la ligne de la énième occurrence (en E1 dans ce qui suit) :
    =SIERREUR(PETITE.VALEUR(SI($A$1:$A$21=D1;LIGNE($A$1:$A$21));E1);"")
    Cordialement.
    Daniel

    By Blogger Daniel Colardelle, sur 11:35 AM  

Enregistrer un commentaire

<< Accueil