OVH Cloud OVH Cloud

Macro ms project: suivre l'avancement des taches par ressource

1 réponse
Avatar
Cosmocat
Bonjour =E0 tous,
Voici une macro bien pratique pour suivre l'avancement des taches par
ressource.
La proc prend en entr=E9e la plage de date =E0 exporter. le fichier
g=E9n=E9r=E9 fait apparaitre:par ressource
-Toutes les taches non termin=E9es meme si elles sont en amont de la
plage
-Toutes les taches qui sont en cours dans la plage
L'export est fait en format texte avec la virgule comme s=E9parateur
pour l'utiliser dans excel: fichier/ouvrir: type de fichier txt, type
de donn=E9es d=E9limit=E9, s=E9parateur virgule.
Il propose le nom de la tache, la date de d=E9but, la date de fin et
l'avancement de la tache en pourcentage....Tres pratique pour les
r=E9unions de suivi....
En cadeau, il y a une fonction qui permet de convertir un num=E9ro de
semaine en date du lundi corresponant



Private Function FirstDateOfWeek(ByRef iYear As Integer, ByRef iWeek As

Integer, Optional ByRef FirstDayOfWeek As VbDayOfWeek =3D
VbDayOfWeek.vbSunday) As Date
'Cette fonction permet de convertir un num=E9ro de semaine en jour de la
semaine

FirstDateOfWeek =3D DateSerial(iYear, 1, 1)
If Weekday(FirstDateOfWeek, FirstDayOfWeek) <> 1 Then
FirstDateOfWeek =3D FirstDateOfWeek + (8 - Weekday(FirstDateOfWeek,
FirstDayOfWeek))
End If
If (iWeek > 1) Then
FirstDateOfWeek =3D FirstDateOfWeek + (7 * (iWeek - 1))
End If
End Function


Sub export_suivi_excel(d1 As Date, d2 As Date)
Open "c:\temp\exportproject.txt" For Output As #1

Dim aux1 As ligne_info
Dim indice_table As Integer
Dim indice_tache As Integer
Dim r As Resource
Dim t As Task
Dim ddt As Date
Dim dft As Date
For Each r In ActiveProject.Resources
ReDim tab_taches(100) As ligne_info
'Initialisations
indice_tache =3D 1
Print #1, r.name
' Recherche des taches pour cette ressource
For Each t In ActiveProject.Tasks
' collecte de l'ensemble des taches
If Not t Is Nothing Then
If InStr(1, Trim(t.ResourceNames), Trim(r.name)) <> 0 Then
Debug.Print t.name
ddt =3D t.Start
dft =3D t.Finish
avancement =3D t.PercentComplete
ok =3D False
If avancement <> 100 And dft <=3D d2 Then ok =3D True
If ddt <=3D d1 And dft <=3D d2 And avancement <> 100 Then
ok =3D True
If ddt >=3D d1 And ddt <=3D d2 Then ok =3D True

If ok Then
tab_taches(indice_tache).nom =3D t.name
tab_taches(indice_tache).debut =3D t.Start
tab_taches(indice_tache).fin =3D t.Finish
tab_taches(indice_tache).avancement =3D
t=2EPercentComplete
indice_tache =3D indice_tache + 1
Debug.Print t.name
End If
End If
End If
Next t
' tri des taches par date
For j =3D 1 To indice_tache
For i =3D indice_tache - 1 To j Step -1
If tab_taches(i).debut < tab_taches(i - 1).debut Then
aux1 =3D tab_taches(i)
tab_taches(i) =3D tab_taches(i - 1)
tab_taches(i - 1) =3D aux1
End If
Debug.Print tab_taches(1).nom
Next i
Next j
' ecriture des taches dans le fichier
For i =3D 1 To indice_tache - 1
chaine =3D ","
chaine =3D chaine + tab_taches(i).nom + ","
chaine =3D chaine + Format(tab_taches(i).debut, "dd/mm/yy") + ","
chaine =3D chaine + Format(tab_taches(i).fin, "dd/mm/yy") + ","
chaine =3D chaine + tab_taches(i).avancement + "%,"
Print #1, chaine
Next i
Next r
Close 1
End Sub

