Eclatement de fichiers en plusieurs et utlisation de fonctions personnalis
Bonjour,
J’ai deux fonctions personnalisées.
- Total_Heures_Collaborateur_Tâches(Feuille_Mois As String, Collaborateur As String, Tâches As String)
- Function Total_Heures_Cumulees_Collaborateur_Tâches(Collaborateur As String, Tâches As String)
J’ai un planning des collaborateurs par mois contenu dans un classeur Excel. Chaque mois est dans une feuille à part.
J’ai réussi à faire une macro qui me permet de choisir le mois (donc la feuille) sur lequel je veux filtrer et créer un fichier par collaborateur.
Par la suite dans le même fichier crée pour le collaborateur, j’ai inséré un tableau rempli à l’aide des deux fonctions personnalisées citées plus haut. J’utilise un tableau pré rempli avec les taches qui existent dans le classeur. Le nombre de tâches sera le même pour tous les collaborateurs pour un export (lancement de la (lors d’un export ultérieur, je peux avoir 5 ou 10). Donc je fais ce travail bien avant de rentrer dans une boucle. C’est le remplissage du tableau que je fais dans la boucle en lui passant les arguments : collaborateurs et tâches.
Cela fonctionne assez bien, mais je me dis que le programme peut gagner en performance en utilisant un tableau pour stocker les tâches, les collaborateurs et le mois afin de remplir la trame virtuellement. Mais comment faire svp.
Je vous joins le fichier avec le code.
Autres Questions:
- J’ai fait mis un test pour ne faire le classeur que quand le résultat de mon filtre fait plus d’1 ligne. (1 ligne = collaborateur non planifié, donc inutile de faire un classeur pour lui, il serait de toute façon vide).Depuis que j’ai rajouté certains lignes, ce test n’est plus pris en compte, la macro fait en effet tous les collaborateurs. Pouvez-vous svp m’aider à trouver la solution ?
- Après l’insertion de la trame remplie à l’aide des fonctions personnalisées, je voudrais insérer automatique un graphique qui met en exergue les tâches avec les volumes horaires du collaborateur. L’emplacement, en haut à gauche (à partir de A1) Avez-vous svp une idée de mettre dans une macro ?
Je vous joins le classeur qui contient les feuilles planning mois
Et aussi un des fichiers résultant de l'éclatement.
Je vous remercie pour votre aide.
Bonjour,
QUelqu'un pour m'aider à simplifier et rendre ce code plus performant.
Le fichier est joint et l'explication plus bas.
Merci
Sub Creation_Classeur_Planning_Collaborateur()
Dim Fichier As String
Dim Filtre As String
Dim i As Long
Dim Feuille As String
Dim Ws As Worksheet
Dim x As Long
Dim NbreTaches As Long
Dim Tâche1 As String, Tâche2 As String, Tâche3 As String, Tâche4 As String, Tâche5 As String
Dim Tâche6 As String, Tâche7 As String, Tâche8 As String, Tâche9 As String, Tâche10 As String
Dim Tâche11 As String, Tâche12 As String, Tâche13 As String, Tâche14 As String, Tâche15 As String
'récuperer les tâches depuis la feuille F.Dossier pour les coller dans la feuille Sauvegarde_Export
ThisWorkbook.Sheets("Chemins").Range("L45:Z45").ClearContents
ThisWorkbook.Sheets("F.Dossiers").Activate
Range("G6").Select
Range(Selection, Selection.End(xlToRight)).Select
'on recupère le nombre tâches disponibles
'Je pense utiliser le nombre de tâches pour connaitre la dimension de mon tableau
NbreTaches = Application.WorksheetFunction.CountA(Selection)
Selection.Copy
ThisWorkbook.Sheets("Chemins").Activate
Range("L45").Select
Selection.PasteSpecial
'NB: comme je récupère le nombre de tâches qui sera le même pour tout le monde, je le fais à ce niveau
'avant de rentrer dans la boucle
'J'affecte mes tâches à mes variables
'comme je peux en avoir 3 ou 15 , ce serait bien de passer par un tableau
'PBM: je ne sais pas comment faire
Tâche1 = Range("I45").Value
Tâche2 = Range("J45").Value
Tâche3 = Range("K45").Value
Tâche4 = Range("L45").Value
Tâche5 = Range("M45").Value
Tâche6 = Range("N45").Value
Tâche7 = Range("O45").Value
Tâche8 = Range("P45").Value
Tâche9 = Range("Q45").Value
Tâche10 = Range("R45").Value
Tâche11 = Range("S45").Value
'Boucle et compteur sur les collaborateurs existants
For i = 6 To ThisWorkbook.Worksheets("F.Collaborateurs").Range("E" & Rows.Count).End(xlUp).Row
'le nom du classeur ' nom du collaborateur
Fichier = ThisWorkbook.Worksheets("F.Collaborateurs").Range("E" & i).Value
'la valeur du filtre 'nom du collaborateur
Filtre = ThisWorkbook.Worksheets("F.Collaborateurs").Range("E" & i).Value
ThisWorkbook.Activate
'Passer les paramètres pour calculer les heures par tâches (mes fonctions)
'Je précise sur quelle feuille (mois) , je souhaite faire mes opérations
Feuille = ThisWorkbook.Sheets("Chemins").Range("B15").Value
'Dans mon petit encadré qui me sert de trame pour passer les arguments de mes fonctions,
'Je postionne mes arguments
ThisWorkbook.Sheets("Chemins").Range("H46").Value = Feuille
ThisWorkbook.Sheets("Chemins").Range("H45").Value = Fichier
'Utilisation des fonctions personnalisées pour remplir le tableau
'pour le copier et le coller dans le classeur crée
ThisWorkbook.Sheets("Chemins").Activate
'remplissage avec les fonctions MOIS, ligne 46
Range("I46").Value = Total_Heures_Collaborateur_Tâches(Feuille, Fichier, Tâche1)
Range("J46").Value = Total_Heures_Collaborateur_Tâches(Feuille, Fichier, Tâche2)
Range("k46").Value = Total_Heures_Collaborateur_Tâches(Feuille, Fichier, Tâche3)
Range("l46").Value = Total_Heures_Collaborateur_Tâches(Feuille, Fichier, Tâche4)
Range("M46").Value = Total_Heures_Collaborateur_Tâches(Feuille, Fichier, Tâche5)
Range("N46").Value = Total_Heures_Collaborateur_Tâches(Feuille, Fichier, Tâche6)
Range("O46").Value = Total_Heures_Collaborateur_Tâches(Feuille, Fichier, Tâche7)
Range("P46").Value = Total_Heures_Collaborateur_Tâches(Feuille, Fichier, Tâche8)
Range("Q46").Value = Total_Heures_Collaborateur_Tâches(Feuille, Fichier, Tâche9)
Range("R46").Value = Total_Heures_Collaborateur_Tâches(Feuille, Fichier, Tâche10)
Range("S46").Value = Total_Heures_Collaborateur_Tâches(Feuille, Fichier, Tâche11)
'remplissage avec les fonctions CUMULEES, ligne 47
Range("I47").Value = Total_Heures_Cumulees_Collaborateur_Tâches(Fichier, Tâche1)
Range("J47").Value = Total_Heures_Cumulees_Collaborateur_Tâches(Fichier, Tâche2)
Range("k47").Value = Total_Heures_Cumulees_Collaborateur_Tâches(Fichier, Tâche3)
Range("l47").Value = Total_Heures_Cumulees_Collaborateur_Tâches(Fichier, Tâche4)
Range("M47").Value = Total_Heures_Cumulees_Collaborateur_Tâches(Fichier, Tâche5)
Range("N47").Value = Total_Heures_Cumulees_Collaborateur_Tâches(Fichier, Tâche6)
Range("O47").Value = Total_Heures_Cumulees_Collaborateur_Tâches(Fichier, Tâche7)
Range("P47").Value = Total_Heures_Cumulees_Collaborateur_Tâches(Fichier, Tâche8)
Range("Q47").Value = Total_Heures_Cumulees_Collaborateur_Tâches(Fichier, Tâche9)
Range("R47").Value = Total_Heures_Cumulees_Collaborateur_Tâches(Fichier, Tâche10)
Range("S47").Value = Total_Heures_Cumulees_Collaborateur_Tâches(Fichier, Tâche11)
'Range("I47").Value = Total_Heures_Productives_Cumulees_Collaborateur(Fichier)
Set Ws = Sheets(Feuille)
Ws.Activate
'Pour faire que les collaborateurs qui ont été planifiés
x = [=subtotal(3,D8:D100)]
If x > 1 Then
ActiveSheet.Range("$D$8:$AL$2000").AutoFilter Field:=2, Criteria1:=Filtre
Range("D7").Select
ActiveCell.CurrentRegion.Select
Selection.Copy
Set Wbk = Workbooks.Add
Wbk.Activate
Range("D8").Select
Selection.PasteSpecial
Columns("F:AL").Select
Selection.ColumnWidth = 5
Range("R6").Value = "PLANNING " & Ws.Name & "" & Fichier
ThisWorkbook.Sheets("Chemins").Activate
Range("H45").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Wbk.Activate
Range("E2").Select
Selection.PasteSpecial
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Worksheets("Chemins").Range("B18").Value & _
ThisWorkbook.Worksheets("Chemins").Range("B19").Value & "" & Ws.Name & "" & Fichier
Wbk.Close
Else
End If
Next i
Set Wbk = Nothing
Set Ws = Nothing
Selection.AutoFilter
End Sub
Bonjour,
J’ai deux fonctions personnalisées.
- Total_Heures_Collaborateur_Tâches(Feuille_Mois As String, Collaborateur As String, Tâches As String)
- Function Total_Heures_Cumulees_Collaborateur_Tâches(Collaborateur As String, Tâches As String)
J’ai un planning des collaborateurs par mois contenu dans un classeur Excel. Chaque mois est dans une feuille à part.
J’ai réussi à faire une macro qui me permet de choisir le mois (donc la feuille) sur lequel je veux filtrer et créer un fichier par collaborateur.
Par la suite dans le même fichier crée pour le collaborateur, j’ai inséré un tableau rempli à l’aide des deux fonctions personnalisées citées plus haut. J’utilise un tableau pré rempli avec les taches qui existent dans le classeur. Le nombre de tâches sera le même pour tous les collaborateurs pour un export (lancement de la (lors d’un export ultérieur, je peux avoir 5 ou 10). Donc je fais ce travail bien avant de rentrer dans une boucle. C’est le remplissage du tableau que je fais dans la boucle en lui passant les arguments : collaborateurs et tâches.
Cela fonctionne assez bien, mais je me dis que le programme peut gagner en performance en utilisant un tableau pour stocker les tâches, les collaborateurs et le mois afin de remplir la trame virtuellement. Mais comment faire svp.
Je vous joins le fichier avec le code.
Autres Questions:
- J’ai fait mis un test pour ne faire le classeur que quand le résultat de mon filtre fait plus d’1 ligne. (1 ligne = collaborateur non planifié, donc inutile de faire un classeur pour lui, il serait de toute façon vide).Depuis que j’ai rajouté certains lignes, ce test n’est plus pris en compte, la macro fait en effet tous les collaborateurs. Pouvez-vous svp m’aider à trouver la solution ?
- Après l’insertion de la trame remplie à l’aide des fonctions personnalisées, je voudrais insérer automatique un graphique qui met en exergue les tâches avec les volumes horaires du collaborateur. L’emplacement, en haut à gauche (à partir de A1) Avez-vous svp une idée de mettre dans une macro ?
Je vous joins le classeur qui contient les feuilles planning mois
Eclatement de fichiers en plusieurs et utlisation des fonctions personnalisées et grahiques.xlsm
Et aussi un des fichiers résultant de l'éclatement.
PlanningJanvierANTA.xlsx
Je vous remercie pour votre aide.