Optimisation de code VBA avec la structure With

Le bloc With
Vidéo non disponible ! Réessayez plus tard
Cette vidéo fait partie de la formation
Programmez Microsoft Project 2016 avec les macros et VBA
Revoir le teaser Je m'abonne
Transcription

49,90€ Je commande

À partir de
27€ /mois
Je m'abonne à Elephorm

Description Programme Avis

49,90€ Je commande

À partir de
27€ /mois
Je m'abonne à Elephorm

Les objectifs de cette vidéo sont de:

  • Comprendre l'utilisation de la structure With en VBA.
  • Apprendre à optimiser et alléger le code VBA.
  • Découvrir la gestion des tâches récapitulatives de projet.

Découvrez comment simplifier et rendre votre code VBA plus efficace grâce à la structure With.

Dans cette leçon, nous explorons la structure With en VBA, un outil puissant pour optimiser et alléger votre code. Vous apprendrez à comment éviter les répétitions redondantes en regroupant les éléments communs sous une seule structure. Cette vidéo vous guidera à travers la création d'un nouveau projet et des différentes étapes pour implémenter et tester ces concepts. De plus, nous discuterons de l'utilisation de debug.print pour une exécution et vérification efficaces ainsi que des techniques pour rendre votre code plus lisible.

Nous aborderons également la gestion des tâches récapitulatives et l'interrogation de projets dans le contexte de la programmation VBA. Grâce à des exemples concrets, vous serez en mesure de comprendre la valeur de la structure With et son utilisation dans différents scénarios de développement VBA. Enfin, une introduction aux variables et leur importance dans le contexte de la personnalisation de vos projets sera abordée.

