Extraire utilisateurs en fonction de multiples criteres

Hello -

Je suis actuellement en train de me tirer les cheveux sur un fichier excel, ou je passe beaucoup de temps manuellement ...

J'aimerai avoir les utilisateurs classes par groupe qui utilisent exclusivement les achats mentionnes dans les colonnes L et P ( ci-dessous aussi vous trouverez la critere table )

Group Achat Achat

A GO CORP

B GO DER FER

C GO BO DO

D RE MI

E IZI GO

En Colonne A a E - page Parametres ce sont les informations que jai sur les utilisateurs et leurs achats.

J'aimerai qu'en page Resultat - nous ayons la liste des utilisateurs et leur achats qui matchent exclusivement la critere table ( mentionne au dessus).

Le resultat selon l'exemple devrait etre :

Group User Achat Achat Achat

A Alpha GO

A Teta GO CORP

B Zoro GO

B Lucie DER GO FER

C Oscar GO

D Michel RE MI

D Michou RE

E Laurent IZI

NB : La critere table peut evoluer ... donc je dois avoir quelque chose de dynamique

N'hesitez pas a me demandez si vous avez des questions,

Merci par avance de votre aide dans ce complexe challenge,

Coridalement,

19testcriteres1.xlsx (9.33 Ko)

Bonsoir,

Si tu n'as pas encore eu de réponse, c'est sans doute que je ne dois pas être seul à me demander comment il faut lire tes critères.

En l'état je ne m'y retrouve pas du tout ! Je pense que tu devrais apporter des précisions sur quels éléments sont décisionnels pour l'appartenance ou la non appartenance à un groupe, de façon non ambiguë.

Cordialement.

Bonjour, Bonjour MFerrand

La structure de données n'est pas optimale pour résoudre ce sujet

Il vaudrait mieux :

  • établir une base de données avec une colonne qui concatène les différentes valeurs possibles
  • effectuer un filtre avancé avec autant de lignes que de possibilités

Si j'ai un peu de temps tout à l'heure, je ferai un démonstrateur

un essai

13testcriteres1.xlsx (62.51 Ko)

Salut Steelson !

Je ne vois toujours pas quels critères décisifs vont faire rattacher un utilisateur à un groupe plutôt qu'à un autre.

Cordialement.

Bonsoir,

Si tu n'as pas encore eu de réponse, c'est sans doute que je ne dois pas être seul à me demander comment il faut lire tes critères.

En l'état je ne m'y retrouve pas du tout ! Je pense que tu devrais apporter des précisions sur quels éléments sont décisionnels pour l'appartenance ou la non appartenance à un groupe, de façon non ambiguë.

Cordialement.

Merci MFerrand pour ce message - pour appartenir au groupe il faut utiliser les achats seulement mentionner dans les colonnes de L a O sur la page parametres.

Si on utilise que des achats faisant partis de ce groupe alors on peut etre referencer sur la page Resultat.

If not : IL NE SERA PAS reference dans la page Resultat.

Merci de me preciser si cette information supplementaire aide.

et mon essai te convent-il ?

sinon on peut faire du VBA pour éviter de concaténer les codes dans une seule et même cellule par ligne

Bonsoir,

Je ne sais l'interprétation qu'en fait Steelson, mais j'ai compris au départ qu'il s'agissait de répartir les utilisateurs par groupe, soit que si on les met dans un groupe, c'est à l'exclusion de tous les autres.

Or si tu dis que des groupes reposent sur plusieurs produits, et sachant que le même produits peut figurer dans plusieurs groupes, si comme tu viens de l'ajouter on rattache un utilisateur à un groupe sur la base d'un seul produit, cela voudrait donc dire qu'un utilisateur, surtout avec plusieurs produits dans ses achats peut appartenir à plusieurs groupes ? Voire à tous !

Cordialement.

et mon essai te convent-il ?

sinon on peut faire du VBA pour éviter de concaténer les codes dans une seule et même cellule par ligne

Merci par avance pour cet essai concluant

le probleme cest que je n ai pas 3 achats par personne mais une centaine donc je veux limiter l input manuel.

Est ce obligatoire de concatener ? Si oui avons nous une possibilite VBA ?

Merci encore.

Bonsoir,

Je ne sais l'interprétation qu'en fait Steelson, mais j'ai compris au départ qu'il s'agissait de répartir les utilisateurs par groupe, soit que si on les met dans un groupe, c'est à l'exclusion de tous les autres.

Or si tu dis que des groupes reposent sur plusieurs produits, et sachant que le même produits peut figurer dans plusieurs groupes, si comme tu viens de l'ajouter on rattache un utilisateur à un groupe sur la base d'un seul produit, cela voudrait donc dire qu'un utilisateur, surtout avec plusieurs produits dans ses achats peut appartenir à plusieurs groupes ? Voire à tous !

