Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Cherche formule pour trouver nombre de valeurs non répetées

13 réponses
Avatar
Emile63
Bonjour et bonne ann=E9e =E0 tous! :-)

J'ai un certain nombre de chiffres dans une colonne et je souhaiterais conn=
a=EEtre, par le biais d'une formule, combien de chiffres son diff=E9rents=
=20
(car il y a beaucoup de r=E9p=E9titions).


Ex:

17.00
55.25
45.56
78.58
92.24
17.00
17.00
55.25
55.25
17.00
78.58
45.56

Nombres diff=E9rents =3D 5

Merci d'avance pour votre aide,
Cordialement,
Emile

10 réponses

1 2
Avatar
MichD
Bonjour,

Plg est le nom de la plage nommée.
Cette formule te donne le nombre de chiffres différents
en supposant que tu n'as pas de cellules vides.

=SOMME(SI(FREQUENCE(EQUIV(Plg;Plg;0);EQUIV(Plg;Plg;0))>0;1))
Avatar
DanielCo
Bonjour,
Formule matricielle (valider avec Ctrl+Maj+Entrée) :
=SOMME(1/NB.SI(A1:A12;A1:A12))
Cordialement.
Daniel
Il se trouve que Emile63 a formulé :
Bonjour et bonne année à tous! :-)

J'ai un certain nombre de chiffres dans une colonne et je souhaiterais
connaître, par le biais d'une formule, combien de chiffres son différents
(car il y a beaucoup de répétitions).


Ex:

17.00
55.25
45.56
78.58
92.24
17.00
17.00
55.25
55.25
17.00
78.58
45.56

Nombres différents = 5

Merci d'avance pour votre aide,
Cordialement,
Emile
Avatar
Emile63
Merci beaucoup, c'est parfait.
Les deux proposition fonctionnent parfaitement.
Cordialement,
Emile
Avatar
Emile63
Bonjour Daniel et Michel, et aux autres également

Je reviens sur ce post, car je souhaiterais modifier ces formules en inté grant:
SOUS.TOTAL(109;.....
Sur les données affichées à l'écran, je fais des filtres, et c'est sur une base filtrés que je souhaiterais compter les valeurs qui ne se r épètent pas, (par formule).

En vous remerciant d'avance pour votre aide, je vous souhaite une bonne jou rnée.
Emile
Avatar
MichD
Bonjour,

Essaie une formule basée sur cet exemple, tu dois adapter
la plage de cellule H2:H70 représentant les données dans
ton application


=SOMME(SI(SOUS.TOTAL(3;DECALER(H2;LIGNE(H2:H70)-LIGNE(H2);;1));
--(PRODUITMAT((H2:H70=TRANSPOSE(H2:H70))*TRANSPOSE(SOUS.TOTAL(3;DECALER(H2;LIGNE(H2:H70)-LIGNE(H2);;1)))*(LIGNE(H2:H70)> TRANSPOSE(LIGNE(H2:H70)));LIGNE(H2:H70)^0)=1)))
Avatar
Emile63
Bonjour MichD,

Je te remercie pour ton aide.
J'ai utilisé ton exemple sur ma configuration, ce qui donnerait ceci:
=SOMME(SI(SOUS.TOTAL(3;DECALER($P$4;LIGNE($P$4:P1048576)-LIGNE($P$4);;1)) ;--(PRODUITMAT(($P$4:P1048576=TRANSPOSE($P$4:P1048576))*TRANSPOSE(SOUS.TO TAL(3;DECALER($P$4;LIGNE($P$4:P1048576)-LIGNE($P$4);;1)))*(LIGNE($P$4:P1048 576)>=TRANSPOSE(LIGNE($P$4:P1048576)));LIGNE($P$4:P1048576)^0)=1)))-1
{Matricielle}
Mais j'ai un problème avec la mémoire....
Excel manque de ressources lors de la tentative de calcul d'une ou plusieur es formules...

Dans ton exemple avec H70 ça fonctionne mais c'est un peu court pour ma b ase de données.
J'ai augmenté la plage à P1048576 pour me couvrir, mais Oupssss.... Plu s de mémoire!
Avatar
MichD
Je crois (de mémoire) que c'est à partir d'Excel 2007 qu'on peut
utiliser des colonnes entières comme paramètres dans une formule
matricielle. Ce n'est pas un secret qu'une formule matricielle gobe
beaucoup de ressources système.

Est-ce que tu es sûr que tu vas vraiment avoir besoin de plus de
1,000,000 de lignes pour ta base de données?

Tu peux utiliser des plages nommées en utilisant la fonction "Decaler()"
si tu n'as pas de cellules vides dans ta colonne. La plage nommée va
croitre au fur et à mesure que ta base s'étire.

Je ne peux pas faire grand-chose contre cela! Tu peux toujours essayer
d'utiliser Microsoft Office 64 bits et tu t'assures que tu as
suffisamment de mémoire vive...

L'autre alternative, c'est par programmation et non par formule!
Avatar
Patrick
Bonjour,

Utiliser un formule sur autant de lignes, c'est pénible pour la machine ...

Je pense que je passerais à un code vba qui fera ça plus vite et sans
soucis de mémoire non ?


Le 29-02-16 15:48, Emile63 a écrit :
Bonjour MichD,

Dans ton exemple avec H70 ça fonctionne mais c'est un peu court pour ma base de données.
J'ai augmenté la plage à P1048576 pour me couvrir, mais Oupssss.... Plus de mémoire!

Avatar
Emile63
Merci MichD et Patrick pour vos propositions.

En effet, je suis sur Excel 2007 - Office 64 est au budget pour l'été ; -)

MichD:
C'est vrai que je n'ai pas besoin de 1'000'000 de lignes, mon fichier pourr ait en contenir 5'000 max. mais j'ai testé la formule avec 700 (contenu a ctuel de ma BdD) et c'est pareil... Pas de mémoire.. :-(
Du coup, je ne suis pas certain que Décaler() puisse me venir en aide, do mmage!
Je te rejoins pour l'alternative en VBA que vous mentionnez avec Patrick.
Mais comment m'y prendre ?
Sachant que je travail sur un [Tableau1] et que je souhaite faire (ré)agi r le code que si je change le filtre de la colonne [Projets], je suppose qu 'il faudrait partir avec: Worksheet_SelectionChange(ByVal Target As Range)
Mais après, heu...
-Un coup de main, serait bienvenu. ;-)

Merci d'avance pour votre sollicitude,
Emile
Avatar
MichD
Regarde le fichier exemple : http://www.cjoint.com/c/FCbvEyVeLVX
1 2