XL 2016 VBA - Gestion de Compléments

Dudu2

XLDnaute Barbatruc
Bonjour,

Est-il possible de faire cette manip via le code d'un classeur ?

Le problème qui motive cette question est le suivant:
En gérant par VBA les Compléments, lorsqu'on ajoute un tout nouveau fichier .xlam, le classeur ne le "voit" pas et donc on ne peut pas l' "installer" (en terminologie Excel), perso je préfère le terme "activer". Il faut fermer puis ré-ouvrir Excel (tous les classeurs) pour qu'il mette à jour sa liste de compléments (en ajout ou en suppression) et qu'elle soit accessible aux classeurs qui s'ouvrent.

J'ajoute que:
VB:
Application.OnTime Now + TimeSerial(0, 0, 2), "OpenMe"
Application.Quit

Sub OpenMe()
    MsgBox "Back"
End Sub
Fonctionne sur le plan de la ré-ouverture mais ne rafraichit pas la liste des Compléments comme le fait un fermeture / ré-ouverture manuelle car il n'y a de réelle fermeture d'Excel.

Merci par avance.
 
Dernière édition:

Dudu2

XLDnaute Barbatruc
Je n'ai pas de problème pour lister les AddIns qu'ils soient:
- Dans la librairie Office
- Dans le répertoire standard Utilisateur <Application.UserLibraryPath>
- Dans tout autre répertoire dans lequel j'ai stocké des AddIns

Le VRAI problème c'est la stupide absence d'instruction AddIns.Remove en Excel qui m'emm...bête dans l'interface que j'ai faite.

En effet, il y a bien l'instruction AddIns.Add <Dir1\MesMacros.xlam> qui va associer le Complément au fichier .xlam indiqué.
Si on supprime <Dir1\MesMacros.xlam>, on ne peut pas supprimer la référence du Complément qui est toujours associée au fichier supprimé. On la retrouve dans le Registre:
1669580750794.png


Problème -> Si on essaie de re-créer AddIns.Add <Dir2\MesMacros.xlam> ça ne fonctionne pas car il n'a pas lâché l'association d'avec le fichier supprimé.

Donc il va falloir, qu'à chaque enregistrement d'un Complément, je vérifie s'il n'existe pas déjà une association sur une fichier supprimé qui n'est pas celui sur lequel on veut recréer le Complément et avertir l'utilisateur qu'il doit aller dans le GUI pour supprimer la référence du Complément.
Excel, c'était trop dur de la créer cette méthode AddIns.Remove qui existe en PPT ?
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
re
hé hé hé et pourquoi crois tu que je passe par la ref
mais je ne vais pas te le réexpliquer tu finira par le comprendre

et pour info un addins est associé a l'application pas au fichier
c'est son référencement qui est effectué par sa ref dans le fichier
mais comme a ton habitude tu veux rien entendre

crois moi tu n'a pas tout compris
perso dynamiquement j'arrive très bien a ajouter un complément ou le supprimer dynamiquement

mais avec des projet xlam sans nom et ta façon d'interpréter ce qui se passe sur ton ordi comme etant universel ne t'aide pas

un addins c'est un fichier macro
quand tu installe un addins tu l'installe dans l'application d'ailleurs quand on code on devrait coder
application.addins.add(....)
pour le faire fonctionner dans le fichier tu dois le référencer
cela bien sur comme je l'ai dis plus haut est possible que si tu lui a donner un nom
sinon vba ne peut pas faire la différence entre vbproject du fichier( toto.xlam )et le vbproject du fichier (titi.xlam)ça coule de source
 

Dudu2

XLDnaute Barbatruc
Ce que tu fais c'est de la bidouille perso avec tes histoires de Compléments en References du Projet VBA.
Un utilisateur ordinaire va utiliser les fonctions Excel dédiées via le GUI et je vais moi aussi rester dans la voie du standard. Je le sais parce que je fournis un gros classeur de macros à un professionnel qui les place comme Complément en utilisant le GUI Excel et serait bien incapable, comme moi, de passer par des References dans le Projet VBA où il ne va jamais.

Certes, cette histoire d'absence de AddIns.Remove vient contrarier mes plans mais sur un point qui est finalement assez marginal et que je sais gérer par ailleurs. Ce n'est en rien un argument en faveur de ton approche qui n'est utilisable que par toi-même et que même moi qui ne suis plus de la dernière pluie Excel / VBA, je ne saurais pas mettre en œuvre.
 

Dudu2

