XL 2013 Regroupement de données selon plusieurs critères..

anri0610

XLDnaute Junior
Bonjour a tous,

Mon soucis:
effectuer la somme des valeurs de la colonne E si/quand les valeurs des colonnes A B C D sont toutes identiques,
j'aurais pourtant essayer d être clair... ><

je vous joint le fichier concerne, sachant que les valeurs diffèrent toutes a chaque travail donc impossible de définir une règle pour une quelconque valeur.

ex/
maintenant:

AW-1 110 25 2100 10
AW-1 110 25 2100 10
AW-1 110 25 2100 10
AW-1 110 25 2100 10
AW-1 110 25 2100 10
AW-3 110 25 800 10

résultat souhaite:

AW-1 110 25 2100 50
AW-3 110 25 800 10

je souhaiterai effectuer ce résultat avec une macro,
et ne pas transformer la mise en forme des données pour un tableau dynamique.
est-ce seulement possible ?
 

Pièces jointes

  • TEST.xlsx
    10 KB · Affichages: 50

anri0610

XLDnaute Junior
Je souhaiterai au moins vous poser la question pour savoir si seulement c est possible..
etant donner que ce serait l'ideal pour que votre outil soit applicable complètement dans mon cas ,
je vais essayer d’être clair,

Dans L'ordre des données de la colonne F définir pour chaque valeur (nom de couleur) identique une référence interne qui donnerai couleur1, couleur2 etc.
pour ensuite modifier le placement de la somme pour chaque ligne, ce qui donnerai pour couleur1, toujours le placement en -4, si couleur2 existe le placement en -5, si couleur 3 existe en -6 etc
ce qui laisserait des espaces entre les valeur d'une même ligne , ce qui est exactement le but rechercher !
je souhaiterai savoir si ce serait possible d'en demander autant.
merci bien !
 

Pièces jointes

  • couleur 2.png
    couleur 2.png
    103.3 KB · Affichages: 27
  • couleur 4.png
    couleur 4.png
    78.3 KB · Affichages: 28

Dranreb

XLDnaute Barbatruc
Bonjour.
Je ne comprends pas bien ce que vous voulez.
Déjà la colonne F c'est la 6, pas la 5. Et vous voudriez aussi un classement en ordre décroissant et un regroupement dessus ? Et dans ce cas ne devrait-il pas venir avant le dernier regroupement sur la colonne 1 ? C'est d'ailleurs ce que semble indiquer l'imbrication de vos boucles.
En général je n'appelle pas mes SsGr Arg1, Arg2 etc. Je leur donne des noms en rapport avec les titres des colonnes. Mais là c'est du japonais, alors… Pour rester dans la logique appelez Arg6 un SsGr pour la colonne 6.
Qu'est ce que vous appelez le placement ?
 

anri0610

XLDnaute Junior
Bonjour Dranreb,
je souhaiterai le résultat que j'ai joint en print screen,

mon premier message=

je souhaiterai seulement indiquer la reference couleur a droite de la somme via Mregrouper
(pour chaque ligne regroupée, de manière a ne pas faire la somme et mélanger des couleurs différentes)
pour ensuite faire le tri manuellement.

mon deuxième message=

je souhaiterai avoir un regroupement avec comme dernière règle de regroupement les données de cette colonne F,
en identifiant le nombre de couleur présentes dans le fichier traiter , de par le nombre de "nom de couleur" différents peut etre,
pour ensuite placer selon la couleur, la somme de regroupement actuelle.
Cette position serait dans le cas de la couleur 1, a la position actuelle en 5 en dessous des données de la colonne D.
Dans le cas d'une couleur 2, -1 en dessous , donc en 6 en laissant 1 espace entre les données de la colonne D et la somme.
Dans le cas d'une couleur 3, -2 en dessous, donc en 7 en laissant 2 espace entre les données de la colonne D et la somme.
Dans le cas d'une couleur 4, -3 en dessous, donc en 7 en laissant 2 espace entre les données de la colonne D et la somme.
etc
puis toujours si seulement c'est possible,
si pour un regroupement nous avons toutes les mêmes données, (donc jusqu’à maintenant un regroupement complet)
mais des valeurs différentes dans la colonne F alors regrouper mais placer la somme selon couleur 1>en 5 ; couleur2>en 6 ; couleur3>en 7 ...etc.
puis passer a la ligne suivante.

Le but principal étant de différencier les différents produits mélanger via le regroupement actuel ,
dans la réalité pour les mêmes données c'est a dire largeur longueur hauteur, nous auront un produit différent au niveau de la forme,
a ce niveau la il est nécessaire de les dissocier manuellement car les données n'informent pas un croquis et donc la forme .

