XL 2016 DATA VBA

Maths_Excel

XLDnaute Nouveau
Bonjour à tous,

J'ai une base de données avec 20 000 lignes. L'objectif pour moi est de grouper les valeurs ayant en commun : un Identifiant, puis de générer un identifiant lié au groupe créé.

Merci d'avance.
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Pourquoi le chiffre d'affaire réalisé par CALAMAR sur cette affaire ne doit-il pas être additionné à celui par MERCI ?
Si encore c'était le même chiffre d'affaire pour une même société je pourrais à peu près comprendre …
 

Maths_Excel

XLDnaute Nouveau
Salut @Dranreb :)

J'en conclus que @Maths_Excel ne désire absolument pas en faire profiter tous les forumeurs qui demandent depuis longtemps et à plusieurs reprises des explications claires sur les critères de regroupement. :mad: et qui ont bossé pour des prunes.
Bonsoir Mapomme,

En n'aucun cas je voulais garder ça pour moi ;) Maintenant gràce à Dranreb, nous sommes plus éclairé sur les regroupements.

Encore Merci à Dranreb.
 

Maths_Excel

XLDnaute Nouveau
Pourquoi le chiffre d'affaire réalisé par CALAMAR sur cette affaire ne doit-il pas être additionné à celui par MERCI ?
Si encore c'était le même chiffre d'affaire pour une même société je pourrais à peu près comprendre …

Oui c'est le chiffre d'affaire de la même société.

Ils sont tous les deux dans la même société, donc le chiffre d’affaires est le même.
 

Maths_Excel

XLDnaute Nouveau
Mais pourquoi il est différent pour CALAMAR ? Et lequel faut-il prendre s'il y en a différents ?

Oui c'est vrai sur le fichier que j'avais posté en premier il était différent, regarde sur le dernier fichier que j'ai chargé, ils sont identiques CALMAR ET MERCI.

Dans le cas où les identifiants des sociétés sont différents, il faut faire la somme de toutes les valeurs.
 

Dranreb

XLDnaute Barbatruc
Bousoir.
J'avais pourtant suivi scrupuleusement suivi vos indication, où vous ne vouliez plus le détail.
Tiens, il n'y a plus de code, notamment avec vos essais de modification, dans le classeur joint ?
Ça ne devrait pas être trop compliqué de sortir des détails, il sortait bien déjà le détail des noms du groupe, il n'y a qu'à faire pareil pour les autres colonne à détailler.
 

Dranreb

XLDnaute Barbatruc
Essayez quand même de faire vous même leplus gros, à savoir mettre les résultats actuels non détaillés dans les nouvelles bonnes colonnes.
Je ne vais pas recommencer 50 fois tout ça.
Et ne fusionnez pas de cellule. Étant donné qu'il y a essentiellement deux groupes avec des nombres de lignes différents on va mettre tous les détail dans des cellules uniques séparés par des vbLf.
 

Maths_Excel

XLDnaute Nouveau
Dranreb,

J'ai un message d'erreur, pourtant j'ai crée une nouvelle variable pour correspondre (en PJ)

Là je vous rassure que c'est la dernière fois que je vous sollicite pour ce travail.

Bien cordialement,
 

Pièces jointes

  • GigogneMaths_Excel_V2.xlsm
    17.8 KB · Affichages: 9

Dranreb

XLDnaute Barbatruc
Le premier regroupement classait les sociétés par ordre décroissant des chiffres d'affaire (paramètre -5 de la fonction Gigogne)
or le chiffre d'affaire n'est plus en colonne 5 mais 6.
En fait vous avez ajouté une nouvelle colonne sans rien dire à personne, et vous n'avez absolument pas cherché à tout adapter en fonction de ça …
 
Dernière édition:

Maths_Excel

XLDnaute Nouveau
Dranreb,

SVP, je vous en prie d'être tolérant, ça fait juste quelques mois que j'ai commencé le vba.

Voici les modifications que j'ai apporté, mais toujours un message d'erreur :

VB:
Option Explicit
Private Sub Worksheet_Activate()
Dim Données As Collection, Soc As SsGr, TTrv(), LMax As Long, TotCA As Currency, Détail, L As Long, C As Long, _
   PCA As SsGr, NGrp As Long, IDP As SsGr, TRés(), Grp As SsGr, TJoin() As String, N As Long, Nom As SsGr
