POK 1 - VBA, fais-le pour moi

Tags :
  • POK
  • 2024-2025
  • temps 1
  • Vert
  • VBA
Auteurs :
  • Victor Pawlaczyk

Au travail, certains collègues doivent effectuer des tâches qui me semblent plutôt basiques et surtout très répétitives sur Excel. Le but de ce POK est donc d’essayer d’utiliser les VBA pour automatiser certaines de ces tâches.

Connaissances de base en VBA

Les lien utiles pour la compréhension de celui-ci.

Tâches

Sprint 1

Liste des taches que l'on pense faire. On coche si la tache est réalisée. A la fin du sprint on fait une petite étude post-mortem pour voir ce qui s'est passé et les ajustement à faire pour le prochain sprint, pok.

Sprint 2

Horodatage

Premier Sprint :

Date Heures passées Indications
Jeudi 05/09 1H Echanges avec Corinne, identification de ses besoins
Vendredi 06/09 1H Retours d'expérience
lundi 09/09 3H Recherche de moyens techniques de répondre à la demande + élaboration de la maquette
Mercredi 11/09 1H Présentation de la maquette
Lundi 16/09 2H Analyse des retours sur la maquette + codage VBA
Lundi 16/09 30 min Analyse du Sprint + réflexion sur le prochain Sprint
Lundi 16/09 1H30 Rédaction livrable

Deuxième Sprint :

Date Heures passées Indications
vendredi 04/10 3H Codage
dimanche 06/10 2H Codage
jeudi 10/10 1H Présentation avec Corinne + correction des bugs
lundi 14/10 2H 30 Essai recherche + codage remplissage des formulaires pdf
mardi 15/10 1H Rédaction livrable

Premier Sprint

Identification des tâches à automatiser

La première étape consiste à échanger avec mes collègues sur leur utilisation quotidienne d'Excel et leurs tâches récurrentes pour identifier les tâches qui pourraient être automatisées ou simplifiées avec des macros. C'est avec Corinne que j'ai identifié différentes manipulations à automatiser.

En résultat de ces échanges et réflexions, voici les objectifs possibles d'automatisation que nous avons identifiés :

Retours d'expériences de projets similaires

Ensuite j'ai recherché dans mon entourage mais aussi sur internet quelques retours d'expérience sur ce type de projets avec du VBA. Les principaux points d'attention qui résultent de ces retours d'expérience sont les suivants :

Ma Phase d'idéation

Pour le sujet de saisie des devis, j'ai pensé à coder une macro de mise en forme des données. C’est la solution qui me paraît intéressante à creuser. En effet, il est possible d’extraire les données depuis le logiciel où arrivent les devis, les bons de commande et les factures. On peut facilement faire un copier-coller depuis cette extraction vers un excel. Le souci c’est que toutes les informations récupérées ne sont pas forcément pertinentes, il y a des colonnes en trop, d’autres pas dans le bon ordre, etc. C’est une perte de temps considérable de remettre à chaque fois ces données copiées dans une mise en forme exploitable pour l’utilisation qu’on veut avoir de ce tableur. Une première piste à creuser est donc une macro qui automatise cette mise en forme des tableaux à partir des extractions du logiciel.

Pour la vérification des documents administratifs, on a déjà mis en place un tableau dans lequel on renseigne la date d’expiration du document valide que l’on a plutôt que simplement indiquer s’il est « ok » ou non à la saisie du dossier. Aujourd’hui, ma collègue doit régulièrement vérifier ligne à ligne si les documents que l’on a sont toujours valides. En fonction du nombre d’ouvriers présents, cela peut être rapide comme très long. Il serait intéressant de mettre en place un bouton qui lance une macro de « vérification des documents à jours » qui renverrai à la fin une message box indiquant que toutes les pièces d’identité sont valides ou alors celles qui sont périmées le cas échéant (idem pour les visites médicales, etc). Cela rendrait la vérification beaucoup plus efficace. Il serait aussi intéressant de lister les données manquantes dans le tableau.

