OVH Cloud OVH Cloud

doublon et filtre

4 réponses
Avatar
Sky
Bonjour à tous,

Dans un tableau excel avec un filtre automatique, j'aimerais décomptédu
nombre des éléments filtrés le nombre de doublon
J'ai essayé avec la fonction sous.total mais je n'arrive pas à les
identifier

Merci pour votre aide

4 réponses

Avatar
AV
Dans un tableau excel avec un filtre automatique, j'aimerais décomptédu
nombre des éléments filtrés le nombre de doublon


Autrement dit, tu souhaites connaître le nombre de valeurs uniques dans une
plage filtrée...
La plage est en A2:Axx (A1 est l'étiquette de colonne) et elle est nommée
"plage"
Une matricielle (validation par ctrl + maj +entrée) :

=SOMME(SI(SOUS.TOTAL(3;DECALER(A2;LIGNE(A2:A10)-LIGNE(A2);;1));1*(PRODUITMAT((A2
:A10=TRANSPOSE(A2:A10))*TRANSPOSE(SOUS.TOTAL(3;DECALER(A2;LIGNE(A2:A10)-LIGNE(A2
);;1)))*(LIGNE(A2:A10)>=TRANSPOSE(LIGNE(A2:A10)));LIGNE(A2:A10)^0)=1)))

Il y en en a au moins une autre plus courte mais je laisse l'auteur "sortir du
bois" pour te la proposer !
;-)

Alternative : une fonction perso

Function NbUniK_Filtr(plage As Range)
Dim tablo As New Collection
On Error Resume Next
For Each C In plage
If C.EntireRow.Hidden = False Then
tablo.Add C.Value, CStr(C.Value)
End If
Next C
NbUniK_Filtr = tablo.Count
End Function

AV

Avatar
Franck SCHRICKE
Bonsoir alain

Je suis impressionné par la formule, qui plus est, fonctionne impeccablement

Merci beaucoup, j'avance

@+

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

Dans un tableau excel avec un filtre automatique, j'aimerais décomptédu
nombre des éléments filtrés le nombre de doublon


Autrement dit, tu souhaites connaître le nombre de valeurs uniques dans
une
plage filtrée...
La plage est en A2:Axx (A1 est l'étiquette de colonne) et elle est nommée
"plage"
Une matricielle (validation par ctrl + maj +entrée) :

=SOMME(SI(SOUS.TOTAL(3;DECALER(A2;LIGNE(A2:A10)-LIGNE(A2);;1));1*(PRODUITMAT((A2
:A10=TRANSPOSE(A2:A10))*TRANSPOSE(SOUS.TOTAL(3;DECALER(A2;LIGNE(A2:A10)-LIGNE(A2
);;1)))*(LIGNE(A2:A10)>=TRANSPOSE(LIGNE(A2:A10)));LIGNE(A2:A10)^0)=1)))

Il y en en a au moins une autre plus courte mais je laisse l'auteur
"sortir du
bois" pour te la proposer !
;-)

Alternative : une fonction perso

Function NbUniK_Filtr(plage As Range)
Dim tablo As New Collection
On Error Resume Next
For Each C In plage
If C.EntireRow.Hidden = False Then
tablo.Add C.Value, CStr(C.Value)
End If
Next C
NbUniK_Filtr = tablo.Count
End Function

AV





Avatar
Daniel.M
Bonsoir,


Autrement dit, tu souhaites connaître le nombre de valeurs uniques dans une
plage filtrée...
La plage est en A2:Axx (A1 est l'étiquette de colonne) et elle est nommée
"plage"
Une matricielle (validation par ctrl + maj +entrée) :


=SOMME(SI(SOUS.TOTAL(3;DECALER(A2;LIGNE(A2:A10)-LIGNE(A2);;1));1*(PRODUITMAT((A2


:A10=TRANSPOSE(A2:A10))*TRANSPOSE(SOUS.TOTAL(3;DECALER(A2;LIGNE(A2:A10)-LIGNE(A2

);;1)))*(LIGNE(A2:A10)>=TRANSPOSE(LIGNE(A2:A10)));LIGNE(A2:A10)^0)=1)))

Il y en en a au moins une autre plus courte mais je laisse l'auteur "sortir du
bois" pour te la proposer !
;-)


Donc, une autre matricielle, :-)

=NB(1/FREQUENCE(SI(SOUS.TOTAL(3;DECALER(A2;LIGNE(A2:A10)-LIGNE(A2);;1));
EQUIV(A2:A10;A2:A10;0));LIGNE(INDIRECT("1:"&LIGNES(A2:A10)))))

Salutations,

Daniel M.

Avatar
Sky
Merci daniel

Ca fonctionne aussi bien que av, entre les 2 mon coeur balance :))

@+

"Daniel.M" a écrit dans le message de
news: %
Bonsoir,


Autrement dit, tu souhaites connaître le nombre de valeurs uniques dans
une
plage filtrée...
La plage est en A2:Axx (A1 est l'étiquette de colonne) et elle est nommée
"plage"
Une matricielle (validation par ctrl + maj +entrée) :


=SOMME(SI(SOUS.TOTAL(3;DECALER(A2;LIGNE(A2:A10)-LIGNE(A2);;1));1*(PRODUITMAT((A2


:A10=TRANSPOSE(A2:A10))*TRANSPOSE(SOUS.TOTAL(3;DECALER(A2;LIGNE(A2:A10)-LIGNE(A2

);;1)))*(LIGNE(A2:A10)>=TRANSPOSE(LIGNE(A2:A10)));LIGNE(A2:A10)^0)=1)))

Il y en en a au moins une autre plus courte mais je laisse l'auteur
"sortir du
bois" pour te la proposer !
;-)


Donc, une autre matricielle, :-)

=NB(1/FREQUENCE(SI(SOUS.TOTAL(3;DECALER(A2;LIGNE(A2:A10)-LIGNE(A2);;1));
EQUIV(A2:A10;A2:A10;0));LIGNE(INDIRECT("1:"&LIGNES(A2:A10)))))

Salutations,

Daniel M.