Project 2016 : Les macros

Simplifier l'affichage à l'aide d'une macro relative en colonne

TESTEZ LINKEDIN LEARNING GRATUITEMENT ET SANS ENGAGEMENT

Tester maintenant Afficher tous les abonnements
Voyez un exemple d'une macro relative d'ajout de colonnes. Cette macro va permettre à l'utilisateur de choisir où il veut ajouter des colonnes à plusieurs endroits différents.
11:12

Transcription

Nous commençons maintenant l'étude d'un nouveau chapitre, qui est à propos des Macros de type relatives. Alors, pour étudier les Macros relatives, on va commencer par les Macros relatives sur les colonnes. Sachez déjà que globalement les Macros relatives sont plus rares que les Macros absolues. C'est d'ailleurs aussi le même constat que l'on fait souvent dans le logiciel Microsoft Excel. Les Macros relatives de type colonnes, qu'est ce qu'elles ont comme particularité Eh bien c'est que, en fait dans le code, plutôt que d'enregistrer et d'attaquer via le code une colonne par son nom, et bien la colonne sera traitée par son numéro de position dans la table. En d'autres termes, si par exemple, on manipule pendant l'enregistrement d'un Macro la colonne « Durée » qui est ici, qui est la 4ème colonne dans cette table, Et bien si on réexécute la macro plus tard, et qu'à la place de Durée il y a par exemple : « coût restant » Et bien la Macro s'exécutera sur « coût restant » parce que « coût restant », sera la 4ème colonne. Alors là, on va faire un cas courant de Macros relatives sur les colonnes. Imaginez effectivement que dans ce planning de projets nous ayons ici la table d'entrée. Cette table d'entrée a été simplifiée à l'extrême comme vous pouvez le voir, elle n'a seulement que quelques colonnes. Et l'idée c'est que le responsable du modèle et de la communication du bureau de projet nous ait dit : « Ecoutez, vous avez le droit d'ajouter des colonnes, vous les chefs de projet et les responsables d'équipe, où vous voulez dans cette table mais quand vous avez terminé votre travail et que vous échangez ça avec le comité de direction ou un client, ou un fournisseur, vous avez l'obligation, s'il vous plaît, de retirer les colonnes qui sont autres que le standard que vous avez dans le modèle. » Alors là, l'idée, c'est que vos collègues, évidemment, vont vous dire: « oui mais quand même tu pourrais nous faire une Macro. » Et on va leur dire : « Ok, je peux vous faire une Macro, mais à une condition, vu que je ne sais pas faire de VBA, c'est que vous rajoutiez toujours vos colonnes supplémentaires à droite de la colonne de fin ». Et ensuite moi, et bien je vais pouvoir nettoyer ces colonnes automatiquement avec une Macro. Sous entendu évidemment que ce sera une Macro de type relative. Alors, allons-y. On va, ici, dans un premier temps, ajouter quelques colonnes en imaginant qu'on ait des collègues. Donc on va prendre, par exemple, ici « Durée calendaire » comme ceci, on va prendre aussi « Durée calendaire cumulée » et puis on va prendre « Durée cumulée », voilà, comme ceci. Bon après, on peut élargir la table et on avait dit que « Fin », devra toujours être avant les colonnes rajoutées. Donc, on déplace « Fin ». Donc là, on a mis en place un scénario qui est ; Les collègues ont rajouté donc, des colonnes, en un certain nombre, qui peut être variable et nous, on veut faire un Macro qui soit capable de nettoyer cette table pour la remettre dans son etat initial. Alors, on va dans : « Enregistrer une macro » on va l'appeler :« mcr_CleanTable » qui signifie « nettoyer table » on va pas mettre de raccourci clavier comme on l'a déjà mentionner plusieurs fois. On va faire en sorte que la macro suive ici, « ce projet ». Puis, au niveau de la description de la macro, on va mettre par exemple : « Macro nettoyant la table active au-delà de la 7ème colonne » Oui, parce que effectivement, si on compte ici, le nombre de colonnes que l'on a, on a 1, 2, 3, 4, 5, 6 avec la colonne de « Fin » et donc ce qu'il y a, à la 7ème et au-delà de la 7ème, on veut s'en débarrasser. Ensuite, au niveau enregistrement que les lignes sont en « relatif » ou en « absolu » ça nous est égal, parce que de toute façon dans cette macro, on ne va attaquer que des colonnes. Et c'est là que c'est important, c'est qu'on va pas se mettre en « absolu » puisqu'on ne sait pas les colonnes que les collègues vont pouvoir rajouter. Donc l'idée, c'est d'attaquer les colonnes par leur numéro plutôt que par leur nom. Il faut absolument, et on a pas le choix d'attaquer les colonnes par leurs numéros. Et de toutes façons si vous vouliez traiter toutes les colonnes par leurs noms, et bien vous devriez faire une macro qui masque les potentiels un peu plus de 300 colonnes qu'il y a dans Microsoft project. Ce qui est franchement, une horreur à enregistrer. On se met en « Relatif », on fait « OK », on se déplace là où les colonnes sont visibles, on sélectionne les trois colonnes, et on fait un clic droit, et on clique sur « masquer la colonne ». On peut revenir, bien évidemment, sur la première cellule. On arrête l'enregistrement de la macro, et maintenant, on va la tester. Donc première chose qu'on doit tester c'est que, est-ce que la macro fonctionne ou pas quand il n'y a rien qui a été rajouté. Alors, si on va dans : « Afficher les macros » puis qu'on prend « CleanTable » et que l'on fait un « Exécuter », on voit effectivement, qu'elle plante et ça déjà, eh bien c'est pas satisfaisant. Il va falloir que l'on règle ce problème, donc on va cliquer sur « Débogage » et là on lit, on se dit: « Tiens! » OK première ligne où il plante, c'est que, visiblement, il se positionne à la colonne 8 et il ajoute, enfin il sélectionne ou il ajoute à la sélection deux colonnes supplémentaires. Puis là on se dit évidemment, c'est clair que ça va pas fonctionner, parce que comme il n'y a aucune colonne qui a été rajoutée, actuellement derrière dans notre table il essaie de sélectionner des colonnes qui n'existent pas. Donc là, on va arrêter le débogueur en cliquant sur le bouton « Réinitialiser » et là, il faut qu'on trouve une astuce, il faut qu'on se dise il faudrait qu'on puisse détecter le nombre de colonnes qui ont été rajoutées. Alors, pour connaître le nombre de colonnes qui ont été rajoutées, eh bien, il nous suffit de savoir combien de colonnes il y a au total dans la table actuellement, et de soustraire le point de départ de la sélection, qui comme vous pouvez le voir est 8. Donc là, on y va et sachez qu'on est obligé de faire, donc, du VBA, je pense que vous l'aurez compris. On va utiliser une commande qui s'appelle, enfin d'abord qui fait partie de la classe « activeproject », ensuite, il y a dedans une propriété qui s'appelle : « TaskTables » parce qu'effectivement la table entrée est une table de tâches, et ensuite on veut parmi les tables de tâches, prendre la table qui est actuellement dans le projet actif et celle qui est justement active. C'est pour ça qu'on dit dans « l'ActiveProject » la « CurrentTable ». Et on veut compter, donc le nombre de champs qui sont dans cette table. Donc là, on a le nombre de colonnes totale de la table, la chose étant, c'est que le « Additional » c'est pas le nombre de colonnes totale, c'est la différence. Donc, il va falloir que l'on soustrait cette valeur de référence 8 que la macro nous a mis ici. Si maintenant, on ferme l'éditeur VBA et qu'on va tester la macro donc, ici on va prendre donc, un « CleanTable ». et que l'on clique sur « Exécuter », on voit que ça continue à bugger. Et là, la raison elle est simple, pourquoi est-ce qu'il bugge? Parce que, en fait, ce qui se passe, c'est qu'il essaie de supprimer quelque chose qui n'existe pas parce qu'il commence la sélection à 8, or, la colonne 8 n'existe pas. Et il va effectivement jusqu'à 0, mais le problème, c'est le 8. Alors là vous allez me dire, j'ai qu'à mettre 7, il faut surtout pas que je mette 7, sinon c'est la colonne de « Fin » donc vous savez, cette colonne ici, qui s'appelle « Fin » qui fait référence à la date de fin, c'est cette colonne là qui va se masquer pour le coup. Donc, on peut pas mettre 7. Alors, quelle est la solution? C'est de retourner dans notre code VBA, et ici de dire : « Oui bon ouais c'est vrai qu'il y a un cas ou, effectivementm dans tous les cas il y aura une erreur » Parce que là, on gère s'il y a 0 colonne ou 2 colonnes, ou 3, ou 5, ou 10, ou 20 colonnes de rajoutées, mais le fait que si il y a 0 colonne ça on peut pas le gérer, j'ai pas le droit de mettre 7 ici. Donc là, on se dirait : on a qu'à mettre un « On error Resume Next » qui en VBA signifie si il y a une erreur, ignore la ligne d'erreur et continue mais ce qui va se passer, c'est que donc, là, il va planter parce qu'il essaie de sélectionner une colonne 8 qui n'existe pas, et il va sauter cette ligne puisqu'elle va provoquer une erreur et donc, faire un « delete » de la colonne en cours. Et ça, évidemment c'est pas voulu parce que cela va supprimer une des colonnes de notre table, qui risque de ne pas être une des colonnes que nos collègues ont rajouté. Alors, comment faire? Eh bien, l'idée, vous allez me dire, c'est de dire; si il y a une erreur c'est qu'il continue pas, c'est de sortir, oui, mais si on écrit « Exit » qui veut dire « s » en français et que je valide, regardez, le langage VBA me dit ça n'existe pas, C'est soit on fait un « go to » soit on fait un « Resume » et le « Resume » on sait qu'il passe pas. Donc ici, on fait un « go to » et il faut donner un nom au « go to » on va l'appeler « ManageErrors ». Ensuite, plus bas, quand on apprend le VBA, on apprend que juste avant le « End Sub » il faut réécrire le nom du pointeur, du « go to » puis ici, on va dire en langage VBA donc, si il y a une erreur, tu vas à « manageErrors » et qu'est ce que tu fais? Et bien, tu sors de la routine « Exit Sub ». Et ceci va marcher. Effectivement, si on ferme le code VBA, on va dans « Afficher les macros » et que on prend nos « CleanTable » et que on fait un « Exécuter », ici, bon, il dit qu'il y a une erreur parce que j'ai du faire une faute de frappe, donc là « ManageErrors » oui effectivement j'ai fait une faute de frappe, j'ai oublié les deux points, donc, j'ajoute les deux points et je fais un « Executer » Comme vous pouvez voir ça ne tourne plus « Afficher les Macros » « CleanTable » Vous voyez, plus de plantage. Si maintenant, on ajoute des colonnes donc, insérer une colonne, par exemple « Durée calendaire » On ajoute une autre colonne, par exemple « Durée cumulée » Là, vous pouvez voir que j'ai ajouté moins que trois colonnes. Je vais, évidemment, déplacer « Fin » juste après « Début » Puisque c'était une exigence de celui qui est responsable du modèle. maintenant notre Macro doit gérer cette situation, parcequ'elle doit gérer toutes les situations, C'est à dire: le cas où les colonnes ont été rajoutées, ou pas et quelque soit le nombre de colonnes. Donc, là on fait afficher les « Macros » « CleanTable », « Exécuter » Et si on va regarder, effectivement, il n'a supprimé que les deux colonnes En plus, il n'a pas touché à la colonne de « Fin ». Donc voilà, on a réussi notre objectif On a bien une Macro relative uniquement sur les colonnes et qui fonctionne. Mais comme on a pu voir, Sans VBA, c'est en réalité, impossible d'utiliser ces macros relatives dans un cas business, c'est à dire un cas orienté métier.

Project 2016 : Les macros

Automatisez des tâches simples, sans interactions avec l’utilisateur et sans variables, et ce, sans faire de code informatique. Débutez dans le langage de programmation VBA.

2h22 (25 vidéos)
Aucun commentaire n´est disponible actuellement
 
Logiciel :
Spécial abonnés
Date de parution :25 oct. 2016

Votre formation est disponible en ligne avec option de téléchargement. Bonne nouvelle : vous ne devez pas choisir entre les deux. Dès que vous achetez une formation, vous disposez des deux options de consultation !

Le téléchargement vous permet de consulter la formation hors ligne et offre une interface plus conviviale. Si vous travaillez sur différents ordinateurs ou que vous ne voulez pas regarder la formation en une seule fois, connectez-vous sur cette page pour consulter en ligne les vidéos de la formation. Nous vous souhaitons un excellent apprentissage avec cette formation vidéo.

N'hésitez pas à nous contacter si vous avez des questions !