Voir plus
Questions réponses
Quelle est l'utilité principale de la structure With en VBA?
La structure With permet d'optimiser et d'alléger le code en évitant les répétitions en regroupant des instructions sous un seul bloc.
Comment vérifier si le code VBA est correct avant de l'exécuter?
On peut utiliser le menu Debuggage et l'option 'Compiler VBA Project' pour évaluer le code avant de l'exécuter.
Quelle est la fonction de debug.print dans VBA?
La fonction debug.print est utilisée pour afficher les résultats dans la fenêtre d'exécution, ce qui aide à tester et déboguer le code.
Nous allons maintenant examiner un ensemble de structures, notamment des tests conditionnels, des boucles, mais nous allons commencer par la structure With, qui va nous permettre d'alléger notre code en ne répétant pas des éléments communs à plusieurs lignes. Pour cela, j'avais donc fermé les exemples précédents, je crée un nouveau projet, Vierge, le voilà, je prends la précaution de tout de suite l'enregistrer et parcourir, je vais le mettre comme le précédent dans mes documents, ça sera parfait, et je vais l'appeler 02 underscore structure. Il nous fera aussi découvrir des variables, donc structure et variable. J'enregistre, je vous fais observer que nous avons dans ce projet, par exemple, plusieurs tâches, je peux avoir une tâche A, une tâche B, etc. Et nous avons aussi une tâche récapitulative de projet, si vous souhaitez résumer la totalité de votre projet, je vous rappelle qu'il ne faut en aucun cas créer vous-même la tâche de projet, mais simplement en vous rendant dans l'onglet format, tout à fait sur la droite, vous cochez la case tâche récapitulative de projet. Une tâche numéro 0 apparaît, elle ne fait pas partie de la collection des tâches, c'est bien le projet lui-même. Je vais en profiter pour modifier la petite erreur structure était au pluriel, donc attention le nom du fichier suite à cette modification n'est pas modifié, par contre le nom du projet qui apparaît dans le Gant lui a été modifié. Je vais dans le sub que nous allons développer, interroger cette tâche récapitulative de projet, je bascule donc grâce à l'onglet développeur directement dans le code visuel basique. Dans ce code, je fais attention à bien me mettre dans le projet structure et variable, je ne me positionne pas sur le global, sur le modèle, mon clic droit et insertion d'un module. Dans ce module, je vais construire plusieurs lignes, je vais construire trois lignes qui vont se destiner à interroger cette tâche récapitulative de projet. Le résultat sera affiché dans la fenêtre exécution grâce à debug print. Je commence avec un sub, je vais l'appeler with parce que nous utiliserons dans un moment la structure with et le mot test c'est parfait. Alors je vais ici démarrer avec une instruction debug.print, un espace, que voulez-vous imprimer ? Vous imprimerez dans l'active project. Active project en fait est facultatif, c'est néanmoins une précaution de l'utiliser pour être sûr de s'adresser au bon projet, on pourrait le désigner par son nom dans la collection des projets et puis ça permet aussi après le point d'avoir tout de suite la liste d'aide qui va me proposer pr, voilà, project, project sumari, ah j'ai pas encore sumari, donc je vais descendre avec les flèches du clavier, start sumari task. Project sumari task c'est la tâche récapitulative de projet, je ne fais pas entrer, je tabule. Et je voudrais dans cette tâche récapitulative de projet avoir la propriété name, voilà, donc nous aurons le nom. Je vais prendre la précaution de copier cette ligne, donc je la mets en surbrillance, ctrl c, je peux maintenant revenir à la fin de la ligne et faire la touche entrée, ctrl v, la touche entrée à nouveau, ctrl v. Alors en deuxième ligne vous me donnerez la durée, au lieu de name je prendrai la duration. En troisième ligne de name vous me donnerez le pourcentage d'exécution, pourcentage d'achèvement, le percent complete. Alors si j'ai un doute, le mot n'est pas évident à retrouver, j'efface le name, je reviens en arrière pour enlever le point après task, et je refais le point, percent complete, je tabule, voilà. Il me reste à vérifier, dans la fenêtre exécution je vais enlever les éléments précédents, vous voyez que de projet en projet il reste toujours affiché, je reviens dans mon sub et touche f5, je l'exécute. J'ai donc bien le nom du projet, non pas le nom du fichier, ce qui est différent, mais bien le nom du projet, vous voyez que structure a bien toujours le s, qui n'est pas dans le nom du fichier. La duration est de 420 minutes et le pourcentage d'achèvement est de 0. Nous n'avons pas encore effectué de suivi dans ce projet. Je vous rappelle que les tâches sont en mode de planification manuel, ce qui peut expliquer la durée actuelle du projet. On va un petit peu améliorer, debug print, je voudrais qu'il y ait quand même un petit libellé, après debug print et avant le add active, je vais ouvrir un guillemet, je vais saisir le mot nom, espace, deux points, je ferme le guillemet, je l'ai fermé un petit peu vite, deux points, espace, guillemets, et ensuite nous avons besoin d'un deuxième argument. Si je cherche à exécuter de cette façon là, il ne sera pas comment joindre le nom, enfin le libellé, l'étiquette nom, du name du project SummaryTask. Donc la solution, ça pourrait être de faire une concaténation, mais ici avec le debug print, il est prévu de faire une virgule, et ensuite d'attaquer la deuxième instruction. Je fais de la même façon pour la deuxième ligne, guillemets, durée, espace, deux points, espace, je ferme le guillemet, virgule, je viens sur la dernière ligne, et là j'ai le pourcentage d'achèvement, guillemets, pourcentage d'achèvement, espace, deux points, espace, guillemets, et je n'oublie pas la virgule. Bien sûr, il convient de vérifier. Je descends d'une ligne, je vérifie qu'il est bien mis l'espace entre la virgule et le A. Si je fais F5 maintenant, je pense que ça ne marchera pas, parce qu'en descendant d'une ligne, par les flèches du clavier, je suis après le end de sub. Donc je remonte d'une ligne et je fais F5. Voilà, donc maintenant nous avons bien une réponse qui est correctement structurée. J'efface le contenu, la fenêtre exécution, et je vais faire un deuxième test, pratiquement identique au premier. Donc je fais un copier-coller complet de ce sub, CTRL-V, et là on n'a pas le droit d'avoir des noms de sub homonymes, donc bien sûr je modifie son nom, il va s'appeler 2, et là j'observe que je n'arrête pas de répéter dans mon code les deux éléments ActiveProject, donc l'objet sur lequel il faut travailler, et l'objet qui est imbriqué à l'intérieur du projet actif, qui est ProjectSummaryTask. Donc pour éviter cette répétition, nous allons utiliser un bloc With, et vous verrez quand vous ferez des macros avec l'enregistreur automatique, vous aurez beaucoup de solutions avec des With. Je sélectionne ActiveProject.SummaryTask, je laisse bien en dehors de cette sélection le point qui est après le task, et CTRL-X cette fois, je le coupe. Il ne reste donc que le point Name. Je crée une nouvelle ligne entre le nom du sub et le DebugPrint, et là cette fois je saisis le mot clé With, un espace, CTRL-V, et je lui dis de prendre l'actif ProjectSummaryTask. Il me reste à supprimer ces éléments qui deviendraient redondants dans les lignes qui sont en dessous, et je laisse .Duration. Donc vous voyez qu'ici j'avais mangé le point par accident, je le ressaisis, il me propose la liste d'aide avec .Duration. Je supprime de la même façon ActiveProject.SummaryTask, je supprime, PersonneComplete. Là, si je tente d'exécuter, je pense que nous aurons un ennui. J'essaye, je vais faire, je ne vais peut-être pas faire F5 parce que j'ai des doutes. Je vais me rendre dans le menu Debuggage, et je vais lui demander, avant de faire une vraie exécution, d'évaluer mon code Debuggage Compiler VBA Project. Et là, comme je m'y attendais, il me dit que j'ai bien ouvert une structure With, mais je ne l'ai pas fermée, End With attendu. Je valide par OK, et je crée une nouvelle ligne, End With. Ceci me convient parfaitement. Un petit détail pour la bonne règle, je voudrais que les lignes où il y a les Debug Print soient indentées à l'intérieur du With, je voudrais qu'il y ait un retrait sur ces trois lignes. Je vais me faire un peu aider par l'éditeur, je pourrais mettre une tabulation devant chaque dé de Debug, ça peut être un peu long. Dans le bandeau de la fenêtre éditeur, je vais faire un clic droit, et je vais demander à afficher la barre d'outils édition. Elle apparaît en barre d'outils flottante, je la positionne à côté de la barre d'outils standard. Il me reste à sélectionner les trois lignes du Debug Print, et dans cette nouvelle barre d'outils, de dire que je fais un retrait vers la droite, donc un retrait positif. Et comme ça, j'ai un code qui est beaucoup plus lisible, je vois tout de suite comment vont s'appairer entre les différents End. Ce retrait ne change absolument rien à l'exécution. Il me reste à vérifier, je peux essayer de faire Debug Compiler, ce n'est pas obligatoire mais c'est une précaution. Il ne se passe rien, ça veut dire que mon code dans sa syntaxe a été apprécié. Par prudence, j'enregistre, et il me reste maintenant à faire F5 pour exécuter. Donc je vois que les choses fonctionnent tout à fait correctement. J'ai peut-être fait une petite faute sur le C d'achèvement, donc je vais la corriger. Voilà, ça sera plus joli. Il me reste maintenant éventuellement à réessayer, F5, et je vois que ma correction est bien prise en compte.

Programme détaillé de la formation

Nos dernières formations Microsoft Project