XL 2019 Récupérer en automatique les infos dans un tableau

christ77000

XLDnaute Occasionnel
Bonsoir à tous, j'ai dans un tableau les données de plusieurs entreprises. J'extrait les données de trois champs dans un graphique croisé dynamique.
Je souhaiterais faire une feuille par société juste en récupérant le nom de cette feuille puis aller chercher en automatique les champs correspondant. Je joint un extrait du fichier comme exemple.

Merci pour votre aide.
 

Pièces jointes

  • Suivi du traitements des OT - Copie.xlsm
    110.8 KB · Affichages: 20
Solution
Bonsoir à toutes & à tous,
bonsoir @christ77000
essayer de comprendre comment tu avais repris les données des sociétés pour les isoler dans leurs propre feuille.
Ça c'est fait par la macro Private Sub CBn_Ajouter_Click() du formulaire.
Dans cette partie :
With sh.PivotTables("Etat Mensuel")
'Rajouter les champs des valeur du TCD
.AddDataField .PivotFields(Nom & " Nb OT"), "Nb OT", xlSum
.AddDataField .PivotFields(Nom & " Nb OT terminé"), "Nb OT terminé", xlSum
.AddDataField .PivotFields(Nom & " OT restant"), "OT restant", xlSum

Nom contenant le nom de l'entreprise.
AddDataField ajoute le champ de données avec le nom personnalisé et la fonction utilisée.

AtTheOne

XLDnaute Impliqué
Supporter XLD
bonsoir à toutes & à tous,
bonsoir @christ77000
Le fichier que tu joins en exemple contient des erreurs qui gênent à la compréhension de ton problème :
  • #REF dans la feuille Archives
  • Etat du TCD de la feuille "Suivi_HYDROLEC" qui ne correspond pas à la source de données (dans ton exemple le tableau "Tableau1" de la feuille Archives qui ne comporte pas de dates ...)
Peut-être faut-il passer par la fonction LIREDONNEESTABCROISDYNAMIQUE, mais il me faut un peu plus d'explication (une ligne par mois ?) ...
 

AtTheOne

XLDnaute Impliqué
Supporter XLD
Re-bonsoir
J'ai fait un essai avec LIREDONNEESTABCROISDYNAMIQUE (formule en B31 tirée sur la droite puis vers le bas) :
1678659967139.png

la formule :
Enrichi (BBcode):
=SIERREUR(LIREDONNEESTABCROISDYNAMIQUE(B$30&"";INDIRECT("'Suivi_"&$A$28&"'!A11");"Mois";$A31);"-")
te renverra les valeurs pour FERREE si tu remplaces en A28 HYDROTEC par FERREE, si la feuille "Suivi_FERREE" est créée sur le même modèle que "Suivi_HYDROLEC" (avec un le même TCD en A11) ...
Ceci avec les valeurs de ton TCD non actualisé

Bon courage
 

christ77000

XLDnaute Occasionnel
Bonjour, Alain et merci pour ton aide. Les #REF dans le tableau sont normaux car j'ai supprimer des colonnes pour la taille du fichier. Et oui il y a bien une date elle sont a partir de A9 A10 etc..

J'ai essayer de mettre en place ta solution sans succès, je ne la comprend pas si tu as du temps pourrait tu me mettre un exemple dans mon fichier que je puisse voir en réel ce que cela fait. Encore merci pour ton aide.
J'ai retiré également le "Suivi_" sur chaque feuille test sur la feuille HYDROLEC
Je renvoie également le fichier entier
 

Pièces jointes

  • Suivi du traitements des OT.xlsm
    398.7 KB · Affichages: 5
Dernière édition:

christ77000

XLDnaute Occasionnel
Re bonjour Alain, chez moi je possède le Office 2019 et le Office 365 au boulot et je bosse le fichier chez moi et test au boulot pas terrible je sais. Et oui bien sur si tu as une autre proposition à faire
 
Dernière édition:

AtTheOne

XLDnaute Impliqué
Supporter XLD
Bonsoir à toutes & à tous,
bonsoir @christ77000

Préambule : Les listes de la feuille "Tables" utilisent des fonctions propres à Excel2021 et Excel635.

