Pourquoi la fonction SendKeys ne fonctionne-t-elle pas pour valider une boîte de dialogue interactive (ex: désassemblage) dans une macro Catia V5 (VBA) lancée via un CatScript, alors qu’elle fonctionne depuis l’éditeur Visual Basic ?
Le problème de l’inefficacité de SendKeys après l’exécution d’une commande interactive via CATIA.StartCommand est une limitation connue dans Catia V5, particulièrement lorsque la macro est lancée depuis un exécutable (CatScript) plutôt que l’éditeur VBA.
Voici l’explication et la solution :
-
Compréhension du Problème :
- La fonction
SendKeyssimule une frappe clavier. Elle est dépendante de la fenêtre active et de la réactivité de l’application. - Lorsqu’une macro est lancée depuis l’éditeur VBA, l’environnement de développement peut maintenir une certaine « attention » sur l’application Catia, permettant parfois à
SendKeysde fonctionner même dans des situations limites. - Cependant, lorsque la macro est lancée via un CatScript (ou tout autre exécutable externe), Catia peut ne pas être la fenêtre active au moment précis où
SendKeysest exécuté, ou la commande lancée parStartCommandpeut bloquer l’interaction.
- La fonction
-
Limitation de
CATIA.StartCommand(selon la documentation Dassault Systèmes) :- La méthode
StartCommandest conçue pour lancer une commande et l’exécuter jusqu’à sa première interaction. Elle n’est pas fiable pour les commandes interactives qui nécessitent des sélections ou des validations ultérieures (comme une boîte de dialogue de confirmation). - Extrait de la documentation DS : «
StartCommandis useful to execute one-shot (not interactive) commands, it is not safe for interactive commands. » (Traduction :StartCommandest utile pour exécuter des commandes « à usage unique » (non interactives), elle n’est pas sûre pour les commandes interactives).
- La méthode
-
Pourquoi
SendKeyséchoue :- Après
CATIA.StartCommand("Désassemblage"), Catia affiche une boîte de dialogue qui attend une interaction utilisateur (clic sur OK, Entrée).StartCommanda fait son travail en lançant la commande et en affichant la boîte. Le code VBA suivant, y comprisSendKeys, est exécuté, mais la boîte de dialogue n’est pas toujours prête à recevoir l’entrée simulée, ou le focus n’est pas correctement géré parSendKeysdans ce contexte.
- Après
-
Solution Experte : Utiliser l’API Catia Automation :
- La bonne pratique est d’éviter
SendKeyspour interagir avec les boîtes de dialogue ou les commandes interactives dans Catia.SendKeysest une méthode de dernier recours, fragile et non robuste. - Pour automatiser des actions qui impliquent des boîtes de dialogue ou des interactions, il est impératif d’utiliser directement l’API (Application Programming Interface) de Catia Automation.
- Chaque commande interactive de Catia a généralement des méthodes ou des propriétés équivalentes dans l’API qui permettent de la contrôler directement sans simuler d’interface utilisateur. Par exemple, pour un désassemblage, il faudrait rechercher les objets et méthodes liés aux assemblages (
Product,ProductDocument,ProductService, etc.) et aux opérations de structure (commeRemoveComponent,Unlink, etc.) pour effectuer l’action de manière programmatique.
- La bonne pratique est d’éviter
En résumé, le comportement observé est une conséquence de la conception de StartCommand et de la nature peu fiable de SendKeys pour l’automatisation d’interfaces graphiques. La solution robuste consiste à utiliser les méthodes et objets de l’API Catia Automation pour contrôler directement les fonctionnalités de Catia.