Extraction de données pour statistique

Jondsyl

XLDnaute Nouveau
Bonjour,

Onglet, DI_2016, j'ai un tableau de données, extraction d'un autre logiciel
je dois réaliser des stats ...

Onglet bilan Atelier :
Dans la colonne B, je dois afficher la liste des intervenants sans doublon (onglet DI-2016, colonne S) et par ordre alphabétique ci-possible.
je dois mettre automatiquement la personne responsable de l'atelier (colonne F dans le tableau de données)

Je n'arrive à rien, merci de votre aide

Sylvain
 

Pièces jointes

  • Test.xlsx
    277 KB · Affichages: 46
  • Test.xlsx
    277 KB · Affichages: 45

Jondsyl

XLDnaute Nouveau
Re : Extraction de données pour statistique

Bonjour Dranred,
Comptent que tu sois toujours la et aussi disponible !
Il y a maintenant 2 ans tu m'as énormément aidé sur un gros fichier avec des combobox en cascade, ca marche encore !! Malheureusement j’ai toujours un niveau tres faible en VBA …
Pour le sujet du jour je suis bien évidement très intéressé
Je pensais essayer d'évité le VBA mais si c'est plus simple , GO !
J'ai mis dans mon fichier tes 4 modules
Dans un premier temps j'ai besoin de mettre les intervenant sans doubloon dans l'ordre alphabétique sur la feuille "bilan atelier" et dans la colonne d ' a coté la personne responsable
Je n’ai pas encore saisie le cheminement
Merci d’avance
 

Pièces jointes

  • Test.xlsm
    88.6 KB · Affichages: 35
  • Test.xlsm
    88.6 KB · Affichages: 25

Dranreb

XLDnaute Barbatruc
Re : Extraction de données pour statistique

Il y a un petit souci parce qu'un procédure secondaire du module MClassement fabrique un Dictionary.
Pour qu'elle ne provoque plus d'erreur de compilation, il faut cocher la référence "Microsoft Scripting Runtime".
Ensuite il convient d'écrire la Worksheet_Activate conformément à tes besoins.
Pour commencer appelle tes sous-groupes Interv et Respon au lieu de Vendeur et RéfArt.
Naturellement la plage à prendre ce ne sera pas ColUti(Feuil1.[B2:C2]) mais plutôt PlgUti(Feuil1.[A5]) et les colonnes à prendre ne seront pas 1, 2 mais, apparemment, 19, 6.
Pas de souci: les Interv se présenteront sans doublon et par ordre alphabétique, et à l'intéreur de chacun d'eux les Respon aussi.
Lis les commentaires explicatifs dans la Function GroupOrg du module MClassement et aussi ceux du module de classe SsGroup.
 

Jondsyl

XLDnaute Nouveau
Re : Extraction de données pour statistique

Bon c'est encore pas ça qu'est ça ....

Je lis, mais je n'ai pas encore tout compris
 

Pièces jointes

  • Test.xlsm
    97.4 KB · Affichages: 32
  • Test.xlsm
    97.4 KB · Affichages: 34
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : Extraction de données pour statistique

Utilisez PlgUti au lieu de ColUti pour avoir toutes les colonnes à partir de A5, et non pas seulement les 2 qu'il fallait pour l'autre application. Regardez ces deux fonctions dans le module Utilit. Là il ne prend que la colonne A
Et à priori vous n'avez pas à rendre variable le nombre de colonnes en sortie, ni donc à utiliser de variable C.
 
Dernière édition:

Jondsyl

XLDnaute Nouveau
Re : Extraction de données pour statistique

Ben oui j'en avais oublié un bou ...

Private Sub Worksheet_Activate()
Dim Données As Collection, T(), L&, LMax&, C&, Interv As SsGroup, Respon As SsGroup
Set Données = GroupOrg(PlgUti(Feuil1.[A5]), 19, 6)
ReDim T(1 To 3000, 1 To Données.Count * 2)
For Each Interv In Données
T(2, 1) = Interv.Id
T(2, 2) = "Resp SSC"
' T(2, 3) = "zone"
L = 2
For Each Respon In Interv.Contenu
L = L + 1
T(L, 1) = Respon.Id
T(L, 2) = Respon.Count
Next Respon
If LMax < L Then LMax = L
Next Interv
Me.UsedRange.ClearContents
Me.[A5].Resize(LMax, C).Value = T
End Sub

Maintenant c'est la variable T qui ne va pas ....
 

Dranreb

XLDnaute Barbatruc
Re : Extraction de données pour statistique

ReDim T(1 To 3000, 1 To 3)

En combinant avec ce que vous décriviez j'ai trouvé ça, bien plus simple, qui marche :
VB:
Private Sub Worksheet_Activate()
Dim Données As Collection, T(), L&, Interv As SsGroup, Respon As SsGroup
Set Données = GroupOrg(PlgUti(Feuil1.[A5]), 19, 6)
ReDim T(1 To 8, 1 To 6)
For Each Interv In Données
   T(L + 1, 2) = Interv.Id
   For Each Respon In Interv.Contenu
      L = L + 1
      T(L, 6) = Respon.Id
      Next Respon
   Next Interv
