OVH Cloud OVH Cloud

Compter les valeurs uniques

23 réponses
Avatar
Michir
Bonjour à tous,
Merci à Jacqouille pour sa réponse sur compter les doublons
La formule matricielle qu'il me conseille
=SOMME(N(FREQUENCE(C4:C51;C4:C51)>0))
fonctionne parfaitement, sauf quand j'ai une valeur texte
Je m'explique, j'ai une colonne avec une série de numéros de commandes
4364,4365,4365,43666-7, 4366-7
La formule devrait me compter 3 alors qu'elle me compte 2
Elle ignore les valeurs textes parcequ'il y a un tiret
Comment faire pour compter les valeurs uniques qui prenne en compte les
valeurs texte ?
Merci

10 réponses

1 2 3
Avatar
AV
Ave,

Une "synthèse" :
http://cjoint.com/?itjHbgEgVk

AV
Avatar
Jacky
Re...
Merci de ta réponse.
Mais, dans aucun des cas (dans ton exemple) le résultat est unique.
C'est un résultat sans doublon, non ??
Sans tenir compte des vides.
Seules cellules A2, A5, A7, A9 sont vraiment uniques.
A3 et A4 sont doubles.

Je crois que cela est dû à l'interprétation de "Valeur Unique"
Pour moi, le résultat devrait être 4

Bon, cela ne nous empêchera de dormir.*
JJ

"AV" a écrit dans le message de
news:
Ave,

Une "synthèse" :
http://cjoint.com/?itjHbgEgVk

AV




Avatar
AV
Je crois que cela est dû à l'interprétation de "Valeur Unique"


C'est clair que tout est dans l'interprétation mais......
Par "convention" (et tradition ?), ce qu'on appelle les "valeurs uniques" sont
celles qui correspondent à une extraction sans doublon et non celles qui ne sont
représentées qu'une seule fois ("valeurs solitaires" (Modeste abstiens toi !))
pour lesquelles, par contre, la formule
=SOMMEPROD((NB.SI(plage;plage)=1)*1)
conviendra tout à fait et renverra effectivement 4

AV

Avatar
Jacky
"valeurs solitaires"
Celle-là, on ne me l'avait pas encore faite ;o))
Quant à Modeste, il ne peut plus répondre, il a les doigts bandés.

JJ
Avatar
Jacky
Re..
Comme il n'y a pas beaucoup d'affluence et si tu en as envie.
Je souhaiterais que tu m'expliques une de tes (nombreuses) formule que je
n'arrive pas a comprendre entièrement (pour ne pas dire plus) soit:

=MIN(SI((JOUR($A$1+LIGNE(INDIRECT("14:1000")))<29)*(JOURSEM($A$1+LIGNE(INDIR
ECT("14:1000"));2)<6)*(ESTNA((EQUIV($A$1+LIGNE(INDIRECT("14:1000"));JrF;0)))
);$A$1+LIGNE(INDIRECT("14:1000"))))

JJ
Avatar
Jacquouille
Bonsoir Président
Poétiquement parlant, la première cel vide ne devrait-elle pas être
considérée comme unique et les suivantes comme doux blonds? -)
PS Il ne faudra pas oublier de relancer les cotisations pour la SPA.

--
Bien amicalmement,
Vivement conseillés:
http://www.excelabo.net
http://jacxl.free.fr/mpfe/trombino.html
http://dj.joss.free.fr/netiquet.htm
http://frederic.sigonneau.free.fr/

Jacquouille.

"AV" a écrit dans le message de news:

Nombre de valeurs uniques :

Si pas de vides et pas d'erreur
=SOMME(1/NB.SI(Plage;Plage))

Alpha et num mélangés avec vides (sans erreurs)
=SOMME(SI(NBCAR(Plage);1/NB.SI(Plage;Plage)))

Vides ou pas , texte ou pas, erreur ou pas (exclues)
=SOMME(SI(ESTVIDE(Plage);"";1/NB.SI(Plage;Plage)-ESTERREUR(Plage)))

Ces formules sont matricielles (validation par ctrl+maj+entrée)
AV




Avatar
AV
"....tu m'expliques ..."

C'est bien parceque c'est toi...;-)

=MIN(SI((JOUR($A$1+LIGNE(INDIRECT("14:1000")))<29)*(JOURSEM($A$1+LIGNE(INDIRECT("14:1000"));2)<6)*(ESTNA((EQUIV($A$1+LIGNE(INDIRECT("14:1000"));JrF;0))));$A$1+LIGNE(INDIRECT("14:1000"))))


