XL 2016 Gestion des Employés

Jorelle27

XLDnaute Nouveau
Bonjour la team,
ça fait des mois que je travail sur ce fichier il marche mais avec plus de données le processeur atteint 100.

je vous expliques : mon fichier récupère les dates de contrat en court des employers dans le sheet 2--->sheet 1
et affiche une Etoile (*) en colonne D du sheet 1 si un employé à un contrat futur.

pour l'affichage des date j'ai utilisé une formule excel car j'ai pas pu le faire en VBA
pour l'affichage de l'Etoile j'ai utilisé du VBA

j'aurais besoin de votre expertise pour une solution plus légère, Merci
 

Pièces jointes

  • gestion de user et contrat1.xlsm
    20.3 KB · Affichages: 19
Solution
Bonsoir à toutes & à tous, bonsoir @Jorelle27
Voici ma dernière version avec macros (j'ai renoncé aux formules et MFC pour tes dernières demandes, on aboutit à des choses très compliquées qui vont faire ramer le PC)

Les fonctionnalités mises en place
  • Feuille "Userdata"
Tableau structuré "tb_User" sans formule ni MFC. la mise à jour se déclenche avec l'événement Worksheet_Activate.​
Les congés affichés sont les plus tardifs du contrat actif lors de la mise à jour.​
Contrôle des doublons sur les uid, message puis effacement du doublon.​
  • Feuille "management des contrats
Tableau structuré "tb_management" avec formules dans les colonnes "nom" et "prénom" pour lire ces informations dans le TS...​

wDog66

XLDnaute Occasionnel
Bonjour Jorelle27

Celle ou celui qui vous a donné les formules matricielles aurait dû vous indiquer que c'est très gourmand en ressource processeur 🙄

Maintenant avec si peu d'éléments donnés dans votre fichier, je ne vois pas ce qu'on peut faire

Bonne chance
 

Jorelle27

XLDnaute Nouveau
Bonjour Jorelle27

Celle ou celui qui vous a donné les formules matricielles aurait dû vous indiquer que c'est très gourmand en ressource processeur 🙄

Maintenant avec si peu d'éléments donnés dans votre fichier, je ne vois pas ce qu'on peut faire

Bonne chance
Bonjour wDog66,
pourriez vous me proposer une formule plus simple.

en gros dans le sheet 2 on à des personnes qui apparaissent plusieurs fois avec une date passée, en cours et futur et la formule en sheet 1 colonne (G,H) récupère les dates en cours du sheet2 colonne (E,F).
 

alexga78

XLDnaute Occasionnel
Bonjour @Jorelle27, le forum,

un essai par Power Query si j'ai bien compris...

PowerQuery:
let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    Cols = let x = Table.ColumnNames(Source) in {x} & {List.InsertRange(x,3,{"Futur Contrat", "Statut"})},
    #"Grouped Rows" = Table.Group(Source, List.Transform({0,1,2}, each Cols{0}{_}), {{"Custom", each
                      let x = Table.SelectRows(_, (y)=> Record.Field(y, Cols{0}{5}) > DateTime.LocalNow()) in
                        if Table.RowCount(x) > 1 then
                        List.InsertRange(Table.ToRows(Table.SelectRows(x, (z)=> Record.Field(z, Cols{0}{5}) = List.Min(Table.Column(x, Cols{0}{5})))){0},3,{"*","actif"})
                        else
                      List.InsertRange(Table.ToRows(x){0},3,{null,"actif"})
                      }})[Custom],
    Result = Table.Combine(List.Transform(#"Grouped Rows", each Table.FromRows({_},Cols{1})))
in
    Result

Cordialement,
 

Pièces jointes

  • gestion de user et contrat1.xlsx
    20.7 KB · Affichages: 3

AtTheOne

XLDnaute Accro
Supporter XLD
Bonjour à toutes & à tous, bonjour @Jorelle27
Je suis sur mon téléphone, donc c'est un peu galère, je n'ai pas épluché tous les post du fil.
Je te propose une version sans macro,
en transformant tes listes en tableaux structurés et en ajoutant une colonne "ligne".
Regarde si avec tes données réelles ça rame toujours ...
À bientôt
 

Pièces jointes

  • gestion de user et contrat AtTheOne.xlsm
    24.6 KB · Affichages: 2

Gégé-45550

XLDnaute Accro
Bonjour la team,
ça fait des mois que je travail sur ce fichier il marche mais avec plus de données le processeur atteint 100.

je vous expliques : mon fichier récupère les dates de contrat en court des employers dans le sheet 2--->sheet 1
et affiche une Etoile (*) en colonne D du sheet 1 si un employé à un contrat futur.

pour l'affichage des date j'ai utilisé une formule excel car j'ai pas pu le faire en VBA
pour l'affichage de l'Etoile j'ai utilisé du VBA

j'aurais besoin de votre expertise pour une solution plus légère, Merci
Bonjour,
Une proposition en PJ, la table de l'onglet "management des contrats" a été transformée en tableau structuré et les espaces inutiles des titres supprimés.
Voir l'onglet "Userdata".
Cordialement,
 

Pièces jointes

  • gestion de user et contrat1_GG1.xlsm
    38.8 KB · Affichages: 9

Jorelle27

XLDnaute Nouveau
Bonjour à toutes & à tous, bonjour @Jorelle27
Je suis sur mon téléphone, donc c'est un peu galère, je n'ai pas épluché tous les post du fil.
Je te propose une version sans macro,
en transformant tes listes en tableaux structurés et en ajoutant une colonne "ligne".
Regarde si avec tes données réelles ça rame toujours ...
À bientôt
Bonjour AtTheOne,
merci pour ton retour ça marche par contre mon code vba pour bloquer les doublons sur la colonne uid et pour l'affichage de l'Etoile ne marche plus pour le tableau
 

Jorelle27

XLDnaute Nouveau
Bonjour,
Une proposition en PJ, la table de l'onglet "management des contrats" a été transformée en tableau structuré et les espaces inutiles des titres supprimés.
Voir l'onglet "Userdata".
Cordialement,
Bonjour Gégé-45550,
merci pour ton retour ça marche aussi mais le blocage des doublons ne marche plus et l'Etoile par contre doit etre devant le prénom.

cordialement
 

Jorelle27

XLDnaute Nouveau
Bonjour @Jorelle27, le forum,

un essai par Power Query si j'ai bien compris...

PowerQuery:
let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    Cols = let x = Table.ColumnNames(Source) in {x} & {List.InsertRange(x,3,{"Futur Contrat", "Statut"})},
    #"Grouped Rows" = Table.Group(Source, List.Transform({0,1,2}, each Cols{0}{_}), {{"Custom", each
                      let x = Table.SelectRows(_, (y)=> Record.Field(y, Cols{0}{5}) > DateTime.LocalNow()) in
                        if Table.RowCount(x) > 1 then
                        List.InsertRange(Table.ToRows(Table.SelectRows(x, (z)=> Record.Field(z, Cols{0}{5}) = List.Min(Table.Column(x, Cols{0}{5})))){0},3,{"*","actif"})
                        else
                      List.InsertRange(Table.ToRows(x){0},3,{null,"actif"})
                      }})[Custom],
    Result = Table.Combine(List.Transform(#"Grouped Rows", each Table.FromRows({_},Cols{1})))
in
    Result

Cordialement,
bonjour alexga78 merci pour ton retour mais je n'ai pas power query
 

AtTheOne

XLDnaute Accro
Supporter XLD
re,
pour info le plus important c'est bloquer les doublons, date de debut et de fin du contrat en cours et * pour les contrats futur.
  • Pour les doublons "uid" de la feuille "Userdata" je le fait avec les validations de données (en utilisant une formules et en ayant créé un nom "lst_uid" qui pointe vers la colonne uid du tableau des Userdata)
  • Pour les astérisques pour les futurs contrats je le traite par formules.
  • Pour les dates, voudrais-tu préciser ta pensée j'imagine que cela doit être fait dans la feuille "management des contrats" car la feuille "Userdata" ne fait que reprendre les dates trouvée dans la feuille management. Pour l'instant tu n'as aucune macro qui gère cela.

Vois le fichier joint qui traite les deux premiers points
A bientôt

EDIT :
  • Pour les dates, voudrais-tu préciser ta pensée j'imagine que cela doit être fait dans la feuille "management des contrats" car la feuille "Userdata" ne fait que reprendre les dates trouvée dans la feuille management. Pour l'instant tu n'as aucune macro qui gère cela.
Je n'ai rien dit, j'ai vu ton affichage en rouge sur la feuille de management ... ;)
 

Pièces jointes

  • gestion de user et contrat AtTheOne 1.xlsm
    20.8 KB · Affichages: 6
Dernière édition:

Statistiques des forums

Discussions
313 769
Messages
2 102 234
Membres
108 181
dernier inscrit
Chr1sD