Microsoft 365 regrouper des catégories

zollette

XLDnaute Nouveau
Bonjour le forum,

Dans le fichier en PJ, dans l'onglet "données brutes", j'ai en colonne A des références de catégories et en colonne B des types de produits. Chaque catégorie peut avoir 1 à N produits associés. Il y a donc autant de ligne par catégorie que de produits associés.
Je souhaite identifier les catégories qui ont un seul type de produit et celles qui en ont plusieurs.
Idéalement, je voudrai arriver à l'exemple dans l'onglet "résultat" : la référence de la catégorie et son type (MONO type de produit ou MULTI type de produit).
Merci.
Olivier
 

Pièces jointes

  • Fichier pour exceldownload.xlsx
    16.3 KB · Affichages: 10

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonsoir @zollette :),

Surtout pour vous saluer @M12 ;), @job75 ;),

Une autre version VBA.
Double-cliquez sur la cellule A1 de la feuille "Résultats" pour lancer la mise à jour.
Le code est dans le module de la feuille "Résultats" :
VB:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
   If Intersect(Target, Range("a1")) Is Nothing Then Exit Sub
   Cancel = True: Columns("a:b").ClearContents: Application.ScreenUpdating = False
   Sheets("Données brutes").Columns(1).Copy Columns(1)
   Columns(1).RemoveDuplicates Columns:=1, Header:=xlYes
   With Range("b2:b" & Cells(Rows.Count, 1).End(xlUp).Row)
      .FormulaR1C1 = "=IF(COUNTIF('Données brutes'!C1,RC[-1])=1,""mono"",""Multi"")"
      .Value = .Value
   End With
   Range("b1") = "Type"
End Sub
 

Pièces jointes

  • zollette- compter- v1.xlsm
    24.9 KB · Affichages: 5

zollette

XLDnaute Nouveau
Merci à vous 3 pour vos réponses rapides.
Mais j'ai du mal formuler ma problématique car vos formules contrôlent le nombre d’occurrence d'une même référence: si au moins deux occurrences alors = MULTI, sinon MONO. Alors qu'en fait, le caractère mono ou multi dépend de la colonne "type produit".
En fait, je peux avoir plusieurs occurrences d'une même référence de catégorie, si le produit est toujours du même type alors la catégorie est MONO, si j'ai deux types de produits différents alors la catégorie est MULTI.
Merci du coup de main!
Olivier
 

job75

XLDnaute Barbatruc
Comme ici le produit ne peut prendre que 2 valeurs "A1" et "A2" ce n'est pas trop difficile.

Voyez ce fichier (2) avec la formule matricielle en B2 :
VB:
=SI(A2="";"";SI(ESTNUM(EQUIV(A2&"A1";'Données brutes'!A$2:A$117&'Données brutes'!B$2:B$117;0)*EQUIV(A2&"A2";'Données brutes'!A$2:A$117&'Données brutes'!B$2:B$117;0));"MULTI";"MONO"))
 

Pièces jointes

  • Fichier pour exceldownload(2).xlsx
    17.8 KB · Affichages: 6

job75

XLDnaute Barbatruc
Bonjour zollette, M12, mapomme, le forum,

Avec ce fichier (3) les produits sont listés en colonne A (même formule matricielle qu'en colonne B).

La formule en C2 est plus simple et peut être adaptée à un nombre de produits quelconque :
Code:
=SI(B2="";"";SI(NB(EQUIV(B2&A$2:A$3;'Données brutes'!A$2:A$117&'Données brutes'!B$2:B$117;0))=1;"MONO";"MULTI"))
On peut aussi utiliser le fichier (3 bis) avec cette formule plus générale en C2 :
Code:
=SI(B2="";"";SI(NB(EQUIV(B2&DECALER(A$2;;;NB.SI(A:A;"?*")-1);'Données brutes'!A$2:A$117&'Données brutes'!B$2:B$117;0))=1;"MONO";"MULTI"))
qui évite d'avoir à modifier la formule si le nombre de produits varie.

Bonne journée.
 

Pièces jointes

  • Fichier pour exceldownload(3).xlsx
    17.9 KB · Affichages: 1
  • Fichier pour exceldownload(3 bis).xlsx
    18 KB · Affichages: 4

zollette

XLDnaute Nouveau
Bonjour,
J'ai l'impression d'être un cancre, je n'arrive pas à utiliser vos formules avec mes données, notamment modifier la plage de données'Données brutes'!A$2:A$117&' pour l'adapter à mes données.
J'admets que ca fait qques années que je n'ai pas touché excel autrement que pour faire des sommes et des produits puis des TCD.
Je pense que je bloque sur la notion de formule matricielle.
Une idée?

Milles mercis en tout cas pour vos précédentes réposnes!
Zol
 

job75

XLDnaute Barbatruc
Si le tableau source est grand il vaudra mieux utiliser le fichier joint et cette macro :
VB:
Private Sub Worksheet_Activate()
Dim d As Object, tablo, i&, x$, a, b
Set d = CreateObject("Scripting.Dictionary")
d.CompareMode = vbTextCompare 'la casse est ignorée
tablo = Feuil1.[A1].CurrentRegion.Resize(, 2) 'matrice, plus rapide
For i = 2 To UBound(tablo)
    x = tablo(i, 1)
    If Not d.exists(x) Then d(x) = UCase(tablo(i, 2))
    If UCase(tablo(i, 2)) <> d(x) Then d(x) = "MULTI"
Next i
If d.Count Then
    a = d.keys: b = d.items
    For i = 0 To UBound(a)
        tablo(i + 1, 1) = a(i)
        x = b(i)
        If x <> "MULTI" Then x = "MONO"
        tablo(i + 1, 2) = x
    Next i
End If
'---restitution---
If FilterMode Then ShowAllData 'si la feuille est filtrée
With [A2] '1ère cellule de destination, à adapter
    i = d.Count
    If i Then
        .Resize(i, 2) = tablo
        .Resize(i, 2).Interior.ColorIndex = 19 'jaune clair
        .Resize(i, 2).Borders.Weight = xlHairline 'bordures
    End If
    .Offset(i).Resize(Rows.Count - i - .Row + 1, 2).Delete xlUp 'RAZ en dessous
End With
With UsedRange: End With 'actualise la barre de défilement verticale
End Sub
Elle se déclenche quand on active la feuille "Résultats".
 

Pièces jointes

  • Fichier VBA(1).xlsm
    22.7 KB · Affichages: 3
Dernière édition:

Discussions similaires

Réponses
4
Affichages
156