La formule n'ayant de sens que par rapport à la question initiale, rappel de
celle-ci (fil du 18/08/2006 14:13) :
"Trouver le 14ième jour (Xième) après une date D (A1 = 15/06/2006)"
"Si le Xième jour après D tombe un samedi ou un dimanche, ou un jour au-delà du
28° du mois ou un jour férié (plage de référence pour les jours fériés), ajouter
1 et cela autant de fois que nécessaire."

L 'idée est donc de créer une série de jours au-delà du Xième demandé et de
retenir le 1° qui répond aux exigences
Tout d'abord, pour des commodités de tests, remplacer 1000 par 100 dans la
formule
Dans la formule, le "noud de la chose" est la partie
$A$1+LIGNE(INDIRECT("14:100"))
C 'est ce qui permet de créer une matrice des jours qui vont de A1 + 14 à A1 +
100
Ca donne : {38897;38898;38899;38900;38901;38902;..;38983}
Pour visualiser ce résultat intermédiaire, sélectionner dans la barre de formule
$A$1+LIGNE(INDIRECT("14:100")) et faire F9

Au travers de 3 tests logiques, on va chercher quel est la 1° date (le MIN) de
cette série qui respecte, simultanément (fonction ET), les 3 conditions
indiquées
Rappel : Dans une formule matricielle, on remplace la fonction ET par
l'opérateur *

1° test : le jour ne doit pas être > au 28° du mois
(JOUR($A$1+LIGNE(INDIRECT("14:100")))<29)
Résultat intermédiaire (visualiser par sélection et F9) :
{FAUX;FAUX;VRAI;VRAI;VRAI;VRAI;...;VRAI}

2° test : le jour ne doit pas être samedi ou dimanche
(JOURSEM($A$1+LIGNE(INDIRECT("14:100"));2)<6)
Résultat intermédiaire (visualiser par sélection et F9) :
{VRAI;VRAI;FAUX;FAUX;VRAI;VRAI;...;FAUX}

3° test : le jour ne doit pas être un jour férié
(ESTNA((EQUIV($A$1+LIGNE(INDIRECT("14:100"));JrF; 0))))
Résultat intermédiaire (visualiser par sélection et F9) :
{VRAI;VRAI;VRAI;VRAI;FAUX;VRAI;...;VRAI}

Résultat intermédiaire des 3 tests simultanés (visualiser par sélection et F9)
:
{FAUX;FAUX;VRAI;VRAI;VRAI;VRAI;...;VRAI} *
{VRAI;VRAI;FAUX;FAUX;VRAI;VRAI;...;FAUX} *
{VRAI;VRAI;VRAI;VRAI;FAUX;VRAI;...;VRAI
Dans la formule matricielle, chaque élément de chacune des matrices étant
multiplié par les 2 autres, le résultat renvoyé par XL est : {0;0;0;0;0;1;..;0}
On voit là, que le 6° jour après la date D + 14 est le 1° qui répond aux 3
conditions simultanées

La fonction SI renverra le "bon" jour en fonction de ces tests logiques :
SI(Tests Logiques = 1 ; Dates)
Résultat intermédiaire de la fonction SI :
SI({0;0;0;0;0;1;..;0};{38897;38898;38899;38900;38901;38902;..;38983})
donne : ({FAUX;FAUX;FAUX;FAUX;FAUX;38902;...;FAUX}

La fonction MIN permet, ensuite, de ne retenir que la 1° valeur numérique de la
matrice résultats
= MIN({FAUX;FAUX;FAUX;FAUX;FAUX;38902;...;FAUX})

Résultat : 38902
N° de série qui correspond au mardi 04/07/06 (le 03/07/06 est défini comme
férié)

http://cjoint.com/?iuibkl1kXq

AV
Avatar
AV
Poétiquement parlant, la première cel vide ne devrait-elle pas être considérée
comme unique et les suivantes comme doux blonds? -)


C'est comme on veut :
http://cjoint.com/?itjHbgEgVk

PS Il ne faudra pas oublier de relancer les cotisations pour la SPA.


Hum... il en reste si peu qui savent encore ce que c'est ...
Et puis comme je suis parti avec la caisse, je ne souhaiterais pas que...

AV

Avatar
jps
quelle tête de noud je fais, moi! j'aurais quand même dû comprendre tout
ça....
jps (qui n'a plus le cour à l'oeuvrage)

"AV" a écrit dans le message de news:

"....tu m'expliques ..."

C'est bien parceque c'est toi...;-)