Mon idée :
  • S'appuyer le plus possible sur ton exemple
  • Créer un modèle pour tes feuilles de suivi des entretiens, les créer par une macro (clic sur le bouton "Nouvelle feuille de suivi").
  • Ce modèle utilise un Tableau Croisé Dynamique et un segment pour la sélection des mois scrutés. Les trois graphiques repris de ton exemple fonctionnent avec ce TCD et ce Segment.
  • La macro d'appel affiche un formulaire pour le choix de l'affectation suivie.
  • Pour illustrer les fonctions LIREDONNEESTABCROISDYNAMIQUE j'ai ajouter une feuille "Suivi" dans laquelle tu peux choisir l'affectation (si sa feuille de suivi a été créée. Ce n'est qu'une illustration, car cela fait doublon avec lesdites feuilles de suivi)
    Lors de l'activation de cette feuille "Suivi", le segment est actualisé avec les mois trouvés dans la feuille "Tables". (même action dans les autres feuilles de suivi mais lors de leur création).

J'ai nommé "_tb_Entretien" ton tableau structuré de la feuille Archives.​
J'ai créé une feuille "Tables" avec les listes utilisées par mes macros (avec fonctions OFFICE365)​

Remarque : je crée autant de Segments que de TCD dans les feuilles de suivi des entretiens, on pourrait n'en avoir qu'un sur une feuille générale.

La macro d'appel :
VB:
Sub Btn_Nouveau_Clic()
     'Clic sur le bouton "Nouvelle feuille de suivi"
     Usf_Ajout_TdB.Show
     Unload Usf_Ajout_TdB
End Sub

Le formulaire :
1678743525460.png

Le code du formulaire :
VB:
Private Sub UserForm_Initialize()
     Dim Liste, i%, n$
     Me.Cbx_Création.List = Tables.[Affectation].Value
     Liste = WorksheetFunction.Transpose(Me.Cbx_Création.List) 'Liste des affectations réalisées (1 dimension)
   
     'Retirer de la liste les affectations pour lesquelles une feuille existe déjà
     On Error Resume Next
     For i = UBound(Liste) To LBound(Liste) Step -1
          n = "": n = ThisWorkbook.Worksheets(Liste(i)).Name
          If n <> "" Then Me.Cbx_Création.RemoveItem i - 1
     Next
     On Error GoTo 0
   
End Sub

Private Sub CBn_Quitter_Click()
     Unload Me
End Sub

Private Sub CBn_Ajouter_Click()
     Dim sh As Worksheet, Nom$, Scl As Slicer, SlcIt As SlicerItem, ListeActif, Mois
   
     If Me.Cbx_Création.ListIndex = -1 Then Exit Sub  'Le nom contenu dans la combo n'est pas une affectation
   
     Nom = Me.Cbx_Création.Text
     Application.ScreenUpdating = False
     Modèle_TdB.Copy before:=Tables      'Copier le Modèle
     Set sh = ActiveSheet
     sh.Name = Nom                       'Nommer la nouvelle feuille
     sh.Shapes("Btn_Nouveau").Delete

     With sh.PivotTables("Etat Mensuel")
          'Rajouter les champs des valeur du TCD
          .AddDataField .PivotFields(Nom & " Nb OT"), "Nb OT", xlSum
          .AddDataField .PivotFields(Nom & " Nb OT terminé"), "Nb OT terminé", xlSum
          .AddDataField .PivotFields(Nom & " OT restant"), "OT restant", xlSum
          'Mettre à jour le segment de choix des mois
          Set Slc = .Slicers(1)
          Slc.Name = Nom & " Mois"
          Slc.SlicerCache.Name = Nom & "_Mois"
          'liste des mois actifs (qu'on retrouve dans le tableau "_tb_Entretien" de la feuille Archives
          ListeActif = WorksheetFunction.Transpose(Tables.[Périodes_actives].Value)
          'On active tous les mois
          For Each Mois In ListeActif
               Slc.SlicerCache.SlicerItems(Mois).Selected = True
          Next
          'On désactive ceux qui ne sont pas dans la liste
          For Each SlcIt In Slc.SlicerCache.SlicerItems
               If UBound(Filter(ListeActif, SlcIt.Name)) = -1 Then SlcIt.Selected = False
          Next
     End With
     'Etiquettes et légende du graphique "Grph_Mensuel"
     Set chrt = sh.ChartObjects("Grph_Mensuel").Chart
   
     chrt.ApplyDataLabels   'ajoute toutes les étiquettes
     For Each sr In chrt.FullSeriesCollection
           'Mise en forme des étiquettes
           With sr.DataLabels.Format.Fill
                .Visible = msoTrue
                .ForeColor.RGB = RGB(255, 255, 255)
                .Transparency = 0
                .Solid
           End With
     Next
   
     chrt.SetElement (msoElementLegendBottom) 'ajoute la légende en bas du graphique
   
     'Retirer de la liste de la combo l'affection que l'on vient de traiter
     Me.Cbx_Création.RemoveItem (Me.Cbx_Création.ListIndex)
     Me.Cbx_Création.Text = ""
     Application.ScreenUpdating = True

