Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1311 connectés 

  FORUM HardWare.fr
  Windows & Software
  Logiciels

  [Excel] nombre de valeurs distinctes dans une liste

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Excel] nombre de valeurs distinctes dans une liste

n°2073672
reivax59
Posté le 24-06-2005 à 17:38:27  profilanswer
 

Est-il possible sous Excel d'avoir une formule donnant le nombre de valeurs d'une liste en prenant en compte les doublons?  
 
Je m'explique : pour la liste 2;1;25;52;1;52;52, je veux que la réponse soit 4
 
merci d'avance au pros de la forule en tout genre :D


---------------
Strava
mood
Publicité
Posté le 24-06-2005 à 17:38:27  profilanswer
 

n°2073674
freds45
Posté le 24-06-2005 à 17:40:07  profilanswer
 

ta "liste", dans une seule cellule ou pas ?


---------------
Filmstory : gardez trace des films que vous avez vu ! :D
n°2073675
reivax59
Posté le 24-06-2005 à 17:41:33  profilanswer
 

non dans une colonne, un nombre par cellule


---------------
Strava
n°2073684
freds45
Posté le 24-06-2005 à 17:52:28  profilanswer
 

mis à part un script en vba, je vois pas :/


---------------
Filmstory : gardez trace des films que vous avez vu ! :D
n°2073795
reivax59
Posté le 24-06-2005 à 20:18:42  profilanswer
 

et ce script ça donnerait... ?
 
 [:nikko] si qqun a une autre idée


---------------
Strava
n°2073809
Papy Octet
Posté le 24-06-2005 à 20:33:33  profilanswer
 

Salut,
 
C'est facile :
1. Tu te positionnes dans la cellule où tu veux qu'apparaisse le nombre de cellules qui contiennet une valeur :sol:  
2. Tu vas dans la ligne de saisie à la droite du symbole Fx : la ligne qui affiche le contenu de la cellule sélectionnée et tu cliques sur le symbole Fx :hello: pour appeler la fenêtre de sélection de fonctions :hello:  
3. Dans la catégorie "Statistiques", tu fais défiler jusqu'à "NBVal".
4. Tu sélectionnes cette fonction puis tu suis les directives : tu défini la zone de cellules à contrôler (A1:A15) ou (A3:C17) ou (A1;A3;A5;C15;D8) :pt1cable:  
 
Et c'est tout. Tu obtiens le nombre de cellules contenant une valeur :bounce:  
 
Et cela, sans VBA :lol: C'est quand mêmme plus pratique, non :jap:  
 
A+

n°2073826
freds45
Posté le 24-06-2005 à 20:58:37  profilanswer
 

Papy Octet a écrit :

Salut,
 
C'est facile :
1. Tu te positionnes dans la cellule où tu veux qu'apparaisse le nombre de cellules qui contiennet une valeur :sol:  
2. Tu vas dans la ligne de saisie à la droite du symbole Fx : la ligne qui affiche le contenu de la cellule sélectionnée et tu cliques sur le symbole Fx :hello: pour appeler la fenêtre de sélection de fonctions :hello:  
3. Dans la catégorie "Statistiques", tu fais défiler jusqu'à "NBVal".
4. Tu sélectionnes cette fonction puis tu suis les directives : tu défini la zone de cellules à contrôler (A1:A15) ou (A3:C17) ou (A1;A3;A5;C15;D8) :pt1cable:  
 
Et c'est tout. Tu obtiens le nombre de cellules contenant une valeur :bounce:  
 
Et cela, sans VBA :lol: C'est quand mêmme plus pratique, non :jap:  
 
A+


 
EN utilisant nbval(), tu montres que t'as rien compris au sujet :lol:
 

Citation :

Je m'explique : pour la liste 2;1;25;52;1;52;52, je veux que la réponse soit 4


2, 1, 25, et 52 :hello:


Message édité par freds45 le 24-06-2005 à 21:04:53

---------------
Filmstory : gardez trace des films que vous avez vu ! :D
n°2073889
Papy Octet
Posté le 24-06-2005 à 22:46:31  profilanswer
 

Calme-toi un peu. :pt1cable:  
Pas besoin d'être si disgracieux ni de mettre rien en gras :kaola:  
C'est toi qui a besoin d'aide :kaola:  :kaola:  
 
Malgré cela, je ne suis pas rencunier et donc voici une proposition de solution en VBA : :jap:  
 

Sub NbValDiff()
'compte le nombre de valeurs différentes dans une zone
'de cellules
Dim Li, Col, Cpt, Buf1, Buf2, I, J, K
Col = 1
Li = 1
Cpt = 0
 