XLDnaute Barbatruc
Bonjour @patricktoulon,
et je vois pas pourquoi alors tu t’ennuie si ton utilisateur passe par le gui (le dialog)
Alors là t'as bien raison !
Je me suis lancé dans cette affaire avec une version hyper-simple qui pouvait se justifier car la gestion des Compléments n'est pas aisée quand on ne connait pas le truc.

Mais au fur et à mesure que je comprenais les possibilités, j'ai dû complexifier mon code de manière disproportionnée car je pars du fichier des macros. Du coup mon classeur devient plus compliqué à utiliser que l'interface Excel !!!

Alors je vais aller au bout parce que j'ai commencé mais je pense que ça va rester au stade expérimental.
 

patricktoulon

XLDnaute Barbatruc
pourrais tu me faire un xla simple (a ta façon) avec une simple sub pour l'exemple
et un simple fichier appelant le xla(installed ou ta méthode) avec une sub appelant la sub du xla
je vais essayer de te montrer que c'est pas si compliqué que ça
étape par étape tu devrais comprendre et avec tes propres fichiers en plus
surtout et c'est essentiel nomme ton projects xla
si tu sais pas faire demande
 

Dudu2

XLDnaute Barbatruc
Je suis sûr que je pourrais comprendre ta méthode et que cela fonctionnera parfaitement.
Mais ce n'est pas dans le standard. Et le fichier sur lequel je rame travaille dans le cadre standard, je ne vais pas changer maintenant.

Je rame à cause principalement du fait que les AddIns peuvent se trouver dans un répertoire au choix de l'utilisateur (ce qui doit correspondre à 5% des cas, comme celui de @chris) et cette simple possibilité complique énormément les choses. Mais j'ai quasi-terminé et je finirai cet aprem car là j'ai des trucs à faire.
 

patricktoulon

XLDnaute Barbatruc
détrompe toi le pourcentage d'utilisateur utilisant un autre dossier que celui qui lui est dédié est bien plus important
pour tout te dire les miens sont sur un disque dur externe
demain je formate ou change de pc ou autres ben je garde tout ;)

tu parles de standard
mais sache que la méthode installed date de office 2003(me semble t il) peut être même 2000 mais j'en doute

mais ce n'est plus le standard aujourd'hui

comme jusqu''à 2007 ça fonctionnait toujours sans activer de ref , ben personne n'a juger bon de changer

depuis 2010 le installed installe bien le xla(m) mais il n'est pas utilisable

aujourd'hui pour installer un xla une simple ligne suffit

chemin="blablabla\monxla.xlam"
On Error Resume Next'le on error c'est pour le cas ou la ref serait déjà cochée
ThisWorkbook.VBProject.References.AddFromFile (chemin)'installe et active sa référence en un coup

c'est pour le désinstaller que ça se complique
car avant il faut déactiver la référence mais j'ai le truc

d'ailleurs pour tout te dire je pense même que c'est un bug qui n'est pas corrigé car le fait de pouvoir

activer ou déactiver un xla par vba a peu d’intérêt voir même est un risque de sécurité

ça m’étonnerait pas que ça finisse par disparaître d'ailleurs
 

Dudu2

XLDnaute Barbatruc
Non, je ne crois pas en l'état.
Ce serait distribuable si je faisais l'hypothèse que tous les Compléments Utilisateur vont dans le répertoire standard Application.UserLibraryPath. L'interface serait alors simple et compréhensible.
Dans cette version ce n'est pas abordable pour un utilisateur lambda.
 

patricktoulon

XLDnaute Barbatruc
ben en fait non pour le dossier car si le xla a été enregistré par le pc qui l'utilise dans le gui tu le retrouve
ce qui veux dire que une boucle sur les addins te le restituera par contre si c'est un fichier téléchargé ou copié dans un dossier quelconque et pas une premiere fois utilisé la boucle te le trouvera pas
et la tu n'a pas le choix notre super fonction FSO ;)

après je te l'accorde on peut largement simplifier le truc
 

patricktoulon

XLDnaute Barbatruc
oui je te confirme que installed n'est pas suffisant pour utiliser le xla(m)
je viens de faire le test
j'ai utiliser le gui et j'ai activé "mon_xla.xlam"
alors en effet on le voit dans vbe
1669635420717.png


toujours dans ton classeur
j'ajoute un module et je met un sub qui appelle la sub"message" du xla
on vois bien que si la référence n'est pas activée message est indéfini
ça confirme ce que j'ai essayé de t'expliquer "Installed" est caduque

demo.gif



pourtant on voit bien que installed est vrai

1669635750718.png