Cependant la couleur du produit est indiquée par un nom/numéro,
au moment du regroupement de produits (via CAD) pour plusieurs couleurs de produits différent je définit par exemple couleur 1= 501
couleur2= 502 et dans le croquis la somme indiquée dans un tableau se trouve en dessous des chiffres 1,2,
j'aurai besoin de la forme de regroupement expliquée pour pouvoir comme dans le cadre d'une seule couleur présente pouvoir copier les données regroupées sans les modifier manuellement.

en espérant avoir été un petit peut plus clair..

je vous joint ce que représente le fichier final pour 4 couleur, cela vous éclairera peut être..
 

Pièces jointes

  • map 4 couleurs.png
    map 4 couleurs.png
    133.9 KB · Affichages: 21

Dranreb

XLDnaute Barbatruc
Bonjour.
VB:
   Dim TR(), LR&, Arg1 As SsGr, Arg2 As SsGr, Arg3 As SsGr, Arg4 As SsGr, Arg6 As SsGr, TTit(), RngCbl As Range, _
      TJoin() As String, J As Long, RngPoliceRg As Range, PfxArg As String, P As Long
   TTit = ActiveSheet.[A1:E1].Value
   ReDim TR(1 To 100000, 1 To 3)
   Set RngCbl = ActiveSheet.[G2].Resize(UBound(TR, 1), 3)
   RngCbl.Font.Color = 0
   For Each Arg2 In Gigogne(ActiveSheet.[A2:E2], -2, -3, -4, 1, 6)
      For Each Arg3 In Arg2.Co
         For Each Arg4 In Arg3.Co
            ReDim TJoin(1 To Arg3.Count): J = 0
            PfxArg = "?"
            For Each Arg1 In Arg4.Co: P = InStr(Arg1.Id, "-"): J = J + 1
               If Left$(Arg1.Id, P) <> PfxArg Then
                  TJoin(J) = Arg1.Id: PfxArg = Left$(Arg1.Id, P)
               Else: TJoin(J) = Mid$(Arg1.Id, P + 1): End If
               For Each Arg6 In Arg1.Co
'                Le problème c'est que je ne comprends pas du tout ce que vous voudriez faire à cet endroit.
'                Au fait la concaténation des Arg1 est-elle bien toujours d'actualité ?
'                Si le regroupement sur Agr6 est indépendant de celui sur Arg1 ça va devenir très compliqué, presque impossible !
                  Next Arg6, Arg1
            LR = LR + 1: TR(LR, 1) = TTit(1, 1): TR(LR, 2) = "'" & Join(TJoin, ".")
            LR = LR + 1: TR(LR, 1) = TTit(1, 2): TR(LR, 2) = Arg2.Id: If Arg2.Id > 200 Then TR(LR, 3) = 1
            LR = LR + 1: TR(LR, 1) = TTit(1, 3): TR(LR, 2) = Arg3.Id: If Arg3.Id > 25 Then TR(LR, 3) = 1
            LR = LR + 1: TR(LR, 1) = TTit(1, 4): TR(LR, 2) = Arg4.Id: If Arg4.Id = 2150 Then TR(LR, 3) = 1
            LR = LR + 1: TR(LR, 1) = TTit(1, 5): TR(LR, 2) = Arg4.Somme(5): If Arg4.Somme(5) <= 5 Then TR(LR, 3) = 1
            Next Arg4, Arg3
      LR = LR + 5: Next Arg2
   RngCbl.Value = TR
   On Error Resume Next: Set RngCbl = RngCbl.Columns(3).SpecialCells(xlCellTypeConstants)
   If Err = 0 Then
      RngCbl.Offset(, -1).Font.Color = &HFF&
      RngCbl.ClearContents: End If
