ADD-IN : mode lecture en cas d'absence?

Imy

XLDnaute Nouveau
Bonjour,

J'apprends à utiliser les add-in d'Excel. Jusqu'à présent j'avais un fichier qui a pris du volume, voilà pourquoi cela me conduit à utiliser le concept de Add-in. Concrètement, je divise mon programme en deux fichiers, l'un comme add-in regroupant les feuilles modèles et l'essentiel des fonctions, l'autre étant la solution générée par l'add-in et ayant le moins de fonctions possibles de manière à ce que le fichier soit le moins volumineux !

Dans le classeur non add-in, je mets une référence VB de manière à ce que les appels des fonctions qui y figurent soient reconnus par le compilateur.

C'est là que le bât blesse : l'ensemble de deux fichiers se trouvent être dans deux endroits distincts sur une clé USB ; Le programme se veut être prévu pour travailler indistinctement depuis la clé sur différent postes de travail sans pour autant configurer ou laisser quelconques traces du programme après son utilisation et la clé retirée.
Cela conduit à ce que le chemin de la référence ne soit pas fixe : non pas que les fichiers vont changer de place dans la clé, mais la lettre de la clé peut, elle, changer.
Cela signifie, par exemple, que sur un poste particulier la clé n'est plus sur f:, mais sur g:, la référence de mon classeur ne pointe plus l'add-in.

A défaut d'avoir trouvé une solution à cette référence volatile, sans changer tout les excel des postes sur lequel le programme viendrait à être exécuté, je tolère que la plupart du temps la lettre de la clé soit bien celle reconnue par mon add-in, f:...
Mais dans le cas où cela n'est pas, je ne voudrais pas que le programme chante à chaque démarrage, ou clique sur une feuille que l'add-in est absent !

En effet, l'absence de l'add-in conduit à ce que les fonctions, les définitions dans le classeur ou les feuilles ne soient plus reconnues et Excel le rappel à chaque lecture des lignes de codes.

Je cherche à faire une sorte de mode lecture, une sorte de lecture seule, où les cellules ne sont plus sélectionnables, seulement lisibles (y compris les cellules non verrouillées). Concrètement, en tête, mon programme détecte que l'add-in est absent, il passe en mode lecture en prévenant l'utilisateur, et toutes les erreurs de fonctions ou définitions non reconnues sont oubliées et non rappelées!

J'ai pensé pour cela à diverses solutions, comme l'utilisation de fonction conditionnée à une variable 'ModeLectureEnCours', mais cela ne fonctionne pas pour les définitions (notamment dans les feuilles), puis sinon à suspendre les événements. Cette dernière solution me paraissait intéressante, mais je ne veux pas que mon fichier ne bloque le fonctionnement d'autres fichiers succeptibles d'être ouverts. En effet, si j'ouvre mon classeur, qui suspend les évenements, comment détectera-t-il alors que le focus s'est déplacé sur un autre classeur de manière à ce qu'il réactive les événements...

Bon voilà mon impasse, si quelqu'un pourrait me faire avancer, merci d'avance!

PS :
Activer un mode lecture suppose que l'on détecte intentionnellement l'absence de l'add-in. Comment faire, si l'add-in n'est pas volontairement défini dans les add-in d'excel ; il apparait comme classeur dans VBE, mais n'est pas lisible comme Workbooks... Décidemment Excel donne du fil à retordre, ou bien c'est moi:confused:?
 

Imy

XLDnaute Nouveau
Re : ADD-IN : mode lecture en cas d'absence?

Bon voilà, bidouillages, essais, bricolages et quelques gageures après, il me semble avoir une solution potable pour définir un mode lecture raisonnable en cas d'absence de l'add-in.
Le problème de la référence de l'add-in n'est pas résolu mais toléré : on enregistre la référence de l'add-in selon un chemin prédéterminé ; Cela permet d'éviter, si la configuration du poste est plutôt standard, de paramétrer à chaque fois l'Excel de destination ; Dans la mesure, où l'on veut néanmoins que le logiciel fonctionne dans la plupart des cas, une note explique qu'en définissant explicitement l'add-in dans les menus d'Excel, on peut contourner le défaut du chemin prédéterminé si celui-ci ne cible finalement rien.
Pour la détection de l'add-in, j'ai suivi ce que j'ai déjà précisé dans cette discussion, à savoir détecter le nom du classeur add-in caché faisant référence à l'add-in.
Ensuite, dans le classeur non add-in, j'ai utilisé une variable pour stocker la présence ou non de l'add-in, renvoyée par la fonction utilisant le principe de détection précédent. Cela me force néanmoins à doubler tous les évenéments communs du classeur (non add-in) avec des procédures dans un module standard, et à ne laisser dans ces définitions des événements du classeur qu'un appel à ces dernières procédures conditionnés par la variable stipulant si l'add-in fait partie de l'affaire ou non.
Voilà pour éviter les problèmes d'appel de fonctions non reconnues par Excel dans le classeur devis si l'add-in fait défaut. Pour les déclarations, que l'on ne peut conditionner à la variable de détection de add-in, j'ai utilisé, dans une longue réécriture du code en objet (plutôt qu'utiliser les modules standards) des appels à liaisons tardives (je crois que cela s'appelle comme ça) aux définitions, ce qui est autorisé avec les objets. En clair, on définit en tant qu' 'object' et puis au cours de l'exécution on attribue à l'objet un objet ayant notre définition particulière et ce dans une procédure (conditionnable à la variable de présence de l'add-in).
Pour les variables propres au classeur non-addin, nécessairement définies dans l'add-in de manière à ce qu'elle soient aussi reconnues dans celui-ci, j'ai créé une variable objet globalisant toutes ces dernières dans l'add-in et que je définie à chaque activation d'un classeur devis qui conserve dans sa portée, les données avec une variable tampon définie dans le classeur non add-in...

Voilà, jusqu'à présent, cela semble fonctionner sans de conséquence trop ennuyeuse... Ce n'est pas très élégant, cela se résume à contourner sans cesse les contraintes d'Excel!
 

safira218

XLDnaute Nouveau
Re : ADD-IN : mode lecture en cas d'absence?

Bonjour Imy, MJ13 et Pierrot 93
Je tombe sur ce fil par hasard, et me permets d'intervenir car pour moi chdrive ne change absolument pas la configuration ni du poste, ni d'excel, mais uniquement le "positionnement" des lectures par défaut (dir etc).
C'est pourquoi la lecture en diagonale que je fais du problème posé me laisse penser que la bonne solution serait une instruction du type on error, déclenchée par l'absence de l'add'in, et permettant la correction du chemin d'accès à ce moment-là vers cet add'in.
Mais je peux n'avoir rien compris, auquel cas je m'excuse par avance de cette grossière intrusion.
@ vous lire, cdlt

Thanks for sharing. It's great
 

Discussions similaires

Statistiques des forums

Discussions
312 321
Messages
2 087 265
Membres
103 501
dernier inscrit
talebafia