Suivi des actions de Projets

Bonjour,

Si vous êtes dans ce fichier c'est que vous avez débuté une démarche "d'aide" à mon attention.

Même sans résultat, je vous en remercie d'avance.

.

Voici les 4 points sur lesquels je bute actuellement :

.

1/ Onglet 1 Colonne B [Projet & Actions]

Je souhaite que, en cliquant sur une des cellules "Projets & Actions",

cela m'envoi directement dans l'onglet 2 et ait déjà réalisé un filtre sur le projet en question.

Ex : dans l'onglet 1 je cliquai sur "TESTEUR", et j'arrivais dans l'onglet 2 sur un tableau qui était filtré sur "TESTEUR"

Des liens je sais en poser, mais là, je suis incapable de le mettre avec le filtre automatique.

.

2/ Onglet 1 Colonne J et K [Début] et [Fin]

Je souhaite que pour chaque Projet,

dans les cellules de la colonne K ("Fin") soit rapatriée la date la plus tardive qui figure dans l'onglet 2 de ce même projet,

et inversement pour la colonne J (Début)

Ex : si dans l'onglet 2 il y a, pour le Projet "TESTEUR", plusieurs actions différentes qui ont des échéances (colonne C [ Fin ] à des dates différentes,

je souhaite faire remonter la plus tardive (MAX) en colonne K de ce projet.

Ex : si dans l'onglet 2 il y a, pour le Projet "TESTEUR", plusieurs actions différentes qui ont des démarrages (colonne B [ Débuté ] à des dates différentes,

je souhaite faire remonter la date la moins tardive (MIN) en colonne J de ce projet.

.

3/ Onglet 1 Colonne I [Progrès]

J'ai besoin de montrer l'avancé (en barre de progrès).

Toutefois, ayant plusieurs niveaux d'état d'avancement [Débuté] + [En attente info°] + [A la saisie] + [A la validation] + [Terminé],

je me retrouve bloquée !

il faudrait que je puisse diviser l'état d'avancement par le nombre de ligne de tâches,

mais que quoi qu'il en soit,

quand la cellule [@Terminée] est à 100%, alors la barre doit être pleine

mais si le projet est en cours (soit de [ Débuté ] à ( A la validation ] il me semble qu'il faudrait une moyenne des niveaux d'avancement ,

et quand un projet n'est pas débuté (donc 100% dans [@[Pas débuté], alors la barre devrait être à 0%.
.

Le Bonus : si la barre de progrès peut passer du rouge au vert en fonction de l'avancement ce serait génial !

.
Je suis impatiente de vous lire et d'apprendre de nouvelles astuces (formules) excel. Encore merci de votre aide.

Bien à vous.

Alilu

Bonsoir Alilu et bienvenu, bonsoir le forum,

Le code ci-dessous résout les problèmes 1 et 2 par VBA uniquement (j'suis trop nul et j'aime pas en formules !)

Problème 1 au double-clic dans l'Onglet 1
Problème 2 à l'activation de l'onglet 1
problème 3 non résolu...

Le code :

Option Explicit 'oblige à déclarer toutes les variables
Private T1 As ListObject 'déclare la variable T1 (Tableau structuré 1)
Private O2 As Worksheet 'déclare la variable T1 (Onglet 2)
Private T2 As ListObject 'déclare la variable T2 (Tableau structuré 2)

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) 'au double-clic dans l'onglet
Set T1 = Me.ListObjects(1) 'définit le tableau sturcturé T1
Set O2 = Worksheets("2_Détails Actions_2022") 'définit l'onglet O2
Set T2 = O2.ListObjects(1) 'définit le tableau sturcturé T2
'si le double-clic a lieu ailleurs que dans la colonne 1 de T1, sort de la procédure
If Application.Intersect(Target, T1.ListColumns(1).Range) Is Nothing Then Exit Sub
Cancel = True 'annule le mode [Édition] liéau double-clic
T2.Range.AutoFilter 3, Criteria1:=Target.Value 'filtre le tableau structuré T2 avec la cellule cible (cellule double-cliquée) comme critère
O2.Activate 'active l'onglet O2
End Sub