'Il faut trier les cellules par ordre croissant ... ou décroissant
'ça n'a pas d'importance, ce qui compte c'est le tri des valeurs.
'Dans cet exemple, on teste sur 6 cellules.
 
Range("A1:A6" ).Select
    Selection.Sort Key1:=Range("A1" ), Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
    Range("A7" ).Select
     
Do  'Répéter les opérations ci-dessous
    Buf1 = ActiveSheet.Cells(Li, Col).Value 'enregistrer la valeur contenue dans la cellule
    Cpt = Cpt + 1   'incrémenter le compteur
    Do While ActiveSheet.Cells(Li, Col) = Buf1  'Tant qu'on trouve la même valeur que celle enregistrée dans Buf1
        Li = Li + 1 'on passe à la ligne suivante
    Loop    'On boucle tant qu'on a la même valeur que celle dans Buf1
Loop Until Li > 6   'tant que le numéro de ligne n'est pas supérieur à 6
 
ActiveSheet.Cells(7, 1).Value = Cpt 'On affiche le résultat
 
End Sub

 
A+ :hello:

n°2073906
freds45
Posté le 24-06-2005 à 23:27:41  profilanswer
 

Papy Octet a écrit :

Calme-toi un peu. :pt1cable:  
Pas besoin d'être si disgracieux ni de mettre rien en gras :kaola:  
C'est toi qui a besoin d'aide :kaola:  :kaola:  


 
Euh... qui a commencé ;) ?
 
Sinon :jap: pour le vba !


---------------
Filmstory : gardez trace des films que vous avez vu ! :D
n°2074000
reivax59
Posté le 25-06-2005 à 08:32:08  profilanswer
 

Papy Octet a écrit :


 
[...]
 
C'est toi qui a besoin d'aide :kaola:  :kaola:  
 
[...]
 


 
non c'était moi :D  
 
merci à vous deux en tout cas [:al_bundy]


Message édité par reivax59 le 25-06-2005 à 08:32:37

---------------
Strava
mood
Publicité
Posté le 25-06-2005 à 08:32:08  profilanswer
 

n°2074092
Papy Octet
Posté le 25-06-2005 à 11:27:40  profilanswer
 

Ok Reivax59
J'espère que ma proposition répond à ta question.
Si tu utilise une liste d'enregistrements de taille variable, alors il faudra prévoir du code pour déterminer le nombre d'enregistrements à analyser avant de lancer le tri.
 
Tiens-moi au courant si tu es dans le cas.
 
A+

n°2074591
reivax59
Posté le 25-06-2005 à 20:42:31  profilanswer
 

Papy Octet a écrit :

Ok Reivax59
J'espère que ma proposition répond à ta question.
Si tu utilise une liste d'enregistrements de taille variable, alors il faudra prévoir du code pour déterminer le nombre d'enregistrements à analyser avant de lancer le tri.
 
Tiens-moi au courant si tu es dans le cas.
 
A+


 
il est possible que ce soit le cas en effet  :sarcastic:  


---------------
Strava
n°2074827
Papy Octet
Posté le 26-06-2005 à 09:16:05  profilanswer
 

Ok reivax59,
 
On bosse dessus :pt1cable:

n°2075111
Papy Octet
Posté le 26-06-2005 à 17:05:38  profilanswer
 

reivax59 a écrit :

il est possible que ce soit le cas en effet  :sarcastic:


 
Voilà, on arrive :pt1cable:  :pt1cable:  
 
Comme toujours en informatique,
voici une solution à ton problème :sweat:  
 