Pour les demandes de badge, on renseigne déjà la date à laquelle la demande a été faite, puis quand elle est acceptée on le renseigne aussi. Encore une fois, il serait sympa qu’un bouton associé à une macro recherche seul parmi tout le tableau les demandes qui ont été envoyées mais pas encore acceptées, pour savoir quels cas posent « problème » et faciliter les relances au bureau des badges.

Le Maquettage

Pour commencer, avant de me lancer tête baissée dans le codage en VBA de programmes hyper compliqués et complets, il m’a semblé important de tester l’adhésion du public visé à la solution envisagée. J’ai donc en étape intermédiaire utilisé des fonctions excel que je connaissais un peu mieux pour faire des premiers tests de mes idées à ma collègue Corinne. Pour ce début j’ai commencé à travailler sur le suivi des documents administratifs. J’ai amélioré un peu le tableau existant pour commencer à y automatiser certaines vérifications, notamment la validité des pièces d’identité. J’ai commencé par ajouter une colonne de test qui compare la date de validité du document à la date du jour. Cette colonne renvoie vrai ou faux. En ajoutant une mise en forme conditionnelle verte ou rouge, j’ai pu voir que Corinne pouvait vérifier beaucoup plus rapidement si tout était encore valide. Mais elle doit encore parcourir elle-même tout le tableau.

Voici le retour d'expérience obtenu de cette maquette :

Analyse Post Mortem du Sprint

Je n'ai pas réalisé l'intégralité de ce que j'avais initialement prévu pour le premier sprint étant donné qu'à ce stade, je n'ai pas encore réussi à coder une solution viable en VBA pour répondre à un des problèmes efficacement. Le codage est en cours. Cela constituera le coeur du second sprint qui était déjà prévu de la sorte.

Second Sprint

La vérification des documents administratifs

Le début de ce second sprint consistait à coder, dans la continuité du premier sprint, la macro de vérification des documents administratifs. Sur un plan technique, cette phase m'a permis de me rendre compte que les array étaient assez contraignants à utiliser en vba. Par exemple, quand on définit un array dynamique, il faut en réalité redéfinir sa dimension en permanence, je n'ai pas trouver de moyen d'ajouter des items à la suite de l'array sans devoir l'agrandir au préalable (une sorte d'équivalent de ".append" en python). De plus, il n'est pas possible de renvoyer un array via une "message box". In fine, il s'est avéré beaucoup plus pratique dans ce cas précis d'utiliser une chaîne de caractère à la place pour concaténer à la suite les noms des profils incomplets ou à litige. Par souci de clarté, j'ai souhaité intégrer des retours à la ligne dans ma chaîne de caractère, ce qui se traduit par la commande suivante "vbCrLf".

Une fois le programme de vérification de validité des cartes d'identité et des visites médicales codé, j'ai pu le montrer à ma collègue Corinne. On a pu vérifier à nouveau que le programme fonctionnait et lui convenait. Ensuite, j'ai ajouté la macro en question sur le vrai tableur qu'elle utilise et non pas ma copie qui me servait de test. J'ai eu quelques bugs lors de la liaison du bouton avec la macro, mais ça a finalement fonctionné. Avant de faire cette présentation à Corinne, j'avais eu le temps aussi de programmer une autre macro qui vérifiait la validité des contrats des intérimaires en fonction des dates renseignées dans le fichier excel. Cette dernière a aussi plu à ma collègue et répond bien à son besoin.

La saisie des devis

Cette partie était relativement simple à coder. Il s'agissait simplement jouer sur la mise en page du tableau extrait. Pour autant c'était intéressant de se pencher sur la question car celà m'a permis de manipuler un peu les différentes commandes de mise en page via vba. Ainsi j'ai pu mettre en application toute une partie de ce que j'avais appris lors de mon premier MON sur vba.

Les badges