End Sub

Private Sub Cbx_Création_Change()
     'Affichage ou non du bouton Ajouter en fonction du texte de la combo
     Select Case Me.Cbx_Création.ListIndex
          Case -1
               Me.CBn_Ajouter.Visible = False
          Case Else
               Me.CBn_Ajouter.Visible = True
     End Select

End Sub

Le code de la feuille suivi :
VB:
Private Sub Worksheet_Activate()

          Dim lo As ListObject, Slc As Slicer, SlcIt As SlicerItem
         
          Set lo = Me.ListObjects("tb_Suivi")   'Tableau stucturé de la feuille
          Set Slc = lo.Slicers(1)               'Segment "Mois"
          ListeActif = WorksheetFunction.Transpose(Tables.[Périodes_actives].Value)  'liste des mois actifs
          Application.ScreenUpdating = False
          'On active tous les mois
          For Each Mois In ListeActif
               Slc.SlicerCache.SlicerItems(Mois).Selected = True
          Next
          'On désactive ceux qui ne sont pas dans la liste
          For Each SlcIt In Slc.SlicerCache.SlicerItems
               If UBound(Filter(ListeActif, SlcIt.Name)) = -1 Then SlcIt.Selected = False
          Next
          Application.ScreenUpdating = True

End Sub
Voir le fichier en PJ
Bon courage
 

Pièces jointes

  • Suivi du traitements des OT ter.xlsm
    427.3 KB · Affichages: 4
Dernière édition:

christ77000

XLDnaute Occasionnel
Bonjour Alain, je découvre ce matin ton formidable travail. Je ne comprend pas tout mais cela fonctionne. J'aurais juste quelques petites modifications a te demander si je peut me le permettre. La liste des sociétés n'est pas a reprendre de la charge. Celons les entretiens nous ne faisons pas toujours appel au même société. Aussi le faite d'avoir nommé le tableau de charge 'tb_charge' C'est plus pratique pour les formules mais ce tableau a aujourd'hui 80 lignes demain il peut en avoir 300. Ce tableau provient d'une extraction d'un autre programme que je ne gere pas. La liste est donc reprise de la feuille 'Chiffres'. J'ai repris ta fonction mais j'ai une cellule vide. En suite les mois "fevrier/mars' c'est bien mais pas pratique car le but est d'afficher entretien par entretien. J'ai fait des commentaire dans le fichier que je te renvoie. En tout cas un grand merci pour ton aide. Mes collègues et moi même te disons merci.
 

Pièces jointes

  • Suivi du traitements des OT ter.xlsm
    461.7 KB · Affichages: 4

christ77000

XLDnaute Occasionnel
re bonjour à tous,
c'es bon j'ai trouvé pour la liste des sociétés avec la formule suivante :
=(TRIER(UNIQUE(FILTRE(Nom_BD;Nom_BD<>""))))

*Je me suis aperçu après test que les nom composé de société exemple "toto" ok mais "toto truc" ne passe pas. J'ai ajouter des _ entre les deux mais ne passe pas non plus.

*Si je change le nom du fichier en enlevant le 'ter' la création des feuilles plantent, j'ai cherché et vu que dans le graph est écrit le nom du fichier. Je retrouve nul part ou changer ce nom.
 
Dernière édition:

AtTheOne

