Filtrage complexe

Bonjour à tous !

Je suis stagiaire au sein d’un bureau d’études qui m’a attribué la mission d’optimiser un outil de gestion de suivi du temps.

Chaque salarié a alors une feuille qui lui est dédiée où il recense le nombre d’heures effectuées par semaine sur chaque projet. Seulement, certains projets peuvent être compris sur deux années, il faut donc que ces deux années apparaissent et soient remplies jusqu’au moment où la ligne du projet sera complète et alors archivée dans sa totalité.

Mais voici mon problème : étant donné que sur une année il y a 52 semaines, cela me fait des colonnes à rallonge qui ne sont pas pratiques à remplir. J’aimerais soit filtrer soit grouper les 52 semaines par année, c’est-à-dire 2019, 2020, … J’ai tenté de réaliser un filtrage mais cela ne fonctionne pas de la manière dont je m’y suis prise et pour le groupement cela ne me convient pas tel quel puisque ce n’est pas assez compréhensible, il n’y a pas de titre, … Si d’autres solutions sont proposées je suis preneuse aussi !

Vous trouverez ci-joint un extrait de mon outil : sur la Feuil1 j'ai réalisé le groupement, la Feuil2 elle ne comprend aucun groupement ni filtrage, ...

Merci d’avance pour votre aide et l’attention accordée

Belle journée

Bonjour

personnellement je ferais ton tableau transposé.... je m'explique dans les colonnes les noms des projets et en lignes l'années et les numéros des semaines.... même si tu as bcp de projets.... certains sont terminés et donc on pourrait masquer les colonnes des projets terminés... et ne voir que les projets en cours mais toutes les informations seraient présentent...

Fred

encore un petite précision... ensuite au lieu de faire une somme du temps par ligne, faire une somme de temps par colonne... même si les lignes de l'année dernière seront masquées... le calcul tiendra compte du temps passé sur le projet...

Fred

Bonjour,

je suis d'accord avec Fred,

quoique je ferai une base de données : une ligne = 1 projet x 1 imputation

et j'ajoute que pour les calculs il serait plus simple de faire un TCD

@fred2406

Je vais essayer d'orienter le tableau de cette manière mais j'ai peur que cela ne soit pas pratique pour les salariés lors de la saisie.

Je vous tiens au courant et merci pour votre conseil