Me.[A8:F15].ClearContents
Me.[A8].Resize(L, 6).Value = T
End Sub
 
Dernière édition:

Jondsyl

XLDnaute Nouveau
Re : Extraction de données pour statistique

La J'ai bien un atelier qui s'écrit en A2
Mais, je suppose, cela ne s'incremente pas l'un en dessous de l'autre mais l'un sur l'autre => j'ai qu'une ligne ...

Private Sub Worksheet_Activate()
Dim Données As Collection, T(), L&, LMax&, C&, Interv As SsGroup, Respon As SsGroup
Set Données = GroupOrg(PlgUti(Feuil1.[A5]), 19, 6)
ReDim T(1 To 3000, 1 To 3)
For Each Interv In Données
T(2, 1) = Interv.Id
' T(3, 1) = "Resp SSC"
' T(2, 3) = "zone"
L = 2
For Each Respon In Interv.Contenu
L = L + 1
T(L, 2) = Respon.Id
T(L, 2) = Respon.Count
Next Respon
If LMax < L Then LMax = L
Next Interv
Me.UsedRange.ClearContents
Me.[A2].Resize(LMax, 1).Value = T
End Sub
 

Jondsyl

XLDnaute Nouveau
Re : Extraction de données pour statistique

Je créé bien m'a 3 eme colonne mais elle est identique à la deuxième pourquoi ?
Private Sub Worksheet_Activate()
Dim Données As Collection, T(), L&, Interv As SsGroup, Respon As SsGroup, Sect As SsGroup
Set Données = GroupOrg(PlgUti(Feuil1.[A5]), 19, 6, 4)
ReDim T(1 To 3000, 1 To 3)
For Each Interv In Données
T(L + 1, 1) = Interv.Id
For Each Respon In Interv.Contenu
L = L + 1
T(L, 2) = Respon.Id
For Each Sect In Interv.Contenu
T(L, 3) = Sect.Id
Next Sect
Next Respon
Next Interv
Me.[A2:F15].ClearContents
Me.[A2].Resize(L, 3).Value = T
End Sub
 

Jondsyl

XLDnaute Nouveau
Re : Extraction de données pour statistique

J'ai trouvé ! Merci Damred j'en est assez pour ce soir
Maintenant il faut mettre en application .... alors a bientôt -:)
Sylvain

Private Sub Worksheet_Activate()
Dim Données As Collection, T(), L&, Interv As SsGroup, Respon As SsGroup, Sect As SsGroup
Set Données = GroupOrg(PlgUti(Feuil1.[A5]), 19, 6, 4)
ReDim T(1 To 3000, 1 To 6)
For Each Interv In Données
T(L + 1, 1) = Interv.Id
For Each Respon In Interv.Contenu
L = L + 1
T(L, 2) = Respon.Id
For Each Sect In Respon.Contenu
T(L, 3) = Sect.Id
Next Sect
Next Respon
Next Interv
Me.[A2:F15].ClearContents
Me.[A2].Resize(L, 3).Value = T
End Sub
 

Dranreb

XLDnaute Barbatruc
Re : Extraction de données pour statistique

Bien, bien. Je vois que ça commence à entrer.
Mais s'il peut vraiment y avoir plusieurs Sect dans un Respon, seul le dernier serait écrit puisque L n'est pas incrémenté dans le For Each Sect in Respon.Contenu
J'aurais plutôt fait comme ça :
VB:
Private Sub Worksheet_Activate()
Dim Données As Collection, T(), L&, Interv As SsGroup, Respon As SsGroup, Sect As SsGroup
Set Données = GroupOrg(PlgUti(Feuil1.[A5]), 19, 6, 4)
ReDim T(1 To 3000, 1 To 3)
For Each Interv In Données
   T(L + 1, 1) = Interv.Id
   For Each Respon In Interv.Contenu
      T(L + 1, 2) = Respon.Id
      For Each Sect In Respon.Contenu
         L = L + 1
         T(L, 3) = Sect.Id
         Next Sect, Respon, Interv
Me.[A2:F3001].ClearContents
Me.[A2].Resize(L, 3).Value = T
End Sub

À l'inverse, si vous ne vous intéressez toujours qu'à ce qu'il y a dans la première ligne de détail, parce que contrairement à moi vous avez confiance dans le fait que ce sera toujours pareil dans toutes les lignes pour un Interv donné, vous pourriez faire comme ça :
VB:
Private Sub Worksheet_Activate()
Dim Données As Collection, T(), L&, Interv As SsGroup, Détail
Set Données = GroupOrg(PlgUti(Feuil1.[A5]), 19)
ReDim T(1 To 3000, 1 To 3)
For Each Interv In Données
   Détail = Interv.Contenu(1)
   L = L + 1
   T(L, 1) = Interv.Id
   T(L, 2) = Détail(6)
   T(L, 3) = Détail(4)
   Next Interv
Me.[A2:F3001].ClearContents
Me.[A2].Resize(L, 3).Value = T
End Sub
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 609
Messages
2 090 197
Membres
104 449
dernier inscrit
Miguel937