XLDnaute Impliqué
Supporter XLD
Re
d'avoir nommé le tableau de charge 'tb_charge' C'est plus pratique pour les formules mais ce tableau a aujourd'hui 80 lignes demain il peut en avoir 300.
Ce n'est pas un problème en soit car si tu étends ton tableau (comme c'est un tableau structuré) la référence tb_Charge[Affecté à] s'étend automatiquement (fais un essai en rajoutant des données en fin de tableau tu verras que tout suit cette modification, ça marche aussi pour les diminutions de taille).
Quoiqu'il en soit j'ai créé une formule dans "Tables" qui lit l'entête du tableau "_tb_Entretien" de la feuille Archives puisque c'est ce tableau que l'on lit.

J'ai une question :
Est-ce que tes données dans l'onglet Archives ont exactement cette forme dans ton extraction de l'autre programme ou est-ce un tableau reconstruit à partir de l'onglet Charge ?
L'onglet Charge me semble plus exploitable, il suffit de lui ajouter la date de l'entretien dans une colonne Date et de les concaténer, entretien après entretien, dans une Liste que l'on pourrait appeler BdD.
Les TCD seraient plus simples en lisant cette BdD. (Tout cela peut s'automatiser si le format de ton fichier à importer est stable)
Puis-je avoir le format de ton fichier brut exporté par ton logiciel avec quelques lignes bidon (ou est-ce exactement l'onglet "Charge" ?
Peut-être y a-t-il plus simple que ce tableau en ligne de la feuille Archives ...

*Je me suis aperçu après test que les nom composé de société exemple "toto" ok mais "toto truc" ne passe pas. J'ai ajouter des _ entre les deux mais ne passe pas non plus.
C'est réglé, j'ai essayé avec "GENIE FLEXION" (voir la PJ)​
*Si je change le nom du fichier en enlevant le 'ter' la création des feuilles plantent, j'ai cherché et vu que dans le graph est écrit le nom du fichier. Je retrouve nul part ou changer ce nom.
Je n'ai pas ce problème peux-tu me donner plus de précision, Quel Graph ? Dans les macros j'utilise l'objet ThisWorkbook pour ne pas mettre "en dur" le nom du fichier.​
En suite les mois "fevrier/mars' c'est bien mais pas pratique car le but est d'afficher entretien par entretien.
Il suffit d'ajouter le champ "Date de l'entretien" dans le Tableau Croisé Dynamique" du modèle (ce que j'ai fait après avoir déplacé le récapitulatif au dessus du TCD car on ne maîtrise pas la taille de ce dernier)​

Bon je te joins le classeur modifié (j'ai également revu les couleurs des histogammes pour coller à ton premier envoie -inversion du rouge et du vert)

Je pense qu'on peut encore te simplifier la vie ...
 

Pièces jointes

  • Suivi du traitements des OT.xlsm
    537 KB · Affichages: 7
Dernière édition:

christ77000

XLDnaute Occasionnel
Bonjour Alain, en premier merci de prendre du temps pour m'aider. Je viens de rentrer du boulot j'ai pris le fichier mais ne peut le tester car chez moi office 2019.
Merci en tout cas pour les corrections apportées. Je te joins le fichier d'extraction brute. Alors le simplifier oui je pense mais pour mon niveau cela risque d'être difficile pour la compréhension. Par exemple si un jour on me demande d'ajouter un champs dans les archives j'y arriverai mais en suite le raccroché a ce que tu a fais ca c'est autre chose.
 

Pièces jointes

  • Sheet1c8abf966.xls
    21.8 KB · Affichages: 4

christ77000

XLDnaute Occasionnel
Bonjour Alain, je viens de tester le fichier, ras. J'ai fais aussi de mon côté quelques corrections. Les graph on pas la bonne couleur et vu qu'il n'y a pas de valeur je n'arrive pas a corriger avant la création d'une nouvelle feuille. Dans 'suivi' il y a par contre dans 'Modèle TdB' il n'y a pas.
Je te joint le fichier modifier. Encore merci.

J'ai mis un exemple d'ajout de champ dans l'archive si tu avais un peut explication a me donner pour que je puisse par la suite le faire moi-même car c'est un peut le but. Merci
 

Pièces jointes

  • Suivi du traitements des OT.xlsm
    469 KB · Affichages: 3
Dernière édition:

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 084
Messages
2 085 194
Membres
102 813
dernier inscrit
kaiyi