Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Compter le nombre de valeur différentes

zourite

XLDnaute Junior
Bonsoir !

J'ai une liste de nombres, et j'aimerai trouver le nombre de valeurs différentes, exeptées les valeurs vides et les valeurs = 0

Y aurait-il une formule capable de faire cela?

merci d'avance
 

Pièces jointes

  • tessssssst.xls
    23.5 KB · Affichages: 201

ROGER2327

XLDnaute Barbatruc
Re : Compter le nombre de valeur différentes

Bonjour à tous
Une fonction personnalisée :
VB:
Function valdif&(r As Range)
Dim oCell As Range, oColl As Scripting.Dictionary
  Application.Volatile
  Set oColl = CreateObject("Scripting.Dictionary")
  For Each oCell In r.Cells
    If IsNumeric(oCell) Then If oCell.Value <> 0 And Not oColl.Exists(CStr(oCell.Value)) Then oColl.Add CStr(oCell.Value), oCell.Value
  Next
  valdif = oColl.Count
End Function
ROGER2327
#4993


Jeudi 5 Pédale 138 (Saint Ouducul, trouvère, SQ)
9 Ventôse An CCXIX
2011-W08-7T03:29:38Z
 

Tibo

XLDnaute Barbatruc
Re : Compter le nombre de valeur différentes

Bonjour,

Un essai avec une formule matricielle :

Code:
=SOMME(SI(B1:B10<>0;(1/NB.SI(B1:B10;B1:B10))))

Formule matricielle à valider par CTRL + MAJ + ENTREE

@+
 

zourite

XLDnaute Junior
Re : Compter le nombre de valeur différentes

Bonjour david84, BOISGONTIER, Tibo, ROGER2327,hoerwind, kjin !

Merci à tous vos réponses, je suis en phase de test, je garderai la plus rapide des méthodes !!
A priori le code de Roger semble le plus rapide.

Je vous tiendrai au courant quand j'aurai fait mon choix final

encore merci et bonne journée !!
 
Dernière édition:

ROGER2327

XLDnaute Barbatruc
Re : Compter le nombre de valeur différentes

Bonsoir à tous
Une petite modification pour ne pas tenir compte d'éventuels zéros devant les nombres :
VB:
Function valdif2&(r As Range)
Dim oCell As Range, oColl As Scripting.Dictionary
  Application.Volatile
  Set oColl = CreateObject("Scripting.Dictionary")
  For Each oCell In r.Cells
    If IsNumeric(oCell) Then If oCell.Value <> 0 And Not oColl.Exists(CStr(0 + oCell.Value)) Then oColl.Add CStr(0 + oCell.Value), oCell.Value
  Next
  valdif2 = oColl.Count
End Function
Comparaison des différentes solutions dans le classeur joint.​
ROGER2327
#4994


Jeudi 5 Pédale 138 (Saint Ouducul, trouvère, SQ)
9 Ventôse An CCXIX
2011-W08-7T17:38:03Z
 

Pièces jointes

  • Compter le nombre de valeur différentes_158942.xls
    37.5 KB · Affichages: 232

zourite

XLDnaute Junior
Re : Compter le nombre de valeur différentes

ah,

J'utilise une fonction max :

=MAX(SI((L101:L65536>0)*($K$101:$K$65536="Immobilisation");L101:L65536))

J'aimerai à la place du max utiliser le valdif2, mais ca ne marche pas =/
Aurais tu une idée?
 

david84

XLDnaute Barbatruc
Re : Compter le nombre de valeur différentes

Re
suite au fichier de comparaison de Roger :
Code:
=SOMME(N(FREQUENCE(SI(SI(ESTERREUR(SI(C2:C21<>0;SUBSTITUE(C2:C21;".";",")*1));0;SI(C2:C21<>0;SUBSTITUE(C2:C21;".";",")*1));EQUIV(SUBSTITUE(C2:C21;".";",")*1;SUBSTITUE(C2:C21;".";",")*1;0));LIGNE(INDIRECT("1:"&LIGNES(C2:C21))))>0))
Validation matricielle.
A+

Edit : légèrement plus court :
Code:
=SOMME(N(FREQUENCE(SI(SI(ESTERREUR(SI(C2:C21<>0;SUBSTITUE(C2:C21;".";",")*1));0;SI(C2:C21<>0;SUBSTITUE(C2:C21;".";",")*1));EQUIV(SUBSTITUE(C2:C21;".";",")*1;SUBSTITUE(C2:C21;".";",")*1;0));LIGNE(C1:C21))>0))

ou bien avec NB :
Code:
=NB(1/(FREQUENCE(SI(SI(ESTERREUR(SI(C2:C21<>0;SUBSTITUE(C2:C21;".";",")*1));0;SI(C2:C21<>0;SUBSTITUE(C2:C21;".";",")*1));EQUIV(SUBSTITUE(C2:C21;".";",")*1;SUBSTITUE(C2:C21;".";",")*1;0));LIGNE(C1:C21))))
 
Dernière édition:

zourite

XLDnaute Junior
Re : Compter le nombre de valeur différentes

Hey !

Etant toujours entrain d'adapter ces solutions à mon cas, j'ai deux question:


@: ROGER2327 : Est-ce que la fonction =valdif2() fonctionne en matricielle? car je n'arrive pas à la faire marcher... j'ai joint un petit fichier ou j'ai mis mon essaie en bleu mais qui me donne une #VALEUR
Code:
=valdif(SI((B3:B22="Bien")*1;L3:L22))

@: David : Est-ce normal qu'à la fin de tes deux dernières formules il y ai :
LIGNE(C1:C21))))

alors que la plage utilisée pour tout le reste de tes formules est (C2:C21)


merci pour vos conseils !
 

Discussions similaires

Réponses
4
Affichages
250
Réponses
7
Affichages
401
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…