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:?
 

Pierrot93

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

Bonjour Imy, Michel:),

je sais pas si cela pourra t'aider, code ci-dessous te donne toutes les xla dispo sur la machine + t'indique si ellle est installée ou pas...
Code:
Dim i As Byte
For i = 1 To AddIns.Count
    Cells(i, 1) = AddIns(i).Name
    Cells(i, 2) = AddIns(i).Installed
Next i
bon après midi
@+
 

Imy

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

Merci pour ces propositions...

En effet, j'ai vu qu'il existait cette collection addins. Mais pour que mon addin y figure, il faut définir celui-ci dans le menu excel, à chaque fois, et une fois terminé le supprimer... Ouais, cela ne me semble pas trop intéressant de configurer excel à chaque utilisation. D'autre part, cela ne change pas le fond de mon problème : dans la mesure que l'add-in y figure ou pas, comment va réagir mon classeur et sa référence qui n'aboutit pas? On revient à mon point de départ:(

Que voulez-vous dire par Chdrive? Il me semble que cela change effectivement la lettre du lecteur sur le poste (je ne veux pas faire de telles modifications sur les postes, imaginer la somme de conséquences:rolleyes:!) ou bien cela crée-t-il une lettre de lecteur, comment dire, virtuelle seulement pour mon classeur?
 

MJ13

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

Re, Bonjour Pierrot


Imy: le problème est que c'est ton appli, donc on ne peut pas faire grand chose, vu qu'on ne sais pas comment tu l'as développé. On peut juste te donner des pistes. C'est le principe de ce forum ;).

Pour Chdrive, tu dois aller voir dans l'aide du VBE (F1) :).
 

Imy

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

J'y suis déjà allé ! et chdrive change bien la lettre du lecteur. Pour moi, pour l'instant, je l'exclus pour la bonne raison que je ne veux pas tout changer la configuration d'un poste de travail dont je ne connais rien.

Voilà comment j'ai fait pour créer mon add-in : j'ai pris mon gros fichier initial qui contient des feuillets modèles et l'ensemble des fonctions ; j'ai créé un nouveau classeur où se trouve le minimum et qui copie les feuillets modèles de l'add-in tout en utilisant pour son bon fonctionnement les fonctions de ce dernier. J'ai enregistré mon mon gros fichier en tant qu'add-in (.xla) et j'ai basculé la propriété addin du classeur de celui-ci(tout disparaît alors). Dans mon nouveau classeur, je mets une référence VB à mon addin ouvert, et voilà le tout fonctionne (avec quelques ajustements du code pour que mes anciennes fonctions prennent en compte les deux fichiers).
A chaque ouverture de mon classeur, la référence, correctement pointée, ouvre discrètement le classeur add-in, et puis on ne voit que du feu de l'existance de l'addin (tant que cela fonctionne!;))
Je n'ai pas eu besoin de configurer l'existence de l'add-in dans le menu Excel, et au fond cela m'arrange bien, puisque je ne veux pas faire de configuration d'Excel... (c'est pour cela, je me suis dis, que mon classeur add-in, ne figure pas dans la collection addins de l'application aussi...)

Si cela ne fonctionne pas, parce que ma référence fait défaut par exemple, alors comment gère-t-on cela d'habitude? Je veux dire que lorsqu'on fait un add-in, on ne pense pas à la possibilité que celui-ci puisse faire défaut? Se contente-t-on de laisser Excel avertir et réavertir par des messages intempestifs l'absence de la référence ou bien son imcompréhension dans telle ligne de code qu'il s'apprête à exécuter?

A cela une solution, c'est lorsqu'on vient d'ouvrir le fichier, que l'on comprend que le poste de travail ne connait pas l'add-in dont semble utiliser notre fichier, on le ferme,et à la réouverture on demande de désactiver les macros... pour pouvoir le lire tranquillement au moins? (c'est pas trop pratique!)