1 réponse

Avatar
Jinroh
Bonjour

effectivement cela à l'air intéressant. Je vais le regarder de plus près et
si tout est correct je l'adapterai aux normes standards d'échanges de
données, soit : en XML.

Je posterai le résultat dès que je pourrai (j'ai peu de temps pour moi ces
temps-ci).

Cordialement

"Cosmocat" wrote:

Bonjour à tous,
Voici une macro bien pratique pour suivre l'avancement des taches par
ressource.
La proc prend en entrée la plage de date à exporter. le fichier
généré fait apparaitre:par ressource
-Toutes les taches non terminées meme si elles sont en amont de la
plage
-Toutes les taches qui sont en cours dans la plage
L'export est fait en format texte avec la virgule comme séparateur
pour l'utiliser dans excel: fichier/ouvrir: type de fichier txt, type
de données délimité, séparateur virgule.
Il propose le nom de la tache, la date de début, la date de fin et
l'avancement de la tache en pourcentage....Tres pratique pour les
réunions de suivi....
En cadeau, il y a une fonction qui permet de convertir un numéro de
semaine en date du lundi corresponant



Private Function FirstDateOfWeek(ByRef iYear As Integer, ByRef iWeek As

Integer, Optional ByRef FirstDayOfWeek As VbDayOfWeek > VbDayOfWeek.vbSunday) As Date
'Cette fonction permet de convertir un numéro de semaine en jour de la
semaine

FirstDateOfWeek = DateSerial(iYear, 1, 1)
If Weekday(FirstDateOfWeek, FirstDayOfWeek) <> 1 Then
FirstDateOfWeek = FirstDateOfWeek + (8 - Weekday(FirstDateOfWeek,
FirstDayOfWeek))
End If
If (iWeek > 1) Then
FirstDateOfWeek = FirstDateOfWeek + (7 * (iWeek - 1))
End If
End Function


Sub export_suivi_excel(d1 As Date, d2 As Date)
Open "c:tempexportproject.txt" For Output As #1

Dim aux1 As ligne_info
Dim indice_table As Integer
Dim indice_tache As Integer
Dim r As Resource
Dim t As Task
Dim ddt As Date
Dim dft As Date
For Each r In ActiveProject.Resources
ReDim tab_taches(100) As ligne_info
'Initialisations
indice_tache = 1
Print #1, r.name
' Recherche des taches pour cette ressource
For Each t In ActiveProject.Tasks
' collecte de l'ensemble des taches
If Not t Is Nothing Then
If InStr(1, Trim(t.ResourceNames), Trim(r.name)) <> 0 Then
Debug.Print t.name
ddt = t.Start
dft = t.Finish
avancement = t.PercentComplete
ok = False
If avancement <> 100 And dft <= d2 Then ok = True
If ddt <= d1 And dft <= d2 And avancement <> 100 Then
ok = True
If ddt >= d1 And ddt <= d2 Then ok = True

If ok Then
tab_taches(indice_tache).nom = t.name
tab_taches(indice_tache).debut = t.Start
tab_taches(indice_tache).fin = t.Finish
tab_taches(indice_tache).avancement > t.PercentComplete
indice_tache = indice_tache + 1
Debug.Print t.name
End If
End If
End If
Next t
' tri des taches par date
For j = 1 To indice_tache
For i = indice_tache - 1 To j Step -1
If tab_taches(i).debut < tab_taches(i - 1).debut Then
aux1 = tab_taches(i)
tab_taches(i) = tab_taches(i - 1)
tab_taches(i - 1) = aux1
End If
Debug.Print tab_taches(1).nom
Next i
Next j
' ecriture des taches dans le fichier
For i = 1 To indice_tache - 1
chaine = ","
chaine = chaine + tab_taches(i).nom + ","
chaine = chaine + Format(tab_taches(i).debut, "dd/mm/yy") + ","
chaine = chaine + Format(tab_taches(i).fin, "dd/mm/yy") + ","
chaine = chaine + tab_taches(i).avancement + "%,"
Print #1, chaine
Next i
Next r
Close 1
End Sub