Microsoft 365 Nombre de valeurs différentes en fonction de plusieurs critères

Bobo la fouine

XLDnaute Nouveau
Bonjour tout le monde,

Je vais essayer de vous poser mon problème. J'ai un fichier excel, composé comme suit :
- Colonne A : Libellé
- Colonne B : Ordre de Fabrication (OF)
- Colonne C : Année
- Colonne D : Test
Les autres colonnes ne sont pas importantes ici. Je vous joint un extrait de mon fichier pour essayer de mieux comprendre.

Je peux avoir entre 4 et 12 tests par OF, et plusieurs OF par libellé.

Mon problème est le suivant : je souhaiterais connaître le nombre d'OF par libellé par année.
Les formules que j'ai essayé jusque là ne sont pas satisfaisantes. Si j'ai 3 OF pour un libellé mais que chaque OF est répété 4 fois, le résultat qui me sera donné sera de 12 (et non 3 comme je le souhaiterais).

Y a t-il quelqu'un qui pourrait m'aider à résoudre ce problème svp ?

Merci d'avance
 

Pièces jointes

  • Extrait.xlsx
    23.1 KB · Affichages: 14

job75

XLDnaute Barbatruc
Bonjour Bobo la fouine, JHA,

Voyez le fichier joint et cette macro dans le code de la feuille :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [A:C,G1]) Is Nothing Then Exit Sub
Dim an%, tablo, resu(), d1 As Object, d2 As Object, i&, x$, n&, y$
an = [G1]
tablo = [A1].CurrentRegion.Resize(, 3) 'matrice, plus rapide
ReDim resu(1 To UBound(tablo), 1 To 2)
Set d1 = CreateObject("Scripting.Dictionary")
Set d2 = CreateObject("Scripting.Dictionary")
d1.CompareMode = vbTextCompare 'la casse est ignorée
d2.CompareMode = vbTextCompare 'la casse est ignorée
For i = 2 To UBound(tablo)
    If tablo(i, 3) = an Then
        x = tablo(i, 1)
        If Not d1.exists(x) Then
            n = n + 1
            d1(x) = n 'mémorise la ligne
            resu(n, 1) = x
        End If
        y = x & Chr(1) & tablo(i, 2)
        If Not d2.exists(y) Then
            d2(y) = ""
            resu(d1(x), 2) = resu(d1(x), 2) + 1
        End If
    End If
Next
'---restitution---
If FilterMode Then ShowAllData 'si la feuille est filtrée
With [I2] 'cellule à adapter
    If n Then .Resize(n, 2) = resu
    .Offset(n).Resize(Rows.Count - n - .Row + 1, 2).ClearContents 'RAZ en dessous
End With
End Sub
La macro s'exécute quand on modifie les colonnes A:C ou l'année en G1.

Elle est rapide car elle utilise 2 Dictionary et des tableaux VBA.

A+
 

Pièces jointes

  • Extrait(1).xlsm
    38.5 KB · Affichages: 6
Dernière édition:

Bobo la fouine

XLDnaute Nouveau
Bonjour JHA, bonjour Job75,

JHA : le tcd que tu as fait ne correspond pas à ce que je recherche. Pour un libellé, je peux avoir plusieurs OF. Pour un OF, j'ai plusieurs tests. Mon souhait est de trouver le nombre d'OF par libellé. Les OF sont nos fabrications de l'année. Et je souhaiterais savoir pour chaque libellé (type de produit) combien de productions nous avons fait.

Job75 : merci pour ta macro, je vais essayer de l'adapter sur mon fichier "original" et te dirai si cela fonctionne. Mais n'aurais-tu pas une solution sans passer par VBA ?

Merci à vous 2 pour vos réponses :)
 

chris

XLDnaute Barbatruc
Bonjour à tous

Mets tes données sous forme de tableau, crée un TCD en les ajoutant au modèle de données (PowerPivot) puis utilise le distinct Count

Egalement faisable par PowerQuery intégré à ta version
 

Pièces jointes

  • Extrait-2.xlsx
    144.8 KB · Affichages: 4
  • Extrait_PQ.xlsx
    33 KB · Affichages: 2
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour Bobo la fouine, JHA, Jocelyn, chris, le forum,

Une autre solution par formules dans ce fichier avec 2 colonnes auxiliaires.

Bien sûr avec de grands tableaux le recalcul prendra du temps...

A+
 

Pièces jointes

  • Extrait par formules(1).xlsx
    48.4 KB · Affichages: 2

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Bonjour,

Avec une fonction perso réutilisable.

-Sélectionner F2:H30
=nbvaluniques(B2:B1000;A2:A1000;C2:C1000)
-Valider avec maj+ctrl+entrée

Par formule

=NB(1/FREQUENCE(SI((critère1=$F4)*(critère2=G$3);EQUIV(valeurs;valeurs;0));LIGNE(INDIRECT("1:"&LIGNES(valeurs)))))

Boisgontier
 

Pièces jointes

  • Uniques2crit.xls
    112 KB · Affichages: 4
  • Uniques2crit.Formule.xls
    92.5 KB · Affichages: 3
  • Fonction2critUniquesCroise.xls
    59 KB · Affichages: 3
Dernière édition:

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 206
Messages
2 086 211
Membres
103 158
dernier inscrit
laufin