En fait il semblerait que le Arg1 ne se justifie plus dans vos dernières données: il n'y en a chaque fois qu'un seul dans chaque Arg4. Mais on peut le garder, juste pour avoir son Id, mais on aurait intérêt, si jamais il venait à y en avoir à nouveau plusieurs, à refaire un paquet entier des 5 lignes pour chaque.
On pourrait peut être faire la boucle For Each Arg6 In Arg1.Co après les LR = LR + 1: TR(LR, 1) = etc.
et donc en refaire un pour chaque couleur.
Essayez ça: ça ne paraît pas inintéressant :
VB:
   Dim TR(), LR&, Arg1 As SsGr, Arg2 As SsGr, Arg3 As SsGr, Arg4 As SsGr, Arg6 As SsGr, TTit(), RngCbl As Range, _
      TJoin() As String, J As Long, RngPoliceRg As Range, PfxArg As String, P As Long
   TTit = ActiveSheet.[A1:F1].Value
   ReDim TR(1 To 100000, 1 To 3)
   Set RngCbl = ActiveSheet.[G2].Resize(UBound(TR, 1), 3)
   RngCbl.Font.Color = 0
   For Each Arg2 In Gigogne(ActiveSheet.[A2:F2], -2, -3, -4, 1, 6)
      For Each Arg3 In Arg2.Co
         For Each Arg4 In Arg3.Co
            For Each Arg1 In Arg4.Co
            LR = LR + 1: TR(LR, 1) = TTit(1, 1): TR(LR, 2) = Arg1.Id
            LR = LR + 1: TR(LR, 1) = TTit(1, 2): TR(LR, 2) = Arg2.Id: If Arg2.Id > 200 Then TR(LR, 3) = 1
            LR = LR + 1: TR(LR, 1) = TTit(1, 3): TR(LR, 2) = Arg3.Id: If Arg3.Id > 25 Then TR(LR, 3) = 1
            LR = LR + 1: TR(LR, 1) = TTit(1, 4): TR(LR, 2) = Arg4.Id: If Arg4.Id = 2150 Then TR(LR, 3) = 1
            LR = LR + 1: TR(LR, 1) = TTit(1, 5): TR(LR, 2) = Arg1.Somme(5): If TR(LR, 2) <= 5 Then TR(LR, 3) = 1
            For Each Arg6 In Arg1.Co
               LR = LR + 1: TR(LR, 1) = TTit(1, 6): TR(LR, 2) = Arg6.Id
               LR = LR + 1: TR(LR, 1) = TTit(1, 5): TR(LR, 2) = Arg6.Somme(5): If TR(LR, 2) <= 5 Then TR(LR, 3) = 1
               Next Arg6, Arg1, Arg4, Arg3
      LR = LR + 5: Next Arg2
   RngCbl.Value = TR
   On Error Resume Next: Set RngCbl = RngCbl.Columns(3).SpecialCells(xlCellTypeConstants)
   If Err = 0 Then
      RngCbl.Offset(, -1).Font.Color = &HFF&
      RngCbl.ClearContents: End If


Je vous suggère d'utiliser ce classeur pour faire des essais de la fonction Gigogne sur vos données
 

Pièces jointes

  • AuditGigogne.xlsm
    383.8 KB · Affichages: 22
Dernière édition:

anri0610

XLDnaute Junior
Bonjour j'aurais vraiment essayer tout ce que j'ai pu mais je n’arrête pas de m'embrouiller..

je pense qu'il n'est pas nécessaire que je note ce que j'ai essayer , j'ai essayer de modifier tous les ordres des arg sans atteindre le résultat souhaiter , je perdais soit le calcul de la somme soit j'avais en arg6.id une valeur différente...

aidez moi s'il vous plait,

je souhaiterai garder le résultat actuel , seulement ajouter la valeur de la colonne F,
(cet arg6), dans le même cadre de fonctionnement que les autres arg,
de manière a ce que comme jusqu’à maintenant la somme s'effectue si et quand toutes les valeur sont identiques.
de manière a séparer et ne pas mélanger les données de cette colonne F,
et seulement afficher a droite de la somme(5) la valeur correspondante a arg6.id pour information.

je ne souhaite pas modifier l’écriture actuelle de la colonne I.
aidez moi s'il vous plait je suis complètement perdu..
 

Pièces jointes

  • TEST 6 COULEURS.xlsm
    1.1 MB · Affichages: 16
  • PERSONAL.xlsm
    70 KB · Affichages: 18

anri0610

XLDnaute Junior
L’idéal que j'essayait d'expliquer aurait seulement été :

COLONNE I-----------------COLONNE J

NOM identique
valeur identique
valeur identique
valeur identique
somme1-----------------------couleur1
somme2-----------------------couleur2

etc

Au lieu de :

NOM identique
valeur identique
valeur identique
valeur identique
somme-------------------------couleur1

NOM identique
valeur identique
valeur identique
valeur identique
somme-------------------------couleur2

etc

mais si ce n'est pas possible ce n'est pas grave séparer les valeur de cette colonne F serait déjà un énorme soulagement!
 

Dranreb

