Bonjour, c'est une question sans solution... Du moins j'y ai perdu un temps fou et je voudrais être sûr qu'il n'y a pas quelque chose qui m'échappe.
Quand on veut associer un menu personnalisé dans le ruban à un classeur, on ne peut pas le faire en VBA à l'aide d'un objet spécifique d'Excel. Il faut créer un fichier au format xml et venir le placer soi même dans le fichier Excel, ce qui est une opération carrément étrange pour une action aussi légitime. Déjà on ne peut pas le faire depuis le classeur.
Le fichier Excel est en réalité un dossier zippé. Pour manipuler des zips dans windows, il n'y a presque rien, sinon l'objet NameSpace du FileSystemObject.
Or cette procédure très pauvre ne fonctionne que de manière asynchrone, avec des messages hors de contrôle : on sait quand ça commence, mais pas quand ça finit. Quand on veut mettre à jour le classeur avec son xml, il y a plusieurs commandes à enchaîner (effacer les deux dossiers concernés et les créer à nouveau) pour que le NameSpace ne bloque pas.
On peut arriver des fois à ce que ça marche, en ajoutant des temporisations tout à fait arbitraires. Rien de fiable, et j'ai 2000 feuilles à convertir...
J'ai essayé avec 7zip en commande, mais je rencontre là aussi des problèmes de synchronisation, beaucoup moins certes, mais pas de quoi cocher [résolu] dans ma liste des problèmes cruciaux.
J'envisage des tas de choses, comme de traiter l'ensemble des feuilles en parallèle, une action à la fois, avec un point d'arrêt pour chacune des quatre commandes NameSpace, pour que l'opérateur (moi) puisse aller vérifier qu'aucun zip n'est encore en cours.
Mais avant d'en arriver là, je voudrais avoir un point de vue différent du mien.
Partager