Import CSV durée en jours calendaires
Bonjour,
Je cherche à importer un fichier CSV qui contient Start_Date et Duration. Le problème est que le champ Duration est exprimé en jours calendaires et non en working days qui est, je crois, le format par défaut de travail sous MS-project.
J'ai essayé 2 méthodes mais je ne sais pas quelle est la meilleure et s'il existe une méthode plus appropriée*...
(*) je peux aussi essayer de changer mon fichier .csv en entrée pour transformer la durée calendaire en nombre de working days mais il me faudrait alors aller sur un forum Python :P
1ère méthode: créer un calendrier '7days', allouer une ressource qui travaille 7 jours sur 7 (pas très sympa...). Voir le code ci-dessous. Je ne comprends pas pourquoi MS-project n'alloue pas toujours les ressources à 100% de leur temps. Si j'affiche 'Resource Names', je vois parfois rC[45%]... Faut-il changer le code pour forcer une allocation à 100%? Si oui, je ne sais pas quel champ(s) positionner
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
|
' aSetCalendar
' define '7days' calendar
'
Sub aSetCalendar()
On Error GoTo aSetCalendarExit:
BaseCalendarCreate Name:="7days", FromName:="Standard"
' set Sunday as working day
'
ActiveProject.BaseCalendars("7days").WeekDays(1).Shift1.Start = "08:00"
ActiveProject.BaseCalendars("7days").WeekDays(1).Shift1.Finish = "12:00"
ActiveProject.BaseCalendars("7days").WeekDays(1).Shift2.Start = "13:00"
ActiveProject.BaseCalendars("7days").WeekDays(1).Shift2.Finish = "14:00"
ActiveProject.BaseCalendars("7days").WeekDays(1).Shift3.Clear
ActiveProject.BaseCalendars("7days").WeekDays(1).Shift4.Clear
ActiveProject.BaseCalendars("7days").WeekDays(1).Shift5.Clear
ActiveProject.BaseCalendars("7days").WeekDays(2).Default
ActiveProject.BaseCalendars("7days").WeekDays(3).Default
ActiveProject.BaseCalendars("7days").WeekDays(4).Default
ActiveProject.BaseCalendars("7days").WeekDays(5).Default
ActiveProject.BaseCalendars("7days").WeekDays(6).Default
' set Saturday as working day
'
ActiveProject.BaseCalendars("7days").WeekDays(7).Shift1.Start = "08:00"
ActiveProject.BaseCalendars("7days").WeekDays(7).Shift1.Finish = "12:00"
ActiveProject.BaseCalendars("7days").WeekDays(7).Shift2.Start = "13:00"
ActiveProject.BaseCalendars("7days").WeekDays(7).Shift2.Finish = "14:00"
ActiveProject.BaseCalendars("7days").WeekDays(7).Shift3.Clear
ActiveProject.BaseCalendars("7days").WeekDays(7).Shift4.Clear
ActiveProject.BaseCalendars("7days").WeekDays(7).Shift5.Clear
Exit Sub
aSetCalendarExit:
End Sub
' aDefineResource
' define a resource 'rC' assigned to '7days' calendar
'
Private Sub aDefineResource(rC As String)
On Error GoTo aDefineResourceExit:
ViewApply Name:="Resource &Sheet"
SelectResourceField Row:=0, Column:="Name"
SetResourceField Field:="Name", Value:=rC
SelectResourceField Row:=0, Column:="Base Calendar"
SetResourceField Field:="Base Calendar", Value:="7days"
SelectResourceField Row:=9, Column:="Group"
ViewApply Name:="&Gantt Chart"
Exit Sub
aDefineResourceExit:
End Sub
' aSetResource
' define a '7days' calendar and a 'rC' resource assigned to '7days'
' assign 'rC' resource to all tasks
'
Sub aSetResources()
Dim t As Task
Dim nT As Integer
Call aSetCalendar
Call aDefineResource("rC")
For Each t In ActiveProject.Tasks
t.ResourceNames = "rC"
Next t
End Sub |
2ème méthode: créer un calendrier '7days', affecter ce calendrier à toutes les tâches du projet. Ici, mon code semble être sans effet. Faut-il forcer un recalcul MS-projet? Si oui, je ne vois pas de fonction calculate() comme sous Excel... Si je fais juste appel à aSetCalendar et que ensuite je fais un double-clic sur une tâche, puis onglet Advanced, je mets Calendar à '7days', cette fois MS-project prend en compte la demande, d'où ma question sur le calculate()
note: le code ci-dessous s'exécute après avoir appelé la macro aSetCalendar définie dans la 1ère méthode
Code:
1 2 3 4 5 6 7 8 9
|
Sub atestSetCalendar()
Dim t As Task
For Each t In ActiveProject.Tasks
s = t.GetField(pjTaskCalendar)
t.SetField FieldID:=pjTaskCalendar, Value:="7days"
Next t
End Sub |
Je tourne un peu en rond là et j'espère que vous allez pouvoir me débloquer...
Merci d'avance!!