Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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

Dranreb

XLDnaute Barbatruc
Re : Extraction de données pour statistique

Bonjour.
Vous devriez pouvoir utiliser ma fonction GroupOrg pour programmer facilement ce genre de rapport sans le carcan de la présentation imposée par les TCD.
Le dernier classeur équipé des 4 modules de service à été joint dans cette discussion.
 

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 ...


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 ...

 

Jondsyl

XLDnaute Nouveau
Re : Extraction de données pour statistique

La purge ! j'ai loupé un message ...... excuse moi !

Ca marche il faut que je comprenne les dispositions des colonnes

Est il possible de rejouter une 3 eme colonne ?
 

Dranreb

XLDnaute Barbatruc
Re : Extraction de données pour statistique

Là j'en ai prévu 6.
Y a plus qu'à y mettre ce que vous voulez.
C'est moi qui m'excuse d'abuser des édits de mes messages, c'est normal que vous l'ayez loupé.
 

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 ?
 

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

 

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

Réponses
7
Affichages
597
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…