NOUVELLE FONCTION EXCEL "OCCURENCE" POUR DÉTECTER LES DOUBLONS QUAND ON NE PEUT

squirelXl - 11 févr. 2013 à 18:37
BILLOTmi Messages postés 13 Date d'inscription jeudi 27 novembre 2008 Statut Membre Dernière intervention 25 octobre 2018 - 15 févr. 2013 à 11:40
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/54341-nouvelle-fonction-excel-occurence-pour-detecter-les-doublons-quand-on-ne-peut-pas-trier-la-feuille

BILLOTmi Messages postés 13 Date d'inscription jeudi 27 novembre 2008 Statut Membre Dernière intervention 25 octobre 2018
15 févr. 2013 à 11:40
Bonjour,
Je crois que SquirelXL n'a pas bien compris l'énoncé du problème.

Il ne s'agit pas de compter le nombre d'occurrences d'une valeur
(ce que fait la fonction CountIF ou NB.SI en français)
mais de déterminer si dans une liste de valeurs une cellule est la premiere ou la n ème.
Le but étant d'identifier l'original et les doublons sans trier la feuille (condition imposée par le membre utilisateur SNOFNIE).

Avec la solution CountIF on n' identifierait que les valeurs uniques et les valeurs multiples
alors que l'on veut identifier la première occurrence d'une valeur avec 1 et ses doubles avec n

Quand à l'optimisation proposée elle génèrerait un retour "#" erreur à tort.
Si on veut vraiment optimiser il faut faire
' Cellule contenant la valeur demandée
Ctr% = Ctr% + 1
If Ctr% > 1 Then
Occurence = "n"
Exit Function
End If
Mais alors on ne vérifie plus si la cellule recherchée est bien à l'intérieur de la plage.

Donc je ne changerais rien à la solution proposée au probleme de SNOFNIE.
Michel BILLOT
mets >>> mais
quelle horreur
Bonjour,

la macro est un bel exemple didactique mets c'est encore plus facile d'utiliser les fonctions d'XL et surtout plus rapide si on a des millions de cellules.

Donc si on utilise dans la case d8 la fonction =COUNTIF($F$10:$K$18;C8)
on aura dans la case d8 le nombre d'occurences du contenu de la case c8 dans le range absolu f10 k18

Plus drôle si on veut avoir un message si on dépassse 1
on change la formule =IF(COUNTIF($F$10:$K$18;C8)<=1;COUNTIF($F$10:$K$18;C8);" n occurrences ")

mais si on veut être plus performant
on garde la formule =COUNTIF($F$10:$K$18;C8)
et on applique le format suivant [Green][<2]# ##0;"zéro";[Blue]"n occurences";"Zorro est arrivé"
j'ai mis des couleurs, c'est plus joli ;)

pour cela aller dans format cells et puis custom (sorry je n'utilise que la version US)
ici perf maximale car pas de double calcul possible et pas de if, seulement à l'affichage

Sinon, dans la macro pour un peu de perf, juste après la ligne 34 rajouter if Ctr% >1 then exit for

A+

Mon principe: vive les formules