Question

J'ai écrit un outil de reporting de base de données basé sur Excel.Actuellement, tout le code VBA est associé à un seul fichier XLS.L'utilisateur génère le rapport en cliquant sur un bouton de la barre d'outils.Malheureusement, à moins que l'utilisateur n'ait enregistré le fichier sous un autre nom de fichier, toutes les données signalées sont effacées.

Lorsque j'ai créé des outils similaires dans Word, je peux mettre tout le code dans un fichier modèle (.dot) et l'appeler à partir de là.Si je place le fichier modèle dans le dossier de démarrage d'Office, il se lancera à chaque démarrage de Word.Existe-t-il une manière similaire de conditionner et de distribuer mon code dans Excel ?J'ai essayé d'utiliser des compléments, mais je n'ai pas trouvé de moyen d'appeler le code depuis la fenêtre de l'application.

Était-ce utile?

La solution

Vous pouvez modifier le fichier personal.xls de l'utilisateur, stocké dans le répertoire de démarrage Excel (varie selon les versions d'Office).Si vous avez beaucoup d’utilisateurs, cela peut être fastidieux.

Une autre façon de résoudre votre problème consiste à stocker la macro dans un fichier modèle (.xlt).Ensuite, lorsque les utilisateurs l'ouvrent, ils ne peuvent pas le sauvegarder sur le fichier d'origine, mais doivent spécifier un nouveau nom de fichier sous lequel le sauvegarder.L'inconvénient de cette méthode est que vous obtenez alors plusieurs copies de votre code original partout avec chaque fichier enregistré.Si vous modifiez le fichier .xlt d'origine et que quelqu'un réexécute l'ancienne macro dans un fichier .xls précédemment enregistré, les choses peuvent devenir désynchronisées.

Autres conseils

Déplacez simplement votre code dans un complément Excel (XLA) - celui-ci est chargé au démarrage (en supposant qu'il se trouve dans le dossier %AppData%\Microsoft\Excel\XLSTART) mais s'il s'agit d'un complément, pas d'un classeur, alors uniquement vos macros et votre démarrage défini les fonctions seront chargées.

Si les fonctions dépendent d'une feuille de calcul elle-même, vous souhaiterez peut-être utiliser une combinaison de modèles et de compléments.

Je distribue une partie d'une application comme celle-ci, nous avons des compléments pour Word, Excel et Powerpoint (XLA, PPA, DOT) ainsi que des versions 'ruban' Office 2007 (DOTM, XLAM et PPAM)

Le code de démarrage du complément crée des boutons de barre d'outils s'ils ne sont pas trouvés, cela signifie que dans n'importe quel classeur/document/etc, ils peuvent simplement appuyer sur le bouton de la barre d'outils pour exécuter notre code (nous avons deux boutons d'action et un bouton qui affiche une boîte de dialogue de paramètres)

Les modèles ne sont pas vraiment la voie à suivre pour le code VBA, les compléments sont définitivement la voie à suivre...

Donc, pour charger les barres d'outils au démarrage, nous utilisons quelque chose comme...(en vérifiant si la barre d'outils existe - le code s'exécutera pour chaque feuille de calcul ouverte, mais les barres d'outils sont persistantes pour la session utilisateur)

Public Sub Workbook_Open()
     ' startup code / add toolbar / load saved settings, etc.
End Sub

J'espère que cela pourra aider :)

J'utilise toujours une combinaison Add-in(xla)/Template(xlt).Votre complément crée le menu (ou d’autres points d’entrée de l’interface utilisateur) et charge les modèles selon vos besoins.Il écrit également les données que vous souhaitez conserver dans une base de données (Access, SQLServer, fichier texte ou même un fichier xls).

La première règle est de séparer votre code de vos données.Ensuite, si vous avez ultérieurement des corrections de bogues ou d’autres modifications de code, vous pouvez envoyer un nouveau complément et tous ses modèles et bases de données ne seront pas affectés.

Avez-vous étudié la possibilité de déployer le fichier Excel par ClickOnce ?

Que diriez-vous de sauvegarder un fichier Excel dans un dossier réseau avec des autorisations en lecture seule ?L'authentification peut être effectuée avec l'authentification Windows intégrée et vous n'avez pas besoin de stocker le mot de passe de connexion à la base de données dans le VBA.Ensuite, il vous suffit de distribuer un lien vers cet emplacement à vos utilisateurs une seule fois.Si vous effectuez une mise à jour, vous modifiez uniquement les données de ce dossier sans préavis à l'utilisateur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top