Pour la saisie, il faudrait dédier un onglet (je préfère plutôt qu'un userform) qui renverrait les valeurs vers la base de données.

Puis pour les projets finalisés je compte archiver ces données dans une autre Feuille, j'ai déjà un peu mon idée là-dessus mais je le verrai plus tard! Mais c'est une idée aussi si je manque de temps pour la finalisation donc merci!

@Steelson

En fait la feuille que j'ai modelée sur mon fichier partagé correspond déjà à l'onglet de saisie.

Les TDC seront réalisés mais plus tard, lors des totaux de l'ensemble des salariés.

ok je vais voir cela

@fred2406

Cela me semble bien compliqué de transposer mon tableau car j'avais oublié d'intégrer un élément, mais il y a également un filtre sur le Type de projet afin d'ordonner les projets et faciliter la saisie. Je vais renvoyer mon document à jour, désolée.

Un bout d'essai pour ma part ...

@Steelson

Merci beaucoup pour ce document, je vais maintenant essayer de comprendre l'ensemble des éléments. Cela répond bien plus efficacement à mon problème ! J'ai un long chemin à faire ... Mais très motivée pour déjà atteindre un tel niveau

Tout est basé sur des macros événementielles qui réagissent à la modification des valeurs d'imputation.

La colonne de droite indique le n° de la ligne de la base de donnée. Si 0, cette ligne n'existe pas encore et dans ce cas elle est créée, sinon la valeur se met à jour dans la base de données. En fin de traitement, on rétablit la formule INDEX/EQUIV.

Une fois la BdD renseignée, on a la synthèse au travers d'un TCD (qui se met à jour lors de l'activation de l'onglet synthèse)

Après, on peut encore peaufiner un peu plus en mettant en place des listes déroulantes pour les projets, le salarié, et les semaines ...

@Steelson

Oui, en explorant l'outil j'ai bien compris le mécanisme et j'envisageais déjà peaufiner les éléments que vous avez évoqués, c'est à dire créer une liste salarié, ...

La seule chose qui reste une énigme c'est réellement votre code VBA (étant complètement débutante sur le sujet) et notamment le fait que malgré une formule renseignée dans une cellule, il est possible de renseigner une donnée (voire même un calcul) qui actualise la BdD et qu'ensuite la formule se régénère.

Serait-il possible que vous m'expliquer étape par étape votre code ?

Je crois avoir compris le début : S'il n'y a pas d'action dans la colonne C alors le code s'arrête.

Sinon la macro événementielle est lancée dans la feuille BdD. Mais je n'arrive pas à suivre les actions qui suivent et j'aimerais apporter des modifications selon mes besoins.

Merci de votre super aide en tout cas !

La seule chose qui reste une énigme c'est réellement votre code VBA (étant complètement débutante sur le sujet) et notamment le fait que malgré une formule renseignée dans une cellule, il est possible de renseigner une donnée (voire même un calcul) qui actualise la BdD et qu'ensuite la formule se régénère.

En effet, la formule est "collante" si je peux dire.

En fait, quand tu rentres une valeur colonne C et à partir de la ligne 8 (condition sur cel.row >=8), la macro regarde la valeur juste à droite de la valeur introduite, cette valeur donne la ligne de la BdD.

Si cette valeur de ligne est égale à 0, la ligne n'existe pas et il l'a crée la fin du tableau i = .Cells(Rows.Count, 1).End(xlUp).Row + 1; sinon il change la valeur sur cette ligne dans l'onglet BdD.

Ensuite, tout simplement, la macro régénère la formule initiale .FormulaR1C1 = "=IFERROR(INDEX(Tableau1[Imputation],RC[1]),0)" que j'ai obtenue par apprentissage. Pourquoi ? tout simplement pour que si tu change le salarié, la semaine ou l'année, les valeurs sont actualisées de fait.

@Steelson

Merci pour toutes ces précieuses infos! Je vais tenter de m'approprier ce code afin de l'adapter à l'ensemble de mes besoins.

Si jamais j'ai besoin d'aide à nouveau concernant ce code serait-il possible de revenir vers toi ?

Belle journée

@Steelson

A quel moment dans ton code VBA fais-tu référence au Nom projet dans la feuille Saisie ? Car j'aimerais également intégrer dans la BdD le Type projet.

Merci d'avance !

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Columns("C")) Is Nothing Then Exit Sub

Application.EnableEvents = False
With Sheets("BdD")
    For Each cel In Intersect(Target, Columns("C"))
        If cel.Row >= 8 Then
            If cel.Offset(0, 1) = 0 Then
                i = .Cells(Rows.Count, 1).End(xlUp).Row + 1
                .Cells(i, 1) = Range("C2")
                .Cells(i, 2) = cel.Offset(0, -1)
                .Cells(i, 3) = Range("C4")
                .Cells(i, 4) = Range("C5")
                .Cells(i, 5) = cel.Value
            Else
                i = cel.Offset(0, 1) + 1
                .Cells(i, 5) = cel.Value
            End If
            cel.FormulaR1C1 = "=IFERROR(INDEX(Tableau1[Imputation],RC[1]),0)"
        End If
    Next
End With
Application.EnableEvents = True

End Sub

La référence au projet se situe ici dans le code

 .Cells(i, 2) = cel.Offset(0, -1)

sachant que le projet est en colonne B, soit colonne -1 par rapport à la valeur d'imputation introduite

@Steelson

Merci beaucoup ! Je vous tiendrai au courant de la suite

A ta disposition.

Je préfère répondre à tes questions au fur et a mesure, je pense que c'est plus formateur.

Rechercher des sujets similaires à "filtrage complexe"