Feb 06 2022 09:00 PM
Bonjour,
J'ai un problème fort simple, mais que je n'arrive pas à résoudre en VBA.
J'ai une ressource, on va dire Toto
J'ai une autre ressource, on va dire Tutu
Je voudrais transférer les données Réels de Toto vers Tutu avec un script VBA.
Aujourd'hui, j'y parviens avec des boucles sur les affectations et les données réelles dans le temps (TimeScaleDate) de Toto, mais ça prend une éternité.
Est-ce qu'il existe une façon simple d'y parvenir?
Merci par avance,
Feb 08 2022 07:39 AM - edited Feb 08 2022 12:09 PM
pascalito,
It depends. If for example Toto is no longer available (e.g. left the company), then it could be as simple as replacing Toto on the Resource Sheet with Tutu (i.e. change the resource name).
However, if Toto is still active elsewhere in your plan you will need to "capture" Toto's assignment information on each task and switch that over to Tutu.
If Toto is the only resource assigned to a task, then capturing his assignment units and actual work, if any should be all you need to make the transfer. Then delete Toto as the assigned resource, and add Tutu as the assigned resource using the captured assignment units and actual work.
If multiple resources are assigned to a task and Toto is one of them, you will need to capture Toto's assignment units, actual work, and assignment start and finish. Then delete Toto's assignment, add Tutu as a resource using the captured assignment data.
If Toto's assignment is non-linear (i.e. contoured) and you want to replicate that contour for Tutu, then you will have to make the transfer period by period using timescaled data. But if Toto's assignments are all linearly spread over the task duration, then the above simpler approaches should get you there.
Let me know.
John
Feb 08 2022 07:04 PM
Bonjour John,
C'est hélas bien ce que je craignais, dans le cas d'utilisation qui m'intéresse, je cherche à conserver les données de notre ami Toto parce que sa définition change, e.g. nouveau rôle, et donc pour préserver ces caractéristiques, je crée une copie de Toto dans une nouvelle fiche ressource, que j'appelle Tutu
Je transfère tous les réels de Toto sous Tutu. Pour les projets qui sont terminés, j'ai trouvé beaucoup plus rapide d'ouvrir les plans et de procéder à un remplacement de ressource Toto par Tutu. Ce qui se fait en un éclair.
Par contre, pour les projets en cours, j'utilise un script VBA, je balaye toutes les tâches de Toto, je crée une nouvelle affectation pour Tutu, puis après je boucle dans le temps depuis le début de l'affectation jusqu'à la date effective, je mets les réels pour ce jour dans la nouvelle affectation et j'efface les réels de l'ancienne affectation.
Ça marche très bien, au détail près que ça prend une éternité, à chaque transfert le statut passe de Prêt à Occupé. Et j'aurais aimé accélérer le transfert.
Feb 09 2022 07:30 AM
Feb 09 2022 08:23 AM
Feb 09 2022 08:44 AM
Feb 09 2022 09:34 AM
@John-project Thanks, Let me know,
Feb 09 2022 05:46 PM
Feb 09 2022 07:55 PM
Solution
Thanks for your help, I've tight schedule to respect, and have no time for translating and editing code to make it smaller.
I guess, I'll have to take another approach that is less tedious, althought it might require much more manual editing.
Feb 10 2022 07:03 AM
Feb 10 2022 06:06 PM
Ultimate update
1. There was an error in the code logarithm, the transfer was assumed to go from assignment start (affect.Start) date until the resource change takes effect (Effectif), regardless of the assignment finish date. Therefore, it took very long since we carry over 2018 assignments, which meant 1400 itérations where ca. 40 were required.
2. Optimizing the transfer using .Value, tsv.Value = oldTsv.Value instead of tsv = oldTsv.Value
3. The type of task also impacts the performance, effort driven fixed duration tasks. vs fixed units not effort driven
Althought it is not achieved in a flash, I managed to process 15 projects in an hour, which is acceptable.