XLDnaute Barbatruc
Alors c'est impossible.
Il faut choisir. Soit on regroupe sur la colonne A soit on regroupe sur la colonne F. On ne peut pas faire les deux en même temps. À moins qu'ils soient hiérarchisés l'un par rapport à l'autre, dans un sens ou dans l'autre. C'est soit -2, -3, -4, 1, 6 soit -2, -3, -4, 6, 1. Ça ne peut pas être à la fois -2, -3, -4, 1 pour les noms et -2, -3, -4, 6 pour les couleurs. À moins de le faire en deux fois, en passant par un tableau intermédiaire.
Le projet VBA de votre classeur PERSONAL.xlsm est protégé par un mot de passe.
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Bonjour.
J'ai mis en œuvre cette 1ère solution évoquée, en 2 passes, dans le classeur joint.
C'est dommage, avec une présentation plus classique ç'aurait été plus facile en utilisant un système de ventilation par colonne n'ayant pas besoin de regroupement. Mais on perd le principe de mettre tous les chiffres en colonne I, et du coup ça compliquerait un système de coloriage en rouge de certains chiffres, que je n'ai donc pas fait pour ça. J'ai en effet quand même aussi proposé cette seconde solution.
 

Pièces jointes

  • GigogneAnri0610.xlsm
    3.5 MB · Affichages: 29

anri0610

XLDnaute Junior
Bonjour ,
merci beaucoup, impatient de tester votre solution !
oui je comprend le plus gros soucis est de devoir avoir cette mise en forme pour la transposer tel quelle apres..

milles excuses je vous joint le classeur sans mot de passe.

PS: Pardon j'obtient une erreur au lancement de la macro, pouvez vous regarder s'il vous plait, je vous joint le print screen.
 

Pièces jointes

  • erreur module sol1.png
    erreur module sol1.png
    470.4 KB · Affichages: 18
  • PERSONAL.xlsm
    70 KB · Affichages: 16

Dranreb

XLDnaute Barbatruc
Bonjour.
Vraiment pénibles ces lettres accentuées mal reproduites au Japon dans les noms de variables !

Par ailleurs je n'ai pas trouvé vos essais de le faire vous même dans votre PERSONAL .xlsm.
Et toujours ces instructions idiotes qui remettent 50 fois les mêmes mises en formes conditionnelles.
Je ne sais pas pourquoi vous le joignez. Si au moins vous faisiez au début un FormatConditions.Delete pour tout nettoyer préalablement…
 
Dernière édition:

anri0610

XLDnaute Junior
Impressionnant.
votre solution 1 est parfaite et votre solution 2 très intéressante !
encore merci votre aide m'est vraiment précieuse!

mon seul soucis dans les deux cas serait de garder la même ligne (emplacement/ordre vertical) pour chaque couleur a chaque regroupement,
première couleur de référence =position 5
deuxième = position 5+1
troisième= position 5+2
etc

si cela est possible ça serait parfaitement opérationnel!
je vous joint les print screen qui seront je l’espère plus explicite!
 

Pièces jointes

  • regrouper solution 1.png
    regrouper solution 1.png
    98.8 KB · Affichages: 24
  • regrouper solution 2.png
    regrouper solution 2.png
    88.4 KB · Affichages: 21

anri0610

XLDnaute Junior
Pardon,
j'ai voulu tester la macro avec un autre fichier et j'obtient des erreurs, je vous joint les printscreen,

a noter que j'ai pris soin de copier le module Mgigogne correspondant et le module de classe SsGr
dans mon classeur de macro, je n'ai donc pas de soucis via mon classeur a effectuer les macro,
pour le fichier TEST,

ensuite j'ai vérifier avec le fichier original du test que je vous ai envoyer, et toujours pas de soucis.
les erreur proviennent uniquement de l'utilisation dans un autre cas avec un autre fichier..
 

Pièces jointes

  • erreur d'execution sol1 -1.png
    erreur d'execution sol1 -1.png
    768.5 KB · Affichages: 14
  • erreur d'execution sol1 -2.png
    erreur d'execution sol1 -2.png
    749.6 KB · Affichages: 21
  • erreur d'execution sol2 -1.png
    erreur d'execution sol2 -1.png
    786.6 KB · Affichages: 23
  • erreur d'execution sol2 -2.png
    erreur d'execution sol2 -2.png
    764.9 KB · Affichages: 14

Dranreb

XLDnaute Barbatruc
Oui ça a l'air possible de les mettre l'un en dessous de l'autre en modifiant légèrement la solution 2
Les indice en dehors de limites viennent de ce qu'il manque des tirets dans la 1ère colonne, et donc des champs à analyser pour les répétitions. Je les remplace par des "?" et je m'arrête là pour ce détail. Ne me demandez pas de faire autre chose, si ça ne vous plait pas débrouillez vous pour ce cas.
 

Discussions similaires

Réponses
36
Affichages
1 K

Statistiques des forums

Discussions
311 725
Messages
2 081 940
Membres
101 845
dernier inscrit
annesof