En ce qui concerne les deux sujets identifiés sur les badges, il s'est finalement avéré peu pertinent d'utiliser vba dans ces deux cas. Pour le suivi des demandes de badge, le code aurait été très similaire à celui des CNI et des visites médicales car il s'agit encore de comparer des dates. En revanche, le programme n'est plus pertinent à mettre en place étant donné que les demandes de badges d'accès se rarifient avec l'avancée du chantier. En effet, il y en avait énormément au départ mais maintenant les accès sont faits et les équipes sont globalement stables.

Concernant les badges véhicules, l'idée aurait été de réussir à modifier à l'aide de vba un formulaire pdf. D'après mes recherches, cela semble faisable. Cependant, la license d'Adobe Acrobat fournie par mon entreprise ne contenait malheureusement pas la bibliothèque nécessaire "Adobe Acrobat Type Library". J'ai vu que d'autres bibliothèques pouvaient permettre d'effectuer ce genre d'interaction comme itext mais, même si cette bibliothèque me permettait d'arriver à mes fins, il aurait fallu l'installer sur mon PC pro et celui de ma collègue. Je voyais venir la source de problèmes plus que la solution miracle. Ce fut le moment pour moi de me souvenir du retour d'expérience récurrent relevé pendant le premier sprint, à savoir : "Parfois, le codage de la macro cause plus de prise de tête qu'il n'apporte de gain réel une fois au point." Pour autant, explorer le sujet m'a déjà permis d'apprendre que l'on pouvait modifier des pdf à formulaires via un programme vba. De plus, je suis à présent d'autant plus curieux d'explorer les différentes manières qui peuvent exister pour "automatiser" le remplissage de ce type de formulaires facilement.

Le projet Bonus

Après avoir commencé à manipuler les macros excel, et étant en plein dans le codage de celles présentées ci-dessus, j'étais beaucoup plus attentif aux tâches qui se prêtaient bien à une automatisation via vba. C'est alors que je me suis rendu compte qu'un des fichiers de synthèse que l'on remplit régulièrement pouvait être un très bon sujet pour compléter ce POK et manipuler encore un peu vba. En effet, c'est un fichier excel qui vise à synthétiser sur une feuille de calcul les données présentes sur une dizaine d'autres feuilles identiques que l'on crée au fur et à mesure du projet. J'ai donc codé une macro qui permet de créer la nouvelle ligne du tableau synthèse quand on crée une nouvelle feuille dans le fichier.

Analyse Post Mortem du 2nd Sprint

Finalement, j'ai pu dans ce second sprint terminer de coder la macro inachevée du premier sprint mais aussi en coder quelques autres. En revanche tous les programmes que j'avais envisagés n'ont pas forcément abouti, que ce soit parce qu'ils ne répondaient plus à un réel besoin ou parce que leur mise en oeuvre était trop contraignante, risquant une balance investissement/bénéfice très mauvaise.

Par ailleurs, j'ai été très surpris par le gain en rapidité que j'ai pu observer entre ma première macro et les suivantes. Je ne pensais pas m'approprier si vite les manipulations élémentaires du langage. Bien sûr, pour chaque programme je devais rechercher au fur et à mesure du code certaines propriétés ou formulations qui me manquaient malgré tout. D'ailleurs, la recherche de solutions pour le remplissage des formulaires pdf via vba est une des parties qui m'a pris plus de temps que prévu.

Conclusion

Je souhaite conclure ce POK avec deux points qui m'ont marqués. Pour le premier, c'est le constat de la puissance pédagogique que ce projet a eu pour moi. Il m'a permis d'appliquer directement ce que j'avais étudié sur vba dans le cadre de mon MON, et ainsi de m'approprier le langage en m'entraînant sur des projets concrets dont je cernais clairement l'objectif, et dont le résultat m'est utile. Le deuxième point concerne l'inclusion de ma collègue Corinne dans le projet, ce qui était très intéressant. En effet, une partie des macros que j'ai codées lui étaient destinées, cela a inclu toute une dimension d'expérience utilisateur à laquelle j'ai du porter attention. La possibilité de tester avec elle au fur et à mesure mes propositions pour réadapter les macros à son utilisation était également enrichissante car ça me permettait de challenger mes programmes et me poussait à les améliorer.