XL 2010 Dénombrer dans une liste des valeurs uniques avec 1 critere

chvalet

XLDnaute Junior
Bonjour

Dans le fichier joint
je souhaiterais dénombrer sans doublon dans le tableau récapitulatif de la feuille récap ,
le nombre de dossard (colonne L) présents dans la feuille base avec le critère par année

quelqu'un aurait il une idée ?

je vous remercie

Chvalet
 

Pièces jointes

  • denombrer une liste sans doublon avec critere-v1.xlsm
    10.8 KB · Affichages: 33

Dranreb

XLDnaute Barbatruc
Bonsoir.
En C6, à propager sur 15 lignes :
Code:
=NB.SI(base!$G$4:$G$58;$A6)

Edit: réflexion faite, non, vous voudriez plutôt le nombre de dossards différents pour chaque année ?
Je ne vois guère comment le faire par formule, mais ce serait très facile en VBA avec ma fonction Gigogne.
Peut être avec un TCD aussi, je ne sais pas, je ne les utilise pas du tout, tellement ma fonction Gigogne est puissante, pratique et sans carcan de présentation.

Installez le complément, cochez dans le projet VBA de votre classeur la référence GigIdx et dans le module Feuil1 :
VB:
Option Explicit

Private Sub Worksheet_Activate()
   Dim T(), Année As SsGr, L&
   ReDim T(1 To 24, 1 To 3)
   For Each Année In Gigogne(Feuil2.Rows(4), 7, 12)
      L = L + 1
      T(L, 1) = Année.Id
      T(L, 3) = Année.Count
      Next Année
   Me.[A6:C24].Value = T
   End Sub
 

Pièces jointes

  • GigIdx.xlsm
    86.5 KB · Affichages: 132
Dernière édition:

chvalet

XLDnaute Junior
Bonjour

effectivement la formule =NB.SI(base!$G$4:$G$58;$A6) ne gère pas les doublons

pour l'option explicit je vois où il faut la mettre (vba feuille1)
J'ai unstallé mais je ne vois pas où il faut cocher

pour l'instant il y a un bug dès la 1e ligne du vba



merci
Chvalet
 
Dernière édition:

chvalet

XLDnaute Junior
Rebonjour Dranreb

Je pense que ça fonctionne avec cette formule matricielle
en feuille2
j'ai nommé plage date et plage jofff

=SOMME(SI(FREQUENCE(SI(plagedate=A6;SI(plagejofff<>"";EQUIV(plagejofff;plagejofff;0)));LIGNE(plagejofff)-LIGNE(base!$G$3)+1)>0;1))

merci au forum

Chvalet
 

Dranreb

XLDnaute Barbatruc
Bonjour
J'ai unstallé mais je ne vois pas où il faut cocher
Coté VBA, dans le projet vba de votre classeur, menu Outils, Référence…, liste Références disponibles. Mais comme vous l'avez installé hier, la référence GidIdx n'y figure plus. Alors d'abord coté Excel, menu Développeur, groupe Compléments, commande Compléments Excel, cochez "Fonction Gigogne" pour qu'il soit de nouveau parmi les projets vba momentanéments ouverts.
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Bonjour le fil, le forum

Comme suggéré par Dranreb, une solution avec l'emploi d'un TCD
012TCD.jpg
 

pierrejean

XLDnaute Barbatruc
Bonjour à tous

Une version Vba à tester:

Code:
Sub denombre()
tablo = Sheets("base").Range("G4:L" & Sheets("base").Range("G" & Rows.Count).End(xlUp).Row)
Set dico = CreateObject("Scripting.dictionary")
For n = LBound(tablo, 1) To UBound(tablo, 1)
  x = tablo(n, 1)
  If InStr(dico(x), tablo(n, UBound(tablo, 2))) = 0 Then dico(x) = dico(x) & tablo(n, UBound(tablo, 2)) & ";"
Next
a = dico.keys
b = dico.items
For n = LBound(a) To UBound(a)
   Sheets("recap").Cells(6 + n, 1) = a(n)
   Sheets("recap").Cells(6 + n, 3) = UBound(Split(b(n), ";"))
Next
End Sub
 

pierrejean

XLDnaute Barbatruc
Re
petite modification pour garantir le résultat (si un dossard est inclus dans un autre ex= 12 et 120)

Code:
Sub denombre()
tablo = Sheets("base").Range("G4:L" & Sheets("base").Range("G" & Rows.Count).End(xlUp).Row)
Set dico = CreateObject("Scripting.dictionary")
For n = LBound(tablo, 1) To UBound(tablo, 1)
  x = tablo(n, 1)
  If InStr(dico(x), ";" & tablo(n, UBound(tablo, 2)) & ";") = 0 Then dico(x) = dico(x) & ";" & tablo(n, UBound(tablo, 2)) & ";" & "|"
Next
a = dico.keys
b = dico.items
For n = LBound(a) To UBound(a)
   Sheets("recap").Cells(6 + n, 1) = a(n)
   Sheets("recap").Cells(6 + n, 3) = UBound(Split(b(n), "|"))
Next
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 195
Messages
2 086 082
Membres
103 112
dernier inscrit
cuq-laet