Cordialement.

Il fait parti du groupe qui les ai attache cest pour cela qu'il y a deux colonnes ( Lucie est Groupe B elle ne peut pas faire partie de Groupe A) ainsi de suite.

Et pour pouvoir valider cette appartennance les utilisateurs doivent respecter les criteres de leur groupe ( achats de leur groupe uniquement, ils peuvent faire parti du groupe si ils ont au moins un achat AND qu il n ont pas un achat different de ceux cite dans les criteres.

N'hesitez pas a me dire si je ne suis pas clair

Pour moi ce n'est pas clair !

Je reprends ton fichier :

Alpha a GO uniquement: pourquoi devrait-il être rattaché à A, plutôt qu'à B ou C ?

Zoro est dans le même cas: pourquoi devrait-il être rattaché à B, plutôt qu'à A ou C ?

Même chose pour Oscar: pourquoi C, plutôt que A ou B ?

Jean a BO uniquement: pourquoi aucun groupe alors qu'il relève de C ?

Cordialement.

Pour moi ce n'est pas clair !

Je reprends ton fichier :

Alpha a GO uniquement: pourquoi devrait-il être rattaché à A, plutôt qu'à B ou C ?

Zoro est dans le même cas: pourquoi devrait-il être rattaché à B, plutôt qu'à A ou C ?

Même chose pour Oscar: pourquoi C, plutôt que A ou B ?

Jean a BO uniquement: pourquoi aucun groupe alors qu'il relève de C ?

Cordialement.

Il ne faut pas le voir comme un group mais plutot comme une equipe .

Les users ne peuvent pas changer d equipe donc si Alpha du Groupe A utilise que GO et que la regle de A est : GO , CORP alors il est bien reporter dans la page resultat.

Lexemple de Beta du groupe A , il a CORP, GO and Zer mais Zer ne fait pas parti de la regle de A donc il ne sera pas reporte dans la page resultat.

Teta du Groupe A a GO et CORP comme achats donc ce dernier cera bien reporte dans la page Resultats !

Ainsi de suite ..

Si oui avons nous une possibilite VBA ?

yes

je regarde demain matin

Et avant qu'ils soient dans un groupe ?

Tout ça m'a l'air quelque peu aléatoire.

Bonjour,

Sub filtrer()

Dim criteres() As Variant
Dim donnees() As Variant

Dim Dico As Object
Set Dico = CreateObject("Scripting.Dictionary")

    Sheets("Resultat").Select
    Range("A1").CurrentRegion.Offset(1, 0).ClearContents
    With Sheets("Parametres")
        criteres = .Range("L1").CurrentRegion.Value
        donnees = .Range("A1").CurrentRegion.Value
    End With

    For i = LBound(criteres, 1) + 1 To UBound(criteres, 1)
        For j = LBound(criteres, 2) + 1 To UBound(criteres, 2)
            If criteres(i, j) <> "" Then Dico(criteres(i, 1) & "|" & criteres(i, j)) = ""
        Next
    Next

    On Error Resume Next
    For i = LBound(donnees, 1) + 1 To UBound(donnees, 1)
        drapeau = False
        For j = LBound(donnees, 2) + 2 To UBound(donnees, 2)
            If Dico(donnees(i, 1) & "|" & donnees(i, j)) Then drapeau = True
        Next
        If drapeau Then
            ligne = Cells(Rows.Count, 1).End(xlUp).Row + 1
            For j = LBound(donnees, 2) To UBound(donnees, 2)
                Cells(ligne, j) = donnees(i, j)
            Next
        End If
    Next
    On Error GoTo 0

End Sub

je ne trouve pas le même résultat ... il faudra donc me ré-expliquer la règle peut-être !

11testcriteres1.xlsx (9.33 Ko)

Et avant qu'ils soient dans un groupe ?

Tout ça m'a l'air quelque peu aléatoire.

Bonjour - la colonne A doit etre vu comme leur nom d equipe .

Les regles - criteres s appliquent uniquement part equipe, equipe A n'as pas les memes criteres que l equipe B.

Bonjour,

Sub filtrer()

Dim criteres() As Variant
Dim donnees() As Variant

Dim Dico As Object
Set Dico = CreateObject("Scripting.Dictionary")

    Sheets("Resultat").Select
    Range("A1").CurrentRegion.Offset(1, 0).ClearContents
    With Sheets("Parametres")
        criteres = .Range("L1").CurrentRegion.Value
        donnees = .Range("A1").CurrentRegion.Value
    End With

    For i = LBound(criteres, 1) + 1 To UBound(criteres, 1)
        For j = LBound(criteres, 2) + 1 To UBound(criteres, 2)
            If criteres(i, j) <> "" Then Dico(criteres(i, 1) & "|" & criteres(i, j)) = ""
        Next
    Next

    On Error Resume Next
    For i = LBound(donnees, 1) + 1 To UBound(donnees, 1)
        drapeau = False
        For j = LBound(donnees, 2) + 2 To UBound(donnees, 2)
            If Dico(donnees(i, 1) & "|" & donnees(i, j)) Then drapeau = True
        Next
        If drapeau Then
            ligne = Cells(Rows.Count, 1).End(xlUp).Row + 1
            For j = LBound(donnees, 2) To UBound(donnees, 2)
                Cells(ligne, j) = donnees(i, j)
            Next
        End If
    Next
    On Error GoTo 0

End Sub

je ne trouve pas le même résultat ... il faudra donc me ré-expliquer la règle peut-être !

Bonjour -

Effectivement les resultats via VBA coding ne sont pas les bons malheuresement notre Ami Beta du Groupe A ne peut pas etre dans les resultats car il utilise ZER qui n est pas dans les criteres de A ( seulement GO et CORP y sont ) .

Effectivement les resultats via VBA coding ne sont pas les bons malheuresement notre Ami Beta du Groupe A ne peut pas etre dans les resultats car il utilise ZER qui n est pas dans les criteres de A ( seulement GO et CORP y sont ) .

Ben voilà, je n'avais pas compris qu'il fallait cumuler TOUS les critères.

Je corrige.

Cette fois-ci c'est bon ...

Sub filtrer()

Dim criteres() As Variant
Dim donnees() As Variant

Dim Dico As Object
Set Dico = CreateObject("Scripting.Dictionary")

    Sheets("Resultat").Select
    Range("A1").CurrentRegion.Offset(1, 0).ClearContents
    With Sheets("Parametres")
        criteres = .Range("L1").CurrentRegion.Value
        donnees = .Range("A1").CurrentRegion.Value
    End With

    For i = LBound(criteres, 1) + 1 To UBound(criteres, 1)
        For j = LBound(criteres, 2) + 1 To UBound(criteres, 2)
            If criteres(i, j) <> "" Then Dico(criteres(i, 1) & "|" & criteres(i, j)) = ""
        Next
    Next

    On Error Resume Next
    For i = LBound(donnees, 1) + 1 To UBound(donnees, 1)
        decompte = 0
        For j = LBound(donnees, 2) + 2 To UBound(donnees, 2)
            If donnees(i, j) <> "" Then decompte = decompte + 1
            If Dico(donnees(i, 1) & "|" & donnees(i, j)) Then decompte = decompte - 1
        Next
        If decompte = 0 Then
            ligne = Cells(Rows.Count, 1).End(xlUp).Row + 1
            For j = LBound(donnees, 2) To UBound(donnees, 2)
                Cells(ligne, j) = donnees(i, j)
            Next
        End If
    Next
    On Error GoTo 0

End Sub
13testcriteres1.xlsm (18.15 Ko)

Cette fois-ci c'est bon ...

Sub filtrer()

Dim criteres() As Variant
Dim donnees() As Variant

Dim Dico As Object
Set Dico = CreateObject("Scripting.Dictionary")

    Sheets("Resultat").Select
    Range("A1").CurrentRegion.Offset(1, 0).ClearContents
    With Sheets("Parametres")
        criteres = .Range("L1").CurrentRegion.Value
        donnees = .Range("A1").CurrentRegion.Value
    End With

    For i = LBound(criteres, 1) + 1 To UBound(criteres, 1)
        For j = LBound(criteres, 2) + 1 To UBound(criteres, 2)
            If criteres(i, j) <> "" Then Dico(criteres(i, 1) & "|" & criteres(i, j)) = ""
        Next
    Next

    On Error Resume Next
    For i = LBound(donnees, 1) + 1 To UBound(donnees, 1)
        decompte = 0
        For j = LBound(donnees, 2) + 2 To UBound(donnees, 2)
            If donnees(i, j) <> "" Then decompte = decompte + 1
            If Dico(donnees(i, 1) & "|" & donnees(i, j)) Then decompte = decompte - 1
        Next
        If decompte = 0 Then
            ligne = Cells(Rows.Count, 1).End(xlUp).Row + 1
            For j = LBound(donnees, 2) To UBound(donnees, 2)
                Cells(ligne, j) = donnees(i, j)
            Next
        End If
    Next
    On Error GoTo 0

End Sub

Incroyable mais vrai c est possible

Tres bon lundi a vous ...

Merci beaucoup

Rechercher des sujets similaires à "extraire utilisateurs fonction multiples criteres"