Set Données = GigIdx.Gigogne(Feuil2.[A2:E2], -5, 4)
For Each PCA In Données: LMax = LMax + PCA.Nombre: Next PCA
ReDim TTrv(1 To LMax, 1 To 7)
For Each PCA In Données
   For Each Soc In PCA.Co
      NGrp = NGrp + 1
      For Each Détail In Soc.Co
         L = L + 1: For C = 1 To 5: TTrv(L, C) = Détail(C): Next C
         TTrv(L, 7) = NGrp: Next Détail, Soc, PCA
L = 0
For Each IDP In GigIdx.Gigogne(TTrv, 1, Null, 4)
   NGrp = IDP.Co(1)(7)
   For Each Détail In IDP.Co
      L = L + 1: For C = 1 To 5: TTrv(L, C) = Détail(C): Next C
      TTrv(L, 7) = NGrp: Next Détail, IDP
L = 0
For Each Soc In GigIdx.Gigogne(TTrv, 4, Null, 1)
   NGrp = Soc.Co(1)(7)
   For Each Détail In Soc.Co
      L = L + 1: For C = 1 To 5: TTrv(L, C) = Détail(C): Next C
      TTrv(L, 7) = NGrp: Next Détail, Soc
L = 0
Set Données = GigIdx.Gigogne(TTrv, 7, Null, -3, 1)
ReDim TRés(1 To Données.Count, 1 To 6)
For Each Grp In Données
   L = L + 1
   TRés(L, 1) = Grp.Co(1)(1)
   TRés(L, 3) = Grp.Co(1)(3)
   Next Grp
L = 0
For Each Grp In GigIdx.Gigogne(TTrv, 7, 2)
   L = L + 1: ReDim TJoin(1 To Grp.Count): N = 0
   For Each Nom In Grp.Co: N = N + 1: TJoin(N) = Nom.Id: Next Nom
   TRés(L, 2) = Join(TJoin, vbLf)
   TRés(L, 6) = Grp.Count: Next Grp
L = 0
For Each Grp In GigIdx.Gigogne(TTrv, 7, Null, -6)
   L = L + 1
   TRés(L, 4) = Grp.Co(1)(4): Next Grp
L = 0
For Each Grp In GigIdx.Gigogne(TTrv, 7, 3)
   L = L + 1: ReDim TJoin(1 To Grp.Count): N = 0
   For Each Nom In Grp.Co: N = N + 1: TJoin(N) = Nom.Id: Next Nom
   TRés(L, 3) = Join(TJoin, vbLf)
   TRés(L, 6) = Grp.Count: Next Grp
L = 0
For Each Grp In GigIdx.Gigogne(TTrv, 7, 4)
   L = L + 1: TotCA = 0
   For Each Soc In Grp.Co: TotCA = TotCA + Soc.Co(1)(6): Next Soc
   TRés(L, 6) = TotCA: Next Grp
Me.Rows(2).Resize(50000).ClearContents
With Me.[A2].Resize(UBound(TRés, 1), UBound(TRés, 2))
   .Columns(1).NumberFormat = "@"
   .Columns(4).NumberFormat = "0"
   .Value = TRés: End With
End Sub
 

Dranreb

XLDnaute Barbatruc
La 1ère instruction exécutable est déjà fausse: vous ne récupérez les données que des colonne A:E alors qu'elles vont désormais jusqu'à F,
et vous regroupez en décroissant sur E et croissant sur D (soit -5, 4) ce qui ne correspond plus aux PCA (Plus grands Chiffres d'Affaire) puis Soc (…iété).
Je vous garantis que d'avoir ajouté une colonne ça va être très bénéfique pour vous car ça va vous apprendre plein de choses.
Je n'avancerai pas selon vos nouveaux souhaits tant que vous n'aurez pas intégralement tout remis au point vous même en fonction de ça.
 

Discussions similaires

Réponses
5
Affichages
218
Réponses
2
Affichages
213

Membres actuellement en ligne

Statistiques des forums

Discussions
312 348
Messages
2 087 508
Membres
103 568
dernier inscrit
NoS