Pour l'activer une fois que tu l'auras copiée dans VBA,
tu placeras un bouton (Barre d'outils Formulaire) sur ta feuille excel,
Tu relieras ce bouton à la macro qui porte le nom de la procédure ci-dessous,
Quand tu cliques sur ce bouton, tu exécutes la procédure.
 
'********* Copier depuis ici ***********
Sub CptDiffVal()
'Compte le nombre de valeurs différentes contenues dans une colonne.
Dim Li, Col, Buf1, Cpt1, CptLi, CptCol, I, J, K
 
'Si la colonne à analyser ne commence pas à la ligne 3 de la colonne 1,
'changer les valeurs de Li et Col ci-dessous.
'------- !!! ATTENTION !!!
'---   Il ne faut pas de cellule vide dans la ligne n° 3
'---   ni dans la colonne n°1 dans cet exemple
Li = 3  'N° de la ligne où la liste des valeurs à compter commence
Col = 1 'N° de la colonne où la liste des valeurs à compter commence
 
'Initialiser les variables
CptLi = 0
CptCol = 0
Cpt1 = 0
 
'------------------------------------------------------------------------
'---   S'il y a, par exemple une ligne pour le titre des colonnes
'---   et une seconde ligne pour séparer les titres des données, par exemple,
'---   alors les données commencent à la ligne 3 de la colonne 1
CptLi = 0
CptCol = 0
'---   Le raisonnement est le même s'il y a des nomls de lignes dans la 1° colonne
'---   Compter le nombre de lignes à analyser
For I = Li To 65535
    If IsEmpty(ActiveSheet.Cells(I, Col)) = False Then
        CptLi = CptLi + 1
    Else
        Exit For
    End If
Next I
'---   Compter le nombre de colonnes à analyser
For J = Col To 65535
    If IsEmpty(ActiveSheet.Cells(Li, J)) = False Then
        CptCol = CptCol + 1
    Else
        Exit For
    End If
Next J
'-------------------------------------------------------------------------
'Trier l'ensemble des cellules par ordre croissant
'---    'Sélection de la zone à trier par ordre croissant
ActiveSheet.Range(Cells(Li, Col), Cells((Li - 1) + CptLi, (Col - 1) + CptCol)).Select
'---    'Trier la zone de cellules par ordre croissant
Selection.Sort Key1:=ActiveSheet.Cells(Li, Col), Order1:=xlAscending, Header:=xlGuess, _
    OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
    DataOption1:=xlSortNormal
'---    'Se positionner sur une cellule
ActiveSheet.Cells(Li, Col).Select
 
'Compter le nombre de valeurs différentes contenues dans la colonne choisie
Buf1 = ActiveSheet.Cells(Li, Col).Value
Cpt1 = 1
For K = Li To (Li - 1) + CptLi 'Lire chaque cellule de la colonne
    '---   'Si une valeur différente de la précédante dans la cellule visitée
    If ActiveSheet.Cells(K, Col) <> Buf1 Then
        Cpt1 = Cpt1 + 1 'Incrémenter le compteur
        Buf1 = ActiveSheet.Cells(K, Col).Value
    End If
Next K
 
ActiveSheet.Cells(K, Col).Value = Cpt1  'Récupère le nombre de valeurs différentes
 
End Sub
'********* Copier jusqu'ici ***********
 
 :sweat:  :sweat:  
 
Je pense qu'elle est suffisament documentée pour comprendre son déroulement :hello:  
 
Pour celui qui souhaite la voir fonctionner ligne par ligne,
depuis l'éditeur VBA, faire F8, la ligne exécutée est surlignée en jaune.
Vous pouvez aller voir le résultat dans votre feuille Excel après chaque ligne de code exécutée. :jap:  
 
A+ :pt1cable:  

n°2075407
reivax59
Posté le 26-06-2005 à 20:05:18  profilanswer
 

et ben ... chapeau bas. :jap:
 
merci beaucoup...


---------------
Strava
n°2075460
Papy Octet
Posté le 26-06-2005 à 20:42:22  profilanswer
 

It's nothing, my dear.
I was happy to help you !!!

n°3078462
Gapastamic​hmst
Posté le 16-02-2013 à 14:29:32  profilanswer
 

Bonjour,
 
Je me permet de déterrer ce post parce que j’ai eu ce même défi aujourd’hui avec en bonus : « sans macro svp ! »
J’ai finalement trouvé la solution suivante : la somme de l’inverse du nombre d’occurrence...
On calcule le nombre d’occurrence d’une donnée dans la colonne, et on somme son inverse, ce pour chaque cellule de la plage.
 
Si on a la donnée une fois on fait 1/1 = 1
Si on l’a deux fois on fait ½ + ½ = 1
Si on l’a trois fois on fait 1/3 + 1/3 + 1/3 = 1

 
Du coup, pour chaque entrée unique on obtient une somme de 1.
En les sommant toute, on obtient le nombre d’entrées différentes dans la plage.
 
Sous la forme d’une formule matricielle, ça tient en une petite formule (B2 :B8 étant ma plage de données):
=SOMME(1/NB.SI(B2:B8;B2:B8))             (Ctrl+Maj+Enter)
En espérant aider d’autre personnes
 
Cordialement


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Windows & Software
  Logiciels

  [Excel] nombre de valeurs distinctes dans une liste

 

Sujets relatifs
excel pour ti89Trier sous Excel, pour les pros ?
Liste déroulant de la base mysql[resolu] supprimer un windows dans la liste au boot
RAZ liste Netbios/TCP-IP (NetBT) sous Win98Bug de gestion de la molette de la souris avec Excel
liste de viruslancer excel en ligne de commande
excel démarrageActive directory: creer une liste d'utilisat a partir d'un .txt
Plus de sujets relatifs à : [Excel] nombre de valeurs distinctes dans une liste


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR