- Dans de nombreuses organisations, Excel est devenu la base des processus métier, si bien que lorsqu’une petite automatisation est nécessaire, VBA devient de fait l’option par défaut
- L’organisation prise en exemple dispose de 13 plateformes de données et de plusieurs outils d’automatisation, mais les seuls outils capables d’accéder largement aux sources de données nécessaires se réduisent essentiellement à VBA et PowerShell
- La CyberSecurity a refusé l’installation de langages de haut niveau comme
Python,Ruby,Node,Rust, et l’alternative Power Platform montre des limites en matière d’accessibilité aux données et de maintenance d’algorithmes complexes - Les précédents avec Lotus Notes et IBM BPM montrent que les systèmes pilotés par l’IT peuvent être vulnérables à la fin du support, aux migrations inachevées et aux trous de maintenance
- VBA est ancien et a ses faiblesses, mais il est inclus dans Office, accessible à tous, et offre aux SME le contrôle nécessaire pour vérifier eux-mêmes la logique métier et la migration des données
Les raisons directes pour lesquelles VBA continue d’être choisi
- Dans le sondage 2021 de /r/vba, la majorité des utilisateurs de VBA ont répondu qu’ils utilisaient VBA parce qu’ils n’avaient pas d’autre choix
- Beaucoup d’organisations font tourner l’ensemble de leurs processus métier sur Excel, et lorsqu’un peu d’automatisation est nécessaire, VBA est souvent le premier choix
- Derrière la critique du type « on contrôle une partie de l’infrastructure avec des feuilles de calcul » se cachent en réalité les contraintes liées aux outils fournis par l’organisation, à l’accessibilité des données et à la structure de maintenance
Les limites liées à l’accès aux données et aux outils d’automatisation
- La branche ingénierie de l’organisation étudiée peut utiliser plusieurs plateformes d’automatisation
- OnPrem :
PowerShell,VBAd’Excel /OfficeJSlimité /OfficeScripts/PowerQuery,PowerBI Desktop,SAP Analysis for Office - OnCloud :
PowerApps,Power BI,PowerAutomatenon premium - Environnements sandbox :
ArcGISavecArcPy,MapInfoavecMapBasic,InfoWorks ICMavecRuby,ArcGIS Online
- OnPrem :
- Les plateformes de données gérées par l’IT vont de
D1àD13et incluent une base de données géospatiale, une base SAP, une plateforme de télémétrie, SharePoint, Lotus Notes, IBM BPM, des systèmes de fichiers et des informations de modèles hydrauliques - Au final, les plateformes d’automatisation capables de se connecter aux sources de données nécessaires se limitent essentiellement à VBA et PowerShell
Power BI Desktopa bien été déployé dans l’organisation, mais il ne couvre pas toutes les plateformes auxquelles VBA accède- Même à périmètre d’accès équivalent,
Power BIest difficile à utiliser pour l’automatisation de processus, et pour traiter d’autres jeux de données on passe par la création de CSV stockés sur SharePoint - Et cette génération de CSV est parfois assurée par VBA
- Certaines connexions de VBA vers des services OnCloud reposent sur des essais directs, et l’auteur pense qu’il est aussi possible d’interfacer SAP BW4HANA et d’autres services cloud via VBA, mais les exigences d’authentification et les protocoles ne sont pas encore résolus
Les limites des langages de haut niveau et de Power Platform
- L’organisation voulait utiliser des langages de haut niveau comme
Python,Ruby,Node,Rustpour l’automatisation métier, mais toutes les demandes d’installation pour l’équipe ou l’ensemble du métier ont été refusées par la CyberSecurity - Le motif du refus était qu’autoriser les utilisateurs finaux à accéder à des langages de programmation de haut niveau allait à l’encontre de la vision stratégique technologique de l’entreprise
- Les alternatives souvent citées,
PowerAutomateetPowerApps, n’accèdent quasiment pas aux données nécessaires - Et même lorsque l’accès aux données est possible,
Power Platformreste insuffisante pour exécuter la plupart des processus- Les algorithmes requis étant complexes, les solutions
PowerAutomatesont difficiles à maintenir et peuvent être ardues à comprendre même pour le personnel IT - L’exemple donné est celui des projection algorithms
- Les algorithmes requis étant complexes, les solutions
- En pratique, les seuls outils réellement restants sont donc
PowerShell v3et VBAPowerShell v3ne prend pas en charge la syntaxe des classes et il est impossible d’y installer des modules- VBA est la cible pour laquelle des centaines d’heures ont été investies afin de créer des open source VBA libraries et le renforcer comme langage raisonnable selon des standards modernes
VBA comme garantie de maintenance
- Dans les années 2000, de nombreux systèmes ont été construits sur des bases de données IBM Lotus Notes
- Après son acquisition par HCL en 2019, la continuité du support de Lotus Notes est devenue incertaine, et la fin officielle du support était prévue pour juin 2024
- À partir de 2019, l’équipe technique a tenté de migrer plusieurs systèmes vers de nouvelles technologies, et l’organisation a investi massivement dans le développement d’un système basé sur IBM Business Process Manager pour remplacer une base Lotus Notes
- Le plan consistait à remplir
D11avec l’ensemble des données deD10, puis à archiverD10, mais la situation en 2023 était différente- Il restait 8 mois avant la fin officielle du support
- L’équipe technique a supprimé le contrat de support IBM BPM
- Aucun système de remplacement n’était en vue ni pour IBM BPM ni pour la base Lotus Notes
- La solution IBM BPM manque de maintenance et ne fonctionne pas comme nécessaire
- Une solution inadaptée à l’usage a été forcée dans IBM BPM
- Une REST API existe, mais elle est presque inutile pour l’équipe technique comme pour les SME
- Certains appels REST utilisent du JavaScript encodé sous forme de chaîne
- D’autres appels exigent d’insérer du HTML dans du JSON lui-même contenu dans du XML
- Les tables de base de données sont interrogées par GUID et non par nom
- Aucune documentation n’indique à quelle table ou à quel processus correspond tel GUID
- Les données de
D10n’ont en réalité pas été migrées versD11, si bien que le métier utilise deux systèmes au lieu d’un seul - Le modèle de données de
D11ne prend pas non plus correctement en charge les données deD10
- Les SME utilisent les outils au quotidien et sont ceux qui déterminent les besoins d’évolution des systèmes
- Lorsque les SME utilisent VBA, ils peuvent contrôler et maintenir eux-mêmes le système autant que nécessaire, ce qui agit comme une garantie de maintenance que les systèmes IT ne fournissent pas
Le contrôle et les problèmes de collaboration avec les SME
- Un projet récent visait à créer un nouveau système IT intégré pour remplacer une feuille de calcul critique pour le métier, et en cas de succès l’importance de
D6devait être abaissée au niveau C - La spécification initiale était simple
- Serveur
NodeJSet base de donnéesMySQL - Interface
React - Accès au code source et à
gitpour les administrateurs et les SME - Construction du système en collaboration entre l’IT et les SME
- Serveur
- L’équipe technique a imposé d’autres exigences
- Les administrateurs et les SME ne pouvaient pas accéder au code
- Le front-end devait être construit avec
Microsoft PowerAppspour respecter la « Strategic Vision » - Le back-end devait être construit avec
Microsoft Azure Pipelinespour respecter la « Strategic Vision »
- Du point de vue des SME, ces exigences créent plusieurs problèmes
- L’équipe technique ne comprend pas le travail métier au quotidien, et a donc du mal à saisir la logique métier et les calculs
- Lorsque les développeurs écrivent la logique métier, les erreurs sont faciles à introduire
- L’équipe technique abandonne souvent les projets technologiques sur mesure, ce qui fait disparaître les ressources de maintenance et d’amélioration
- En collaborant avec les SME, au moins une équipe peut conserver des ressources pour maintenir le système
- Les SME doivent pouvoir faire confiance au livrable, mais s’ils ne voient pas le code, il leur est difficile de vérifier qu’il fonctionne dans tous les cas limites
- Même s’il existe des tests unitaires, il est difficile de vérifier qu’ils existent réellement et qu’ils sont exécutés fréquemment si le code n’est pas visible
- Les SME améliorent et maintiennent déjà les systèmes legacy existants, et possèdent une grande connaissance des interactions entre systèmes
- Pour vérifier que toutes les données sont correctement migrées et représentées dans le nouveau système, un accès au back-end est nécessaire
- Lorsque le code reste en VBA, les SME et le métier conservent le contrôle
- L’équipe technique transfère très peu de contrôle aux équipes métier, tandis que les SME peuvent vérifier que le logiciel est développé proprement de manière modulaire et ne se transforme pas en amas de technologies vaguement raccordées
L’expérience utilisateur dans un environnement familier
- La plupart des ingénieurs utilisent des feuilles de calcul dans leur travail quotidien
- VBA est intégré aux feuilles de calcul, ce qui permet d’apporter des outils inconnus dans un environnement familier
- Pour les utilisateurs, il peut être plus puissant d’introduire de nouvelles capacités dans un environnement familier que de fournir un outil inconnu dans un environnement inconnu
Conclusion : les faiblesses de VBA et un choix réaliste
- Les raisons pour lesquelles les organisations choisissent les feuilles de calcul et VBA sont nombreuses
- Les alternatives fournies par l’IT sont faibles à cause des préoccupations de sécurité
- Les outils alternatifs ne se connectent pas correctement aux systèmes source et sont souvent encore en cours de déploiement
- Il existe des problèmes de stratégie IT qui ne reflètent pas certains cas d’usage
- Par crainte pour la sécurité et la maintenance, l’IT ne cherche pas à collaborer avec les SME
- Les utilisateurs, administrateurs et SME ne reçoivent pas une formation suffisante sur les systèmes de remplacement
- Les utilisateurs et les SME veulent conserver un certain niveau de contrôle sur la logique métier du système
- C’est la seule technologie réellement viable, incluse dans Office et utilisable par tous
- Cela ne veut pas dire que VBA n’a pas de faiblesses
- Le texte de mataroa n’a pas entièrement tort sur certains points
- La gestion est parfois mauvaise, mais beaucoup de personnes dans les organisations essaient malgré tout de faire ce qu’il faut avec les outils qu’on leur donne
1 commentaires
Avis de Hacker News
Dans les entreprises, il existe déjà, dans Excel, un environnement de développement qui permet d’éviter de passer par la direction, la haute direction, l’enregistrement d’un projet, un budget, l’affectation d’un chef de projet, etc., pour faire approuver un logiciel hors catalogue.
Si l’on veut en plus un stockage de données réseau et une interface web, il suffit d’y adjoindre SharePoint. C’est dans cette logique orientée utilisateur final que naissent les solutions, et ces solutions sont faites en VBA.
À une époque, un horrible moteur de rapports écrit en Word VBA lisait des définitions de rapports sur un partage de fichiers, découpait et collait des morceaux de modèles, puis produisait la sortie. L’IT n’avait pas récupéré le PC d’une personne partie de l’entreprise, alors il servait toute la journée à faire tourner des
.docpour générer des rapports d’ingénierie ; c’était bien plus rapide et moins cher que d’acheter l’option de reporting du logiciel de CAD/CAM. Cette option aurait demandé au moins 18 mois, des consultants et l’absorption d’un budget projet.Quand on critique les gens parce qu’ils font des choses horribles avec Excel VBA, la cause se trouve très probablement plus haut dans la pile. Une autre cause, c’est le « marteau de singe » : donnez un marteau à un singe, et il tapera sur tout ; si le seul outil disponible est VBA, tout ressemble à une solution VBA. Aujourd’hui, nous sommes devenus des primates un peu plus évolués.
À l’étape suivante, Jim veut aussi l’exécuter, donc le script est copié ; Jane utilise une autre version de VBA, donc il est modifié ; puis on ajoute « et ça aussi ! ». Au final, on obtient un patchwork de 1 500 lignes, dont on essaie de refiler la maintenance à l’équipe de développement.
L’ordinateur de l’entreprise est très verrouillé : impossible d’installer quoi que ce soit, ni d’aller sur des sites qui ne sont pas sur liste blanche, mais Excel est là.
Cela ressemble beaucoup à l’ancien paradigme du « système d’exploitation Emacs », appliqué à un autre contexte.
Il n’est donc pas surprenant que VBA reste très précieux en entreprise. Même dans des environnements disposant d’autres outils et langages, ainsi que de procédures de build matures, j’ai vu des product managers réaliser en VBA des analyses métier d’une complexité à couper le souffle, et c’était l’outil adapté au problème qu’ils avaient sous la main.
J’ai été surpris de voir que les développeurs professionnels utilisent eux aussi beaucoup Excel/VBA comme outil d’appoint.
Il y a quelques années, en travaillant avec un grand hedge fund, un data analyst m’a envoyé un modèle Excel qu’il avait construit lui-même ; en voyant l’extension
.xlsm, je me suis dit qu’il devait contenir du code VBA. Je me suis dit : « voyons ce qu’ont bricolé ces cow-boys de l’enregistrement de macros », mais à l’intérieur il y avait beaucoup de VBA, et l’auteur était un data analyst diplômé en informatique de Caltech, excellent en Python.Le VBA servait à récupérer des données depuis une base, à les mettre dans des feuilles, à créer des formules et à appliquer une mise en forme agréable ; il y avait aussi quelques UserForms. Je l’ai taquiné avec un « Du VBA ? Et vous utilisez quoi d’autre là-bas, une égreneuse de coton et une pelle à vapeur ? », mais, contre toute attente, il a fait de grands éloges d’Excel et de VBA, ce qui m’a surpris.
Je me souviens de ce qu’il a dit : « Excel rend facile à comprendre la structure de dépendances impliquée par les calculs. Si j’avais fait ça en Python, j’aurais passé la journée à répondre à des questions. »
VB6 a une communauté assez importante, et https://twinbasic.com/ a beaucoup aidé récemment à rapprocher les communautés VBA et VB6. Il pourrait donc y avoir une légère renaissance dans la communauté des développeurs.
En Suède, il existe même un modèle de prévision des retraites Excel/VBA de 3 Go, accompagné d’un manuel utilisateur de 38 pages. Cela dit, il est difficile d’y voir un très bon exemple d’utilisation d’Excel : https://www.pensionsmyndigheten.se/statistik-och-rapporter/p...
VBA est puissant, et il permet de prototyper et d’itérer rapidement. On pourrait même dire que VB6 était le sommet des applications CRUD.
« Parce que c’est étonnant »
J’ai entendu dire qu’il y avait autrefois plus de 20 000 bases de données Access sur le réseau de JP Morgan. Dans plusieurs entreprises, des analystes de données se sont un jour lassés de leur travail quotidien et ont regardé de plus près le bouton « Enregistrer une macro ». Certains ont trouvé ça assez pratique et ont continué à l’utiliser. D’autres, plus curieux, ont examiné le code généré par les macros, en ont appris un peu et ont essayé de le modifier
Une minorité est même allée jusqu’à apprendre les structures de données et les algorithmes pour créer des systèmes d’authentification et d’autorisations imitant Django, refaire des interfaces UserForm de zéro, et implémenter Markdown, du parsing SAX, des barres de défilement personnalisées, du logging, voire des jeux
La réponse est sans doute que les analystes de données se sont ennuyés dans leur travail quotidien
Bien sûr, le fait de devoir maintenir quelque chose que n’importe qui devra pouvoir rejoindre et apprendre est une préoccupation légitime. Mais tant que le métier a accès à des outils pour résoudre ses problèmes, les gens qui « s’ennuient » trouveront un moyen. La friction est trop forte
Construire quelque chose d’un peu complexe dans Excel et le déposer sur un partage réseau est plus simple que de passer par l’IT, installer un IDE, fabriquer quelque chose, puis passer les procédures de sécurité pour le déployer ; je ne pense donc pas que ça disparaisse de sitôt. Tous les problèmes n’ont pas besoin d’un projet Jira et d’une solution excessivement compliquée
Cela dit, je suis totalement opposé à l’idée de construire de gros systèmes en VBA. Un petit script qui, en fonction de quelques changements de valeurs de cellules, interroge le cube d’un système et le combine avec les données de tables d’un autre système, pourquoi pas ; mais à partir d’un certain point, il faut aller ailleurs
Pour la plupart des projets, à condition qu’il existe une licence serveur permettant l’automatisation, je préfère de très loin la stack Alteryx+Tableau/PowerBI
Je devais créer une interface CRUD simple pour des analystes
Le premier problème, c’est que les analystes voulaient gérer toutes les étapes du CRUD dans Excel. Excel étant l’interface réelle, il fallait quelque chose qui puisse s’exécuter dedans
Le service IT n’autorisait pas l’accès en ligne de commande et refusait aussi l’installation d’outils de développement non approuvés. Obtenir une approbation pouvait prendre des mois. Les administrateurs de bases de données n’étaient pas ravis d’ajouter une nouvelle base à l’Oracle DB existante, et l’IT n’aimait pas non plus l’idée d’exploiter directement une base de données
Même ajouter un nouvel add-in Excel obligeait à supplier quelqu’un de l’IT. Avec de la chance, l’add-in apparaissait soudain un jour, mais impossible de savoir si ça prendrait une journée, une semaine ou un mois
La seule alternative réaliste était donc VBA, et nous avons finalement réussi à mettre en place une solution provisoire mais stable que les analystes utilisaient toutes les deux semaines
Quand je travaillais dans une agence de renseignement, je devais créer une app pour des personnes déployées en Afghanistan. Les seuls ordinateurs qu’elles pouvaient utiliser étaient des Windows XP verrouillés, sans aucun moyen d’installer quoi que ce soit
Comme Office était déjà validé et installé, j’y étais coincé moi aussi, même en tant qu’utilisateur de Linux. J’ai créé pas mal de Frankensteins en VBA pur, qui ont été bien accueillis
script. Je me demande si, même sur une machine isolée du réseau, l’exécution d’IE était bloquée, ou si VBA était simplement plus pratique que JavaScriptReconnaissons-le : l’IT est la bureaucratie moderne ; elle passe 95 % de son temps sur des problèmes qu’elle a elle-même créés, et environ 5 % sur l’orientation service. Pour les personnes extérieures, les processus sont opaques et généralement peu utiles.
J’ai vraiment ri en lisant ce passage dans la description d’IBM BPM, parce qu’il résume assez bien une bonne partie du problème :
« IBM BPM dispose bien d’une API REST, mais cette API REST est quasiment inutile pour les équipes techniques et les PME. Certains appels REST utilisent du JavaScript encodé sous forme de chaîne, d’autres exigent du HTML dans du JSON dans du XML. Les tables de base de données sont consultées par GUID et non par nom. Il n’existe pas de documentation indiquant quel GUID est associé à quelle table ou à quel processus. »
Beaucoup de choses sont devenues absurdement complexes, au point que personne en dehors de l’IT ne veut y toucher, et parfois même pas les gens de l’IT. À partir d’AJAX, la moitié de l’effort de développement a commencé à partir dans la conception du code front-end et des services back-end, ce qui n’a en réalité presque rien à voir avec le problème de l’automatisation par l’utilisateur final. Depuis, ça n’a fait qu’empirer, et les interfaces actuelles ont beau avoir l’air modernes, elles sont aussi hostiles à l’utilisateur que la stack technique qui a servi à les construire.
Dans Excel, l’UI est tout simplement « là », il y a aussi un générateur de code appelé enregistreur de macros, et le service IT ne vient pas discuter mes droits ni me dire qu’il n’a ni le temps ni le budget pour m’aider sur mon problème métier. C’est pour cela que VBA est une voie de contournement permettant aux utilisateurs de court-circuiter l’IT. Ce n’est pas parfait, mais c’est mieux que les autres options.
Rien n’a changé. Cela existait déjà au siècle dernier et on appelait ça des îlots d’automatisation. À l’époque, autour de moi, c’était considéré comme une bonne stratégie : laisser d’abord les services jouer avec, puis intégrer si on voyait du potentiel.
Quelques analystes qui bricolent leur petit outil VBA dans leur coin, ça ne me dérange pas du tout. Cet état d’esprit est même louable, et le résultat peut m’aider à mieux comprendre leur quotidien.
Ce qui me dérange, c’est quand ces analystes finissent par s’attendre à ce que mon architecture système s’adapte d’une manière ou d’une autre à leur projet personnel. Si je demande de la documentation, il n’y en a pas ; pas non plus de vue d’ensemble de l’architecture ; et si je demande l’accès au dépôt de ce monstre, on me répond : « C’est quoi, un dépôt ? »
Ils demandent pourquoi leur feuille de calcul ne pourrait pas injecter des données dans mon pipeline de traitement, et estiment que je devrais écrire un contrôleur correspondant au bout de REST qu’ils ont appris en regardant la moitié d’une vidéo YouTube. En réunion, on entend : « Qu’est-ce que ça veut dire qu’il faut une authentification ? Pourquoi l’IT complique toujours tout ? »
Que les gens créent des outils, que ce soit en VBA, en low-code ou autre, c’est très bien. Je fais la même chose ; simplement, moi j’appelle ça des scripts shell et je les mets dans un dépôt Git. Mais de même que je ne lâche pas mes outils CLI sur des serveurs de production, je ne laisserais pas non plus y aller quelque chose qui n’a jamais passé la moindre revue de code.
J’avais été recruté par le responsable du risque de marché, dont le rôle était d’éviter que la banque ne perde trop d’argent en une seule journée. Il m’avait embauché parce qu’il ne faisait pas confiance au service IT officiellement approuvé pour écrire correctement le code implémentant ses algorithmes. Par exemple, ils s’étaient déjà trompés parce qu’ils ne comprenaient pas la priorité des opérateurs, à savoir que la multiplication passe avant l’addition.
Le calcul du risque de marché devait prendre toutes les transactions en entrée et, au début des années 2000, j’avais installé Apache et des CGI Perl sur un PC sous un bureau pour créer une petite appli permettant aux traders de saisir leurs transactions et de suivre leurs positions. Les traders ont commencé à la préférer à la solution officielle de l’IT, parce qu’elle était plus facile à utiliser et permettait de visualiser plus simplement les positions.
Dans beaucoup d’environnements d’entreprise, trouver un moyen de contourner l’IT est une fonctionnalité importante. Pour revenir à Excel, les traders l’utilisaient pour les calculs et les simulations, et nous fournissions des outils qui s’y branchaient afin de tirer parti de ce qu’ils faisaient déjà.
« Autoriser les utilisateurs finaux à accéder à un langage de programmation de haut niveau va à l’encontre de la vision stratégique technologique de l’entreprise. »
Les merveilles de « l’entreprise ». Je suis toujours surpris quand les gens avancent ça comme si c’était un avantage ou une excuse.
Parce qu’il n’y avait pas de bonne alternative jusqu’à récemment. L’avenir est dans le nouveau modèle de compléments Office : https://learn.microsoft.com/en-us/office/dev/add-ins/overvie...
Quoi qu’on dise de TypeScript, c’est au moins mieux que VBA. Le gros problème, toutefois, c’est que contrairement à VBA, on ne peut pas programmer directement dans Excel. Parfois, on n’a pas envie de lancer un vrai projet de complément pensé pour être réutilisé ; on veut juste un script bricolé à exécuter une fois, tout de suite, pour corriger quelque chose. En utilisant ça, j’ai découvert Script Lab (https://learn.microsoft.com/en-us/office/dev/add-ins/overvie...), qui pourrait peut-être aider.
Et il y a en plus une question évidente. Un utilisateur sans droits peut-il installer un complément sans intervention du service IT ? Peut-il être intégré dans une feuille de calcul ? Si la réponse au premier point est « non », c’est vraiment fatal ; si la réponse au second est « non », cela nuit aussi à l’adoption. L’avantage des macros et de VBA, c’est qu’à part les paramètres de sécurité, toute instance d’Excel peut les exécuter immédiatement, sans installation supplémentaire.
L’autre problème, c’est que partager un complément avec des utilisateurs finaux n’a rien de trivial. Il faut le publier sur la marketplace ou sur SharePoint, et le sideloading nécessite un serveur SMB et une GPO. Cela dit, il existe une option dont on parle rarement : l’inclure dans le document, afin qu’il soit installé après confirmation de l’utilisateur lors de la première ouverture.
Un autre gros problème, c’est qu’utiliser OfficeJS suppose de pouvoir héberger un serveur web. En général, la plupart des utilisateurs finaux n’ont pas ce type d’accès.
VB(A), c’est un peu comme Python. Ce n’est pas joli, mais ça fait le travail. Si vous trouvez ça joli, c’est que vous manquez d’expérience et que vous ne connaissez pas beaucoup de meilleures alternatives
Un outil doté d’un bon écosystème — outils, bibliothèques, intégrations — qui permet de terminer réellement le travail est utile. En tant que système de développement d’applications desktop, Visual Basic, avec MS Access et ses avantages côté base de données, a été très utile dans de nombreuses situations. Et quand on arrivait au point où il fallait aller au-delà, il y avait sans doute aussi l’argent pour passer à une « vraie » solution
Il ne fait aucun doute que des systèmes basés sur VBA ont généré des sommes énormes. D’après mon expérience, surtout comme intervenant extérieur dans le développement financier, la plus grosse réécriture Excel/VBA que j’aie vue concernait une société qui avait gagné beaucoup d’argent sur les credit default swaps autour de 2008. Avant la réécriture, le classeur mettait cinq minutes à s’ouvrir, mais VBA faisait une grande partie du gros travail. Les personnes qui détenaient le savoir gagnaient beaucoup d’argent en bonus, pour leur entreprise et pour elles-mêmes
La leçon à en tirer, c’est que le fait qu’un outil soit accessible à des personnes qui n’ont pas été spécialement formées à l’utiliser compte davantage que son caractère idéal. C’est aussi pour cela que Python est devenu numéro un en dehors du navigateur web côté client. Cela ne veut pas dire qu’il est le meilleur, mais qu’il fait le travail et qu’il est accessible.
Mais ce n’est pas la seule raison de sa popularité. Il dispose des outils de data science les plus solides, ce qui a créé un effet écrasant, et il a aussi de bons frameworks web comme Django et Flask. Le fait que beaucoup d’universités l’aient adopté comme « premier langage » à la place de Java a aussi contribué à sa popularité. VBA, non.
Avoir de l’expérience, c’est aussi savoir qu’il y a une part de subjectivité dans ce qui est joli ou non. VBA a évolué dans des conditions « rudes », ce qui explique en partie ses bizarreries.
VBA est un langage correct qui prend en charge la programmation orientée objet. Il n’a pas l’héritage, mais il permet la composition. Il offre un accès et un contrôle profonds sur Excel, et il est mature et stable, parce que Microsoft ne le modifie plus beaucoup.
Si les « vrais programmeurs » détestent VBA, c’est surtout parce qu’il existe beaucoup de code VBA spaghetti amateur écrit par des responsables métier, et qu’on demande parfois aux programmeurs de le déboguer.
Il est plein de bizarreries, comme la localisation des caractères de contrôle dans le code.[1][2] Si l’on veut que le code fonctionne aussi sur des installations non anglophones, il faut utiliser des placeholders comme
Application.International(xlDecimalSeparator)pour construire dynamiquement les chaînes passées à cette fonction, ce qui nuit fortement à la lisibilité du code. Quand le code casse pour cette raison, les messages d’erreur sont incroyablement peu utiles, et si le développeur ne sait pas que cela peut être un problème propre à VBA, c’est pratiquement impossible à reproduire. Pour le reproduire, il faut changer la langue de l’interface vers une langue qu’on ne connaît pas forcément.Au moins dans Word, environ la moitié des fonctions les plus utiles, comme l’insertion d’un paragraphe après le paragraphe courant, cassent lorsqu’elles sont utilisées sur le dernier paragraphe d’une cellule de tableau, ce qui impose quantité de contournements spaghetti.
Si l’on veut échanger des chaînes de texte contenant plusieurs mises en forme, comme lorsqu’on référence la propriété
innerHtmld’un élément du DOM, ce n’est pas facile, sauf à recourir à une sélection scriptée bricolée et à du copier/coller.Quelqu’un l’a comparé à Bash dans un autre fil, et je suis en fait d’accord. Il ne faut rien écrire de complexe dans aucun de ces langages.
[1] https://stackoverflow.com/questions/20652409/using-vba-to-de...
[2] https://stackoverflow.com/questions/29832281/vba-range-funct...
Cela dit, une bonne partie de la détestation dont VBA fait l’objet vient aussi de l’état des projets VBA (https://sancarn.github.io/vba-articles/why-is-vba-most-dread...).
On Error Resume Next.Quand on pense à Excel et aux tableurs dans leur ensemble, beaucoup de gens à l’extérieur ne comprennent pas à quel point le langage des tableurs implémente bien la programmation fonctionnelle réactive. C’est précisément ce que React/Angular essaient de faire correctement depuis plus de 10 versions.
Beaucoup de gens ne comprennent pas non plus pourquoi les tableurs sont si pratiques pour les utilisateurs finaux, et proposent en conséquence des UI inférieures qui, en réalité, rendent les choses plus difficiles.
Il faut parfois prendre du recul et comprendre que, même à l’époque où il n’y avait pas d’interface graphique, les anciens avaient vu juste. Les entreprises tournaient déjà au début, et la plupart du temps, ce dont elles ont besoin, c’est d’une vue tabulaire et de la possibilité d’effectuer des calculs de fonctions réactives dessus. Demandez à un ami qui travaille dans une PME, il vous le confirmera.