Créer un Event Handler dans Project Professional
Bonjour,
Recevant régulièrement des demandes pour effectuer des tâches basées sur des évènements dans Project Professional, telle qu’afficher un message lorsqu’une tâche est supprimée, je vous propose un article qui vous permettra de réaliser cela.
Tout d’abord, il faut savoir que le modèle objet VBA de Project Professional propose un certain nombre d’évènements sur lesquels il est possible de déclencher une action.
Par exemple, si vous désirez déclencher une action sur un évènement associé au projet, vous avez accès à ces évènements par défaut :
Dans l’Explorateur d’Objets VBA, les évènements associés à des objets ou des collections d’objets sont représentés par un petit éclair :
Si vous programmez sous Project Server, vous connaissez certainement les Event Handlers qui vous permettent d’associer des actions à des évènements proposés en standard dans le modèle objet de PSI (ou PFDS pour les plus anciens) Cette solution existe aussi dans Project Professional et c’est cela que je veux vous montrer à travers un exemple concret.
La problématique est la suivante: Comment afficher un message qui interdit la suppression d’une tâche lorsque celle-ci possède une Planification Initiale (Baseline)?
Tout d’abord, il est utile de préciser que les évènements disponibles appartiennent à la classe Application. Pour les visualiser, le plus simple est d’utiliser l’Explorateur d’Objets VBA et de sélectionner la classe Application:
Dans mon exemple, le code que je souhaite ajouté doit se déclencher avant que la tâche ne soit supprimée. Je vais donc utiliser l’évènement ProjectBeforeTaskChange.
Je vais donc commencer par créer mon Module de Classe. Pour cela, j’ajoute mon Module de Classe dans mon projet :
Dans les propriétés de ce module, je change le nom (“Class1”) par un nom plus explicite tel que EventClassDeleteTask :
Puis, j’ajoute le code suivant :
Ce qu’il faut absolument retenir est que le Module de Classe doit absolument être construit de cette manière:
Public WithEvents App As Application
Public WithEvents Proj As Project
Private Sub App_event
Votre code
End Sub
Une fois le Module de Classe est créé et que vous avez testé le code, il faut qu’il soit initialiser à l’ouverture du projet. Pour cela, il suffit d’utiliser l'évènement Open de l’objet Project de la manière suivante :
1. Dans le panneau de gauche, double-cliquez sur ThisProject
2. Insérez le code d’initialisation du Module de Classe :
Il vous suffit ensuite de sauvegarder le projet, de le fermer puis de le rouvrir pour que le code soit effectif.
Tout ceci peut bien sûr se faire dans l’Enterprise Global Template, si vous souhaitez que tous les utilisateurs aient accès à votre code. La procédure à suivre est exactement la même excepté que vous devez ouvrir l’Enterprise Global en lecture-écriture dans Project Professional avant d’y insérer votre code.
Pour de plus amples informations sur la programmation dans Project et Project Server, je vous conseille la documentation des différents Kit de Développement disponibles sur le site MSDN:
N’hésitez à commenter cet article et à partager vos expériences.
Bonne journée,
Marc Biarnès
Comments
- Anonymous
January 01, 2003
Merci Marc Pour aller au bout de cette logique, on peut aussi verrouiller ce type d'évènements: Projectbeforeresourcedelete ProjectBeforeTaskDelete pour l'ensemble du Baseline work de 1 à 10. Il peut être aussi utile de verrouiller l'édition manuelle de ces champs en créant un event Handler sur ce type d'évènements: ProjectBeforeTaskChange ProjectBeforeAssignmentChange ProjectBeforeResourceChange Avec un test du type: If Field = PjField.pjResourceBaselineWork Then MsgBox ("Cannot change baseline work """ & res.Name & """ because of work on" & WorkOnBaseline)