=MIN(SI((JOUR($A$1+LIGNE(INDIRECT("14:1000")))<29)*(JOURSEM($A$1+LIGNE(INDIRECT("14:1000"));2)<6)*(ESTNA((EQUIV($A$1+LIGNE(INDIRECT("14:1000"));JrF;0))));$A$1+LIGNE(INDIRECT("14:1000"))))


La formule n'ayant de sens que par rapport à la question initiale, rappel
de celle-ci (fil du 18/08/2006 14:13) :
"Trouver le 14ième jour (Xième) après une date D (A1 = 15/06/2006)"
"Si le Xième jour après D tombe un samedi ou un dimanche, ou un jour
au-delà du 28° du mois ou un jour férié (plage de référence pour les jours
fériés), ajouter 1 et cela autant de fois que nécessaire."

L 'idée est donc de créer une série de jours au-delà du Xième demandé et
de retenir le 1° qui répond aux exigences
Tout d'abord, pour des commodités de tests, remplacer 1000 par 100 dans la
formule
Dans la formule, le "noud de la chose" est la partie
$A$1+LIGNE(INDIRECT("14:100"))
C 'est ce qui permet de créer une matrice des jours qui vont de A1 + 14 à
A1 + 100
Ca donne : {38897;38898;38899;38900;38901;38902;..;38983}
Pour visualiser ce résultat intermédiaire, sélectionner dans la barre de
formule $A$1+LIGNE(INDIRECT("14:100")) et faire F9

Au travers de 3 tests logiques, on va chercher quel est la 1° date (le
MIN) de cette série qui respecte, simultanément (fonction ET), les 3
conditions indiquées
Rappel : Dans une formule matricielle, on remplace la fonction ET par
l'opérateur *

1° test : le jour ne doit pas être > au 28° du mois
(JOUR($A$1+LIGNE(INDIRECT("14:100")))<29)
Résultat intermédiaire (visualiser par sélection et F9) :
{FAUX;FAUX;VRAI;VRAI;VRAI;VRAI;...;VRAI}

2° test : le jour ne doit pas être samedi ou dimanche
(JOURSEM($A$1+LIGNE(INDIRECT("14:100"));2)<6)
Résultat intermédiaire (visualiser par sélection et F9) :
{VRAI;VRAI;FAUX;FAUX;VRAI;VRAI;...;FAUX}

3° test : le jour ne doit pas être un jour férié
(ESTNA((EQUIV($A$1+LIGNE(INDIRECT("14:100"));JrF; 0))))
Résultat intermédiaire (visualiser par sélection et F9) :
{VRAI;VRAI;VRAI;VRAI;FAUX;VRAI;...;VRAI}

Résultat intermédiaire des 3 tests simultanés (visualiser par sélection et
F9) :
{FAUX;FAUX;VRAI;VRAI;VRAI;VRAI;...;VRAI} *
{VRAI;VRAI;FAUX;FAUX;VRAI;VRAI;...;FAUX} *
{VRAI;VRAI;VRAI;VRAI;FAUX;VRAI;...;VRAI
Dans la formule matricielle, chaque élément de chacune des matrices étant
multiplié par les 2 autres, le résultat renvoyé par XL est :
{0;0;0;0;0;1;..;0}
On voit là, que le 6° jour après la date D + 14 est le 1° qui répond aux 3
conditions simultanées

La fonction SI renverra le "bon" jour en fonction de ces tests logiques :
SI(Tests Logiques = 1 ; Dates)
Résultat intermédiaire de la fonction SI :
SI({0;0;0;0;0;1;..;0};{38897;38898;38899;38900;38901;38902;..;38983})
donne : ({FAUX;FAUX;FAUX;FAUX;FAUX;38902;...;FAUX}

La fonction MIN permet, ensuite, de ne retenir que la 1° valeur numérique
de la matrice résultats
= MIN({FAUX;FAUX;FAUX;FAUX;FAUX;38902;...;FAUX})

Résultat : 38902
N° de série qui correspond au mardi 04/07/06 (le 03/07/06 est défini comme
férié)

http://cjoint.com/?iuibkl1kXq

AV



Avatar
J
quelle tête de noud je fais, moi! j'aurais quand même dû comprendre tout
ça....
jps (qui n'a plus le cour à l'oeuvrage)


C'était quand même évident :
C'est pourquoi votre fille est muette ! Mot lierre.
J Ouh là là (un peu taquin)

1 2 3