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.

Rechercher des sujets similaires à "eclatement fichiers utlisation fonctions personnalis"