Private Sub Worksheet_Activate() 'à l'activation de l'onglet
Dim TV1 As Variant 'déclare la variable TV1 (Tableau des Valeurs 1)
Dim TV2 As Variant 'déclare la variable TV2 (Tableau des Valeurs 2)
Dim D As Object 'déclare la variable D (Dictionnaire)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Integer 'déclare la variable J (incrément)
Dim TMP As Variant 'déclare la variable TMP (Tableau TeMPoraire)
Dim DMin As Date 'déclare la variable DMin (Date Mini)
Dim DMax As Date 'déclare la variable DMax (date Maxi)

Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
Set T1 = Me.ListObjects(1) 'détinit le tableau structuré T1
Set O2 = Worksheets("2_Détails Actions_2022") 'définit l'onglet O2
Set T2 = O2.ListObjects(1) 'détinit le tableau structuré T2
TV1 = T1.DataBodyRange 'définit le tableau des valeurs TV1
TV2 = T2.DataBodyRange 'définit le tableau des valeurs TV2
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
T2.Range.AutoFilter 'supprime un éventuel filtre dans T2
For I = 1 To UBound(TV1, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV1
    D(TV1(I, 1)) = "" 'alimente le dictionnaire D avec les données en colonne 1 de TV1
Next I 'prochaine ligne de la boucle
TMP = D.Keys 'récupère dans la tableau temporaire TMP la liste des éléments du dictionnaire D sans doublon (le clés)
For J = 0 To UBound(TMP) 'boucle 1 : sur tous les éléments du tableau temporaire TMP
    DMin = DateSerial(3000, 12, 31) 'initialise la date Dmin (31 décembre 3000)
    DMax = DateSerial(1900, 1, 1) 'initialise la date Max (1 janvier 1900)
    'condition 1 : si il existe au moins une occurrence de l'élément J de TMP dans la colonne 3 de T2
    If Not T2.ListColumns(3).Range.Find(TMP(J), , xlValues, xlWhole) Is Nothing Then
        For I = 1 To UBound(TV2, 1) 'boucle 2 : sur toutes les lignes I du tableau des valeurs TV2
            If TV2(I, 3) = TMP(J) Then 'condition 2 : si la donnée ligne I colonne 3 de TV2 est égale à l'élément J de TMP
                'si la date de la donnée ligne I colonne 1 de TV2 est inférieure à DMin, redéfinit DMin
                If CDate(TV2(I, 1)) < DMin Then DMin = CDate(TV2(I, 1))
                'si la date de la donnée ligne I colonne 2 de TV2 est supérieure à DMax, redéfinit DMax
                If CDate(TV2(I, 2)) > DMax Then DMax = CDate(TV2(I, 2))
            End If 'fin de la condition 2
        Next I 'prochaine ligne de la boucle 2
        For I = 1 To UBound(TV1, 1) 'boucle 3 : sur toutes les lignes I du tableau des valeurs TV1
            If TV1(I, 1) = TMP(J) Then 'condition 3 : si la donnée ligne I colonne 1 de TV1 est égale à l'élémnt J de TMP
                T1.DataBodyRange(I, 9) = DMin 'renvoie la date DMin dans la donnée ligne I colonne 9 de T1
                T1.DataBodyRange(I, 10) = DMax 'renvoie la date DMax dans la donnée ligne I colonne 10 de T1
            End If 'fin de la condition 3
        Next I 'prochaine ligne de la boucle 3
    End If 'fin de la condition 1
Next J 'prochain élément du tableau temporaire TMP
Application.ScreenUpdating = True 'affiche les rafraîchissements d'écran
End Sub

merci ThauThème,

Je vais tenter de positionner cela sur mon fichier

(je tatonne en VBA, et préfère les formules que je ne maîtrise pas complètement, la preuve, mais je m'améliore de jour en jour).

Je te dirai si j'ai réussi.

Encore merci

Bien cordialement

Re-bonjour ThauThème,

Ca bug :

image image

Je n'ai peut-être pas fait ce qu'il fallait...

Bonjour,

essayez en remplaçant le "Me" par "Sheets("NomdelaFeuille")"

@ bientôt

LouReeD

Bonsoir le fil, bonsoir le forum,

Merci LouReeD de prendre la relève

Le code était à placer dans le composant Sheet1 (1_Projets_2022) car ce sont les deux événementielles Worksheet_BeforeDoubleClick et Worksheet_Activate. Placé au bon endroit il ne devrait pas planter. Je ne l'avais pas précisé car ton fichier exemple contenait déjà l'événementielle Worksheet_BeforeDoubleClick et je pensais que c'était évident pour toi...

Ton fichier avec le code :

18alilu-ed-v01.xlsm (86.26 Ko)

MERCI ThauThème

tu es super.

Je m'y met d'ici peu, et te fais un point.

Alilu

Merci LouReedD,

je n'avais pas encore eu le temps d'appliquer ta préconisation (trop de travail).

Alilu

Bonsoir ThauThème, bonsoir le forum,

Après plusieurs tests, cela fonctionne bien sur le fichier que tu m'as renvoyé,

mais pas quand je copie colle le code dans mon fichier quotidien,

dans le composant Sheet1 -- Worksheet_BeforeDoubleClick et Worksheet_Activate -- : rien .

Ai-je d'autres manipulations à réaliser ?

Dans l'attente d'une réponse, merci d'avance.

Alilu

Bonsoir,

essayez de lancer ce code et regardez si tout fonctionne à l'issue :

Sub Oups()
    Application.EnableEvents = True
End Sub

@ bientôt

LouReeD

Bonjour LouReeD, bonjour ThauThème,

Manipulation faite : SUPER ça fonctionne !

Je vous remercie tous les deux pour votre super aide.

Alilu

Bonjour,

Merci pour vos remerciements ! Mais tout le travail a été fait par ThauThème ! Bravo à lui donc

@ bientôt

LouReeD

Bonjour le fil, bonjour le forum,

Le travail peut-être, mais c'est bien l'homme qui marche du coté sauvage qui a trouvé la solution !...

Rechercher des sujets similaires à "suivi actions projets"