En cherchant, ici ou là, une autre solution serait d'utiliser une référence dynamique (i.e. on crée la référence VB au démarrage du classeur) ; Mais là aussi (Excel n'est pas facile à dompter:mad:), pour cela, il faut utiliser les objets vbcomponent, bibliothèque autorisée par Excel uniquement si on coche comme quoi on fait confiance au code (et ce pour tous les classeurs alors.... pour la sécurité, ce n'est plus bon!) , bref je tourne en rond.
 
Dernière édition:

dmc

XLDnaute Occasionnel
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
 

Imy

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

ni d'excel, mais uniquement le "positionnement" des lectures par défaut (dir etc).

Que voulez-vous dire exactement s'il vous plaît?


Je commence à me demander si l'addin est si pertinent pour mon projet. Je viens de découvrir que la déclaration générale des variables et des constantes n'était pas si évident que cela. En effet, pour mon projet, j'ai un add-in chargé (de quelconque manière) et il traite différents classeurs non-addin ouverts simultanément. Suivant cela, les variables et autres constantes devraient être déclarées dans les classeur non add-in de façon à ce que leur contenu reste bien spécifique à ces classeurs. Hors, je dois déclarer les dites variables dans l'add-in sans quoi les fonctions qui y figurent bloquent lorsqu'elles font appel à ces variables (la déclaration du classeur semblant donc ne pas prendre effet ici, les variables ne sont plus reconnues). En somme, le contenu de ces variables ne peuvent être spécifique à un classeur non addin, elles se doivent d'être propres à l'add-in, condamant par là à n'ouvrir qu'un seul classeur non addin dans excel. (encore une contrainte, une de trop ?) Ou bien alors utiliser l'add-in au minimum, c'est ce que je vois jusquà présent, c'est à dire, utiliser le classeur add-in que pour du stockage passif, d'objets, dont l'utilisation courante dans les classeurs non add-in se fait par l'entremise d'objets dupliqués, non liés à l'add-in. Exit toutes déclarations de niveau supérieur dans les modules standards non objets (existant dans VBA 6.0), car elles sont trop ambigües?
 

Imy

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

En effet, j'ai vu qu'il existait cette collection addins. Mais pour que mon addin y figure, il faut définir celui-ci dans le menu excel, à chaque fois, et une fois terminé le supprimer... Ouais, cela ne me semble pas trop intéressant de configurer excel à chaque utilisation. D'autre part, cela ne change pas le fond de mon problème : dans la mesure que l'add-in y figure ou pas, comment va réagir mon classeur et sa référence qui n'aboutit pas? On revient à mon point de départ

En fouillant sur internet, j'ai fini par trouver cela. En effet, comme je n'ai pas paramétré l'application de l'existence explicite de l'addin dans le menu 'macros complémentaires', il ne figure pas dans la collection addins de l'objet application dans vba. Mais cela, n'a finalement pas autant d'importance. Pour détecter mon addin figurant seulement dans la liste des projets ouverts dans VBE, il faut, comme classeur caché, chercher dans la collection workbooks de l'application le nom du fichier associé à l'addin. Et par miracle, sans que mon classeur addin ne figure dans cette collection (en l'observant depuis l'espion), il est reconnu comme objet et dès lors est apte à être manipulé. Si le classeur addin est absent, l'objet est nothing. Le principe de détection est là...
 

Imy

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

Merci pour ce lien. C'est intéressant, c'est le principe de référence dynamique auquel j'ai dû faire allusion dans un des posts précédents. L'essentiel est là, toutes les difficultés à propos de la référence sont effacées...
Mais il y a un 'mais' (je commence à me faire à l'idée qu'il y a toujours un mais avec Excel!;)) : en effet, pour que cela fonctionne, il faut utiliser l'objet 'VBProject' (L'objet est disponible en ajoutant une référence VB supplémentaire).
Hors pour la bonne fortune, et des raisons de sécurités, cette classe a un accès limité : il faut déclarer dans les menus d'excel (sur le poste de travail) de 'Faire confiance au code' ; En cochant, la classe est alors reconnue normalement. Mais cela revient à configurer l'Excel du poste et ce sur un sujet d'autant plus sensible qu'il s'agit de la sécurité ; D'autant plus, il me semble que l'effet de la coche a une portée sur tous les classeurs : si mon classeur est sûr, on risque que les autres ne le soient pas...
 

bond

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

Très prolixe Imy:D, j'ai parcouru en diagonale [aussi], et je me demandais Workbbok.FullName ne serait pas une fonction interessante en récupérant le lecteur dans une variable (?)...
 

Imy

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

Oui en effet, j'écris, j'écris...! Mais je veux bien me faire comprendre sur un sujet un peu costaud!

je me demandais Workbbok.FullName ne serait pas une fonction interessante en récupérant le lecteur dans une variable

Non je ne pense pas (si je comprends bien votre pensée), le problème essentiel n'est pas d'avoir la lettre du lecteur, mais de dire à excel cette lettre...
 

Pierre31

XLDnaute Junior
Bonjour à tous,
Imy, peux tu essayer la solution suivante:


Dim Chemin, chemin2, MasterChemin, NewChemin As String, Delta, Lchemin, Lchemin2 As Integer
Chemin = ThisWorkbook.Path
chemin2 = "\Da" ' Chemin ou se trouve le fichier dans l'application
Lchemin = Len(Chemin)
Lchemin2 = Len(chemin2)
Delta = Lchemin - Lchemin2
MasterChemin = Mid(Chemin, 1, Delta) 'Chemin dans lequel se trouve l'application
NewChemin = MasterChemin & "\Da" & "\" ' Chemin ou l'on va chercher de nouvelles informations

C'est juste une piste

Cordialement
Pierre
 

Imy

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

Merci Pierre31. Mais Le problème est de dire que la référence (son chemin) se trouve là. Et ce n'est plus seulement un problème de code, mais aussi de la gestion du logiciel par le code....
 

Discussions similaires

Statistiques des forums

Discussions
312 321
Messages
2 087 233
Membres
103 497
dernier inscrit
JP9231