Vous êtes sur la page 1sur 9

CRER UN ADDIN AUTOMATION POUR EXCEL, Tutoriel N743,

Page 1 sur 9

CS VB, VB.NET ASP.NET,ASP C, C++ ColdFusion PHP Javascript Delphi Flash Java Graphisme Irc Assembleur C# Mobilit SQL Foxpro Python Regex Flex Windev

Ce site au dmarrage

Accueil

Codes

Tutoriels

Forum
dans

Livres
Rechercher

Emploi

Services

Connexion

Trouver un code source :

Tout le site

[ Dernires recherches ]

Accueil > Tutoriels > Applications > CRER UN ADDIN AUTOMATION POUR EXCEL

D'autres ressources pour interfaces dotnet interop dans excel 2003 si cette page ne contient pas votre bonheur

CRER UN ADDIN AUTOMATION POUR EXCEL


Annonces Google

EXCELDOTNET : PROGRAMMER EXCEL EN DOTNET SANS VBA NI VSTO

QlikTech QlikView
Outil d'analyse pour tout le monde. Regardez la demo. www.QlikView.com

EXPORTER UN DATAGRIDVIEW VERS EXCEL CRER UN VRAI OCX EN DOTNET EXPORTER UNE BASE DE DONNEES MS

Information sur le tutoriel


Dpos par ShareVB le 20/09/2007 19:28:22 Dans la catgorie Applications Vu : 21 639 fois Note:

ACCESS VERS MYSQL OU POSTGRESQL XLDOTNET : QUITTER EXCEL SANS

Aucunenote

Site perso Ecrire un message priv l'auteur Commentaire sur cette source (9) Ajouter un commentaire et/ou une note

Description
Ce tutoriel montre comment crer un Addin Automation pour Excel permettant de fournir des fonctions utilisables dans les formules des cellules.

Annonces Google

Tutorial Crer un Add-in Automation pour Excel en C# Introduction


Depuis la version 2002 (XP) dOffice, Excel propose le concept dAdd-In Automation. Ceci est donc disponible dans Excel XP, Excel 2003 et Excel 2007. Ce concept dAdd-In Automation permet daccder aux mthodes publiques des Dll COM en tant que Fonctions Dfinies par lUtilisateur, cest--dire de pouvoir les utiliser directement dans les formules des cellules. Cet article dcrit la manire de construire un Add-in Automation pour Excel et de le dployer. Je me suis inspir fortement de Create an Automation Add-In for Excel using .NET.

Nos sponsors Version VB6


Vous pouvez tout fait dvelopper un tel Add-in avec Visual Basic 6 avec les options par dfaut.

Pour cela, il vous suffit de : Crer un projet Dll ActiveX Ajouter un module de classe Dclarer et implmenter vos mthodes dans ce module de classe :

Derniers Blogs
AFTERWORKS DES COMMUNAUTS MICROSOFT SHAREPOINT : INTRT DE ZIPPER UN BACKUP [WINDOWS SERVER 2008 R2] CONFIGURATION

Option Explicit

Public Function TestAutomationAddInt(ByVal a As Integer, ByVal b As Integer) As Integer TestAutomationAddInt = a + b End Function

MEILLEURS VUX ET PLUS POUR 2012

par themit

SOMVC - TEMPLATE DE SOLUTION ASP.NET MVC3

La suite

RSS

'Un test de macros prenant deux flottants et en faisant la somme Public Function TestAutomationAddDouble(ByVal a As Double, _ ByVal b As Double) As Double TestAutomationAddDouble = a + b End Function

Forum
RE : [DPLAC VB -> C#]PROJET C# ETUDE DE RE : [DPLAC VB -> C#]PROJET C# ETUDE DE RE : PROJET C# ETUDE DE FONCTION RE : PROJET C# ETUDE DE FONCTION
par NHenry par jack

http://www.csharpfr.com/tutoriaux/CREER-ADDIN-AUTOMATION-EXCEL_743.a... 03/01/2012

CRER UN ADDIN AUTOMATION POUR EXCEL, Tutoriel N743,

Page 2 sur 9

La suite
'un test avec une plage de cellules Public Function TestAutomationAddRange(ByVal r As Range) As Double 'On peut trs bien accder aux valeurs des plages de cellules 'Par contre, il peut arriver que dfinir les proprits 'des cellules gnre une erreur 800A03EC, 'erreur qu'Excel renvoie dans 90% des cas o il y a une erreur 'dans la dfinition de la proprit 'Par exemple, je n'ai pas trouv de solution pour dfinir 'les proprits de Range.Interior... 'par contre, dfinir la couleur de la police se fait sans erreur

RSS

Ct IT
Utiliser Office 365 pour un projet d?quipe Utiliser Office 365 pour un projet d?quipe SharePoint 2007 : Installation du Service Pack SharePoint 2007 : Installation du Service Pack Installation de SQL Server DENALI CTP3 Mise jour de Windows 2003 R2 vers Upgrade de SQL Server 2005 vers SQL Server

La suite

RSS

Offres d'emploi
Recherche dveloppeur Web Recherche Dveloppeur/Intgrateur (H/F) Recherche un Dveloppeur web expriment Recherche Dveloppeur Jeux iOS Recherche Dveloppeur Web CDI Recherche Dveloppeur Web & Multimdia Recherche Dveloppeur DotNet confirm

On Error GoTo erreur Dim ret As Double Dim i As Integer, j As Integer ret = 0 'fait la somme des valeurs des cellules de la plage fournie For i = 1 To r.Cells.Rows.Count For j = 1 To r.Cells.Columns.Count Dim d As Double d=0 Dim cell As Range Set cell = r.Cells(i, j) 'test si la valeur est dfinie et si c'est un entier... If Not IsEmpty(cell.Value) Then d = d + val(cell.Value2) End If ret = ret + d Next Next TestAutomationAddRange = ret Exit Function erreur: MsgBox Err.Description End Function

Dposer une offre

La suite

RSS

Formations Video
Contao : Les fondamentaux ZBrush 4 : Les fondamentaux Microsoft Office Excel 2003 : Les Microsoft Office Word 2003 : Les Drupal 7 : Les fondamentaux Photoshop Elements 10 : Les fondamentaux Premiere Elements 10 : Les fondamentaux

La suite

RSS

Appels d'offres
Site internet pour client Budget : 4 000 Developpement site de voyages pour un pays Budget : 3 000 Developpement module php pour application Budget : 6 000
La suite RSS

Compiler Enregistrer votre dll avec regsvr32 votre_dll.dll

Logiciels
Academy System (16.9.2.0) PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO

Pour dboguer, il suffit de faire Ctrl-F5 puis de choisir Dmarrer le programme / Start external program (galement accessible dans les proprits du projet), de cliquer sur puis de choisir le fichier excel.exe dans le dossier dinstallation dOffice. Une fois que vous avez ajout votre DLL dans la liste des macros Automation comme indiqu dans la partie Tester , si vous mettez des breakpoints dans votre code, vous pourrez dboguer directement votre code lexcution (recalcule) de la macro.

LettresFaciles 2011 (8.0.0.1) DocTranslate (V3.0.1.0) sDEVIS-FACTURES vlPRO (7.3.0.2)

Version .Net
Dveloppement de base
Voici la mthode gnrale : Crer une bibliothque de classes par exemple TestAutomationAddin Dans les proprits du projet, dans longlet Compilation / Build , vrifier que Enregistrer pour Interoprabilit COM / Register for COM Interop est coch. Toujours dans les proprits du projet, dans longlet Application , cliquer sur Information sur lAssemblage / Assembly Information , puis vrifier que Rendre lassemblage visible de COM / Make assembly COM-Visible est coche. Ajouter la rfrence COM (clic droit sur le projet, Ajouter une rfrence / Add reference , onglet COM) : Microsoft Excel X.0 Object Library (o X peut tre 10 (XP/2002), 11 (2003), 12 (2007)). Renommer la classe existante Class1 en TestAutomationAddinClass par exemple. Remplacer le code contenu dans cette classe par le code suivant :

+ de logiciels tlcharger

Vidos drles
Halloween Party Terry Tate Office Linebacker Superbowl 2003 Jeu vido instructif C'est un vritable vol ! Banana Song Comment attraper la grippe A Parodie Pub Window 7

La suite

RSS

Sondage...
using System; using System.Collections.Generic; using System.Text; using System.Runtime.InteropServices; using Microsoft.Office.Interop.Excel; using System.Windows.Forms;

namespace TestAutomationAddin { /// <summary> /// Interface dfinissant les "macros" qui seront disponibles

http://www.csharpfr.com/tutoriaux/CREER-ADDIN-AUTOMATION-EXCEL_743.a... 03/01/2012

CRER UN ADDIN AUTOMATION POUR EXCEL, Tutoriel N743,

Page 3 sur 9

/// dans Excel /// </summary> [InterfaceType(ComInterfaceType.InterfaceIsDual)] [Guid("5B016456-A7A0-4cf0-A738-DCC9B400251D")]

Vous tes
Un Homme Une Femme
Sondage fourni par ProSondage.com

public interface ITestAutomationAddin { //un test avec des entiers int TestAutomationAddInt(int a,int b); //un test avec des floattants double TestAutomationAddDouble(double a, double b); //un test avec une plage de cellule double TestAutomationAddRange(Range r); }

/// <summary> /// Classe implmentant les "macros" dfinies /// dans l'interface prcdente /// </summary> [ClassInterface(ClassInterfaceType.None), ComDefaultInterface(typeof(ITestAutomationAddin))] public class TestAutomationAddin : ITestAutomationAddin { #region ITestAutomationAddin Members

Statistiques
1 863 837 membres 174 nouveaux aujourd'hui 16 132 membres club

Comparez les prix

//Un test de macros prenant deux entiers et en faisant la somme public int TestAutomationAddInt(int a, int b) { return a + b; } Motorola MILESTONE Entre 489 et 489 Visiter le guide achat

//Un test de macros prenant deux flottants et en faisant la somme public double TestAutomationAddDouble(double a, double b) { return a + b; }

CalendriCode
Janvier
L M M J V S

2012
D 1

//un test avec une plage de cellules public double TestAutomationAddRange(Range r) { //On peut trs bien accder aux valeurs des plages de cellules //Par contre, il peut arriver que dfinir les proprits //des cellules gnre une erreur 800A03EC, //erreur qu'Excel renvoie dans 90% des cas o il y a une erreur //dans la dfinition de la proprit //Par exemple, je n'ai pas trouv de solution pour dfinir //les proprits de Range.Interior... //par contre, dfinir la couleur de la police se fait //sans erreur

2 9 16 23 30

3 10 17 24 31

4 11 18 25

5 12 19 26

6 13 20 27

7 14 21 28

8 15 22 29

Consulter la suite du CalendriCode

Photothque

double ret = 0; try { //fait la somme des valeurs des cellules //de la plage fournie for (int i = 1; i <= r.Cells.Rows.Count; i++) { for (int j = 1; j <= r.Cells.Columns.Count; j++) { double val = 0; Range cell = (Range)r[i, j]; //test si la valeur est dfinie et //si c'est un entier... if (cell.Value2 != null) Visiter la photothque

CS Tool Box

http://www.csharpfr.com/tutoriaux/CREER-ADDIN-AUTOMATION-EXCEL_743.a... 03/01/2012

CRER UN ADDIN AUTOMATION POUR EXCEL, Tutoriel N743,

Page 4 sur 9

Double.TryParse(cell.Value2.ToString(), out val); ret += val; } } } catch (Exception ex) { MessageBox.Show(ex.Message); }

return ret; }

/// <summary> /// Permet d'enregistrer nos macros de sorte /// qu'Excel puisse les voir /// </summary> /// <param name="t"></param> [ComRegisterFunctionAttribute] public static void RegisterFunction(System.Type t) { Microsoft.Win32.RegistryKey key ; //Excel recherche les composants COM "Programmable" Microsoft.Win32.Registry.ClassesRoot.CreateSubKey("CLSID\\{" + t.GUID.ToString().ToUpper() + "}\\Programmable"); //De plus, afin de ne pas avoir de message indiquant //que "mscoree.dll" est introuvable //On dfinit son chemin absolu (normalement //dans C:\Windows\System32\mscoree.dll" key = Microsoft.Win32.Registry.ClassesRoot.CreateSubKey( "CLSID\\{" + t.GUID.ToString().ToUpper() + "}\\InprocServer32"); key.SetValue("", Environment.GetFolderPath(Environment.SpecialFolder.System) + @"\mscoree.dll"); }

/// <summary> /// Retire l'enregistrement de nos macros (nettoyage) /// </summary> /// <param name="t"></param> [ComUnregisterFunctionAttribute] public static void UnregisterFunction(System.Type t) { Microsoft.Win32.Registry.ClassesRoot.DeleteSubKey ("CLSID\\{" + t.GUID.ToString().ToUpper() + "}\\Programmable"); }

#endregion } }

Compiler le projet pour produire bin\Debug\TestAutomationAddin.dll

Tester
Tester dans Excel 2002 (XP), Excel 2003

Dans le menu Outils, cliquer sur Complments Dans la bote de dialogue Complments, cliquer sur Automatisation. Dans la liste des serveurs COM enregistrs, slectionner votre Add-In Automation TestAutomationAddin. TestAutomationAddinClass et cliquer sur OK. Votre Add-In Automation devrait apparatre dans la bote de dialogue des Complments. Cliquer OK pour fermer la bote de dialogue des Complments.

http://www.csharpfr.com/tutoriaux/CREER-ADDIN-AUTOMATION-EXCEL_743.a... 03/01/2012

CRER UN ADDIN AUTOMATION POUR EXCEL, Tutoriel N743,

Page 5 sur 9

Dans une cellule, ajouter =TestAutomationAddDouble(2,3 ;3,2) Normalement, la cellule devrait afficher 5,5 Dans une autre cellule, ajouter =TestAutomationAddRange(A3:B5) Normalement, cela devrait faire la somme des valeurs que vous avez saisi dans la plage A3:B5

Tester dans Excel 2007

Cliquer sur le Bouton Microsoft Office, puis sur le bouton Options Excel. Cliquer sur Complments. Dans Grer, choisir Complments Excel, puis cliquer sur Atteindre. Dans la bote de dialogue Complments, cliquer sur Automatisation. Dans la liste des serveurs COM enregistrs, slectionner votre Add-In Automation TestAutomationAddin. TestAutomationAddinClass et cliquer sur OK. Votre Add-In Automation devrait apparatre dans la bote de dialogue des Complments. Cliquer OK pour fermer la bote de dialogue des Complments. Dans une cellule, ajouter =TestAutomationAddDouble(2,3 ;3,2) Normalement, la cellule devrait afficher 5,5 Dans une autre cellule, ajouter =TestAutomationAddRange(A3:B5) Normalement, cela devrait faire la somme des valeurs que vous avez saisi dans la plage A3:B5

Dbogguer
Pour dboguer facilement, il suffit dans les proprits de votre Bibliothque de classes, dans longlet Dbogage / Debug puis de choisir Dmarrer le programme externe / Start external program , de cliquer sur puis de choisir le fichier excel.exe dans le dossier dinstallation dOffice. Une fois que vous avez ajout votre DLL dans la liste des macros Automation comme indiqu dans la partie Tester , si vous mettez des breakpoints dans votre code, vous pourrez dboguer directement votre code lexcution (recalcule) de la macro.

Dploiement .Net
Dploiement manuel
Pour enregistrer la dll aprs lavoir dplace dans un autre dossier, excuter regasm avec loption /codebase et le nom du fichier de la dll (regasm doit se trouver dans C:\Windows\Microsoft .Net\Framework\vX.Y.Z\). Si vous obtenez une warning du fait que lassembly nest pas sign, ce nest pas grave.

Dploiement par projet de dploiement


Pour que lenregistrement se fasse correctement lors de linstallation par un projet de dploiement, il est ncessaire dajouter une custom action .

La procdure est la suivante : Dans le projet de votre bibliothque de classe, ajouter un Installer nomm SelfRegisterInstaller avec le code suivant lintrieur :

using System; using System.Collections.Generic; using System.ComponentModel; using System.Configuration.Install; using System.Runtime.InteropServices;

namespace TestAutomationAddin { /// <summary> /// Classe permettant d'enregistrer votre DLL pour Interop COM /// avec l'option CodeBase et l'appel systmatique /// des mthodes ComRegisterFunction/ComUnregisterFunction /// </summary> [RunInstaller(true)] public partial class SelfRegisterInstaller : Installer { public SelfRegisterInstaller() { InitializeComponent(); }

//enregistre l'assembly et appelle les mthodes marques //comme ComRegisterFunction public override void Install(System.Collections.IDictionary stateSaver) { base.Install(stateSaver); //appel le service d'enregistrement //interop COM "Regasm /codebase" RegistrationServices reg = new RegistrationServices(); reg.RegisterAssembly(this.GetType().Assembly, AssemblyRegistrationFlags.SetCodeBase); } //dsenregistre l'assembly et appelle les mthodes marques //comme ComUnregisterFunction

http://www.csharpfr.com/tutoriaux/CREER-ADDIN-AUTOMATION-EXCEL_743.a... 03/01/2012

CRER UN ADDIN AUTOMATION POUR EXCEL, Tutoriel N743,

Page 6 sur 9

public override void Uninstall(System.Collections.IDictionary savedState) { //dsenregistre de l'interop COM RegistrationServices reg = new RegistrationServices(); reg.UnregisterAssembly(this.GetType().Assembly); base.Uninstall(savedState); } } }

Dans le projet de Setup, dans l Editeur du systme de fichiers , ajouter la sortie principale du projet de Bibliothque de classes dans le dossier Dossier de lapplication / Application Folder dans l Editeur dactions personnalises (clic droit sur le projet de Setup, Vues / View ), ajouter une action personnalise dans Install et Uninstall en choisissant Sortie principale / Primary Output (dans le dossier Dossier de lapplication / Application Folder )

Tout ceci permet dexcuter les mthodes ComRegisterFunction de la DLL Addin Automation linstallation et la dsinstallation.

Points Importants
La bibliothque de classes doit tre enregistre avec regasm.exe ou en cochant loption Enregistrer pour interoprabilit COM . Pour que Excel trouve notre Add-In Automation, il faut ajouter une sous cl Programmable dans lenregistrement de la classe en tant que classe COM (dans HKCR\CLSID\{xxx}\.) . Ceci doit se faire dans deux mthodes static marques avec les attributs ComRegisterFunction et ComUnregisterFunction. Pour empcher le message derreur mscoree.dll est introuvable, il faut changer la valeur inscrite dans la sous cl InProcServer32, pour mettre le chemin complet de mscoree.dll . Il est ncessaire de marquer la classe qui implmente le complment Automation avec lattribut ClassInterface. Vous avez ensuite deux solutions pour donner une valeur cet attribut : ClassInterface.None : il faut alors dfinir une interface par dfaut avec toutes les mthodes accessibles par Excel quimplmente la classe marque. Cela vous permet de dfinir explicitement ce qui est expos. Cest la mthode recommande pour les dveloppements de production. ClassInterface.AutoDual : il suffit juste de dfinir et dimplmenter les mthodes directement et linterface COM sera gnre automatiquement. Cette mthode est non recommande car les identifiants des interfaces peuvent changer lors que la classe change. On peut marquer linterface par dfaut avec lattribut InterfaceType pour spcifier comment sont exposes ses mthodes : ComInterfaceType.InterfaceIsIDispatch : les mthodes sont rsolues lexcution et ne sont donc pas incluses dans la typelib gnre pour la bibliothque de classe. On pourra les utiliser mais elles napparatront pas dans lIntellisense ou dans la liste des macros disponibles. ComInterfaceType.InterfaceIsIUnknown : les mthodes sont rsolues la compilation et sont donc incluses dans la typelib gnre pour la bibliothque de classe. On pourra les utiliser et elles apparatront dans lIntellisense et dans la liste des macros disponibles. ComInterfaceType.InterfaceIsDual : les mthodes peuvent tre rsolues lexcution ou la compilation et sont donc incluses dans la typelib gnre pour la bibliothque de classe. On pourra les utiliser et elles apparatront dans lIntellisense et dans la liste des macros disponibles. On peut prciser explicitement linterface par dfaut de la classe de nos macros Automation avec lattribut ComDefaultInterface. Il est ncessaire de dfinir au moins le Guid de linterface par dfaut afin de ne pas avoir renregistrer la bibliothque de classe chaque fois que lon ajoute/supprime une mthode cet interface. Pour faire lenregistrement correctement, on utilise les RegistrationServices dans un Custom Installer (un composant qui drivent de la classe Installer et qui est marque avec lattribut RunInstaller(true)) et qui sera appel notre demande par une Custom Action.

Problmes courants
Quand vous dveloppez des Addins Automation, vous pouvez vous trouver confront un certain nombre de problmes : Problme dinstallation : l, ca va il y a des solutions Problme 0x800A03EC lors de lexcution des mthodes exposesl par contre

Problme denregistrement
Description Quand vous enregistrez votre DLL .Net en tant quAdd-in Automation dans Excel, vous pouvez recevoir le message derreur : Le fichier que vous avez spcifi ne contient pas de nouveau serveur Automation, ou vous ne disposez pas des privilges suffisants pour enregistrer le serveur Automation. ou en anglais : The file you selected does not contain a new Automation Server, or you do not have sufficient privileges to register the Automation Server. . Cause Cela est d au fait quune DLL .Net ne contient pas les points dentre COM. En fait, cest la dll mscoree.dll , constituant le cur du framework .Net, qui expose nimporte quelle DLL .Net en tant que COM. Cest cette DLL qui sert de InprocServer et qui localise la DLL .Net qui implmente les mthodes demandes. Solution Si vous obtenez cette erreur, cest que vous avez cliqu sur Parcourir et que vous avez choisi votre DLL dans son dossier. Mais cette mthode ne marche pas. Normalement, votre Add-In Automation devrait se trouver dans la liste qui se trouve ct du bouton Parcourir . Il vous suffit de choisir votre DLL dans la liste, sous le nom espace_de_nom.nom_classe .

Problme de mscoree.dll
Description Quand vous ajoutez (ou que vous modifiez) votre DLL la liste des macros complmentaires , un message derreur mscoree.dll est introuvable, voulez-vous supprimer le complment ? apparat. Cause Cela vient du fait que pour une raison quelconque, Excel recherche mscoree.dll dans le dossier de votre DLL (ou du moins pas dans le dossier System32) et forcment ne la trouve pasCela vient du fait que regasm a enregistr dans la sous cl InProcServer32 de lenregistrement classique des classes COM, mscoree.dll sans son chemin. Solution

http://www.csharpfr.com/tutoriaux/CREER-ADDIN-AUTOMATION-EXCEL_743.a... 03/01/2012

CRER UN ADDIN AUTOMATION POUR EXCEL, Tutoriel N743,

Page 7 sur 9

Normalement, le code prsent ci-dessus devrait avoir rsolu le problme. Cependant la solution manuelle reste de localiser lenregistrement de la classe et de modifier la sous cl InProcServer32 et dajouter le chemin complet de mscoree.dll savoir C:\Windows\System32\mscoree.dll .

Problme de HRESULT 0x800A03EC


Alors l, cest beaucoup plus compliqu. Tout dabord, cest une exception qui survient lexcution et qui peut donner laffichage #VALEUR ou #ERREUR ou #NOM ou #REF , ou alors la valeur que renvoie votre fonction au moment de lexception suivant lhumeur dExcel et des try/catch que vous avez mis dans votre code... En principe, cette erreur est renvoye quand vous avez dfini une valeur invalide pour une proprit dun objet Excel quelque soit cette valeur invalide et quelque soit la proprit en question, cest--dire dans 90% des cas.

Jai eu le cas par exemple pour dfinir la couleur de fond dune cellule (et je nai toujours pas trouv de solution, dautant que le mme code marche parfaitement dans une macro du classeur). Par contre, dfinir la couleur de la police marche parfaitement.

Bibliographie
Voici quelques articles qui parlent dAdd-in Automation : Q291392 - Excel COM add-ins and Automation add-ins Q285337 - How To Create a Visual Basic Automation Add-in for Excel Worksheet Functions Q278328 - XL2002: How to Mark an Automation Add-In Function as Volatile How to: Use Managed Code as an Automation Add-In for Excel (C# Programming Guide) Create an Automation Add-In for Excel using .NET

Commentaires
COMMENTAIRE DE LEGALANT LE 27/09/2007 21:54:13 ok sur le pc de developpement mais lors du deploiement de cet addin sur un pc ne disposant pas de visual studio aucune mthode n'apparait dans les macros disponibles. Elles apparaissent pourtant ds l'intellisense. Aussi 1 new sur une variable TestAutomationAddin declenche une erreur.

COMMENTAIRE DE SHAREVB LE 01/10/2007 23:10:36 euh, normalement, il suffit que le framework .Net soit install... voici le code complet de ce tutoriel : http://www.csharpfr.com/codes/CREER-ADDIN-AUTOMATIONEXCEL_44236.aspx ShareVB COMMENTAIRE DE LEGALANT LE 03/10/2007 11:09:09 Merci pr le code mais en fait est-ce-que cela ne pourrait pas etre d un packaging pas terrible de visual ou autre (option non coche)? En effet au risque de me repeter sur un pc disposant du framework .net et pas de visual : automation = ok; intellisense = ok; new sur une variable = erreur "Run-time error '2147220999 (800401f9)' : Automation error Error in the DLL" Merci encore pr ton aide :) COMMENTAIRE DE BISTOURY LE 08/10/2007 15:57:37 Vue comment le COM-INTEROP est user-friendly, voici quelques trucs qui devraient vous simplifier la vie... (enfin bon...qui auraient facilit la mienne ;) ) 1/ si vous utilisez Excel, mettez un fichier EXCEL.EXE.CONFIG, dans le dossier ou se situe le EXCEL.exe, contenant : <configuration> <startup> <supportedRuntime version="v2.0.50727" /> </startup> </configuration> -> ceci est la cause de l'erreur automation "Run-time error '2147220999' ..." -> changer la version en fonction du framework que vous utilisez -> attention, dans tous le cas Excel utilisera UNIQUEMENT cette version specifique du framework. Il est donc a proiri impossible d'utiliser en mme temps des librairies COM (Excel COM Add-in ou simple DLL) utilisant 2 versions diffrentes du framework. Le framework 1 et 1.1 etant compatible avec le framework 2, ceci ne devrait pas trop poser de probleme. -> ce fichier a t test avec Excel 2002 (XP) 2/ Evitez au maximum les interfaces Autodual : la moindre modif de la classe, BOUM ! -> dfinir d'abord l'interface : <Guid("XXX"_ InterfaceType(ComInterfaceType.InterfaceIsIDispatch)> _ Public Interface IMyClass -> puis implementer l'interface dans la classe : <Guid("YYY"), _ ClassInterface(ClassInterfaceType.None)> _ Public Class MyClass Implements IMyClass

Dsol pour la syntaxe mais je ne connais que VB .NET, le C# tant relativement voisin (...pas taper...), vous devrier pouvoir vous debrouiller... quelques lien utiles : http://www.codeproject.com/vb/net/MusaExposingCOM.asp http://www.codeproject.com/dotnet/nettocom.asp http://www.dotnetinterop.com/faq/?q=ClassInterface

COMMENTAIRE DE ALPHARD2008 LE 28/12/2007 13:57:39 Bonjour ShareVB, Merci pour ce tutoriel dont je me suis beaucoup inspire pour ecrire une dll qui fait l'interface entre excel et un serveur de donnees temps reel. J'ai neanmoins encore un probleme: Mon serveur "pousse" les donnees (quand justifie) aux clients (plutot que l'inverse car l'aspect "justifie" est hors de portee des clients) et ma dll les recoit bien en utilisant le principe que tu exposes. Par contre je n'ai pas trouver la facon de raffraichir automatiquement mes cellules excel (ce qui est le but ultime). Par exemple: supposons que mon serveur recupere une mesure (que l'on peut supposer de type simple) en flux continu et la met a disposition de ses clients. Mon but est de coder une dll qui affiche cette donnee en actualisation constante (raffraichie disons chaque seconde) dans une cellule excel sans "bloquer" l'interface de sorte que l'utilisateur puisse exploiter son client excel normalement (idealement que le rafraichissement soit transparent). Jusque-la j'arrive a "rapatrier" mon flux jusque dans la dll COM mais je coince sur le dernier segment: l'affichage temps reel. Je pense que cela vient de ce que la methode interfacee rapatrie une fois pour

http://www.csharpfr.com/tutoriaux/CREER-ADDIN-AUTOMATION-EXCEL_743.a... 03/01/2012

CRER UN ADDIN AUTOMATION POUR EXCEL, Tutoriel N743,

Page 8 sur 9

toutes ma donnee une bonne fois pour toute: meme en recalculant ma feuille (F9), la valeur de la cellule ne s'actualise pas, alors que si je donne ma methode a une autre cellule, cette derniere renvoie la bonne valeur au moment ou je tape "Entree". Pour etre encore plus precis: a t = 0, ma mesure vaut 1, en excutant ma methode MaMethode() en formule de ma cellule C a cet instant, la valeur renvoyee (et affichee dans ma cellule C) est bien 1. A l'instant t = 1, ma mesure est passee a 2, mais ma cellule C vaut toujours 1! Pourtant l'objet dans la dll, auquel MaMethode se refere (MaMethode ne fait qu'afficher cet objet rien de plus), est a jour. Taper F9 ne raffraichit pas la valeur de ma cellule, mais si j'execute MaMethode en formule d'une cellule C', alors la valeur affichee est bien 2, cellule qui se comporte ensuite comme C. Mon but est que si l'objet de la dll s'update, la valeur de la cellule s'update aussi et je ne sais pas comment faire (bouhhh)! Certains logiciel payant propose ce type de service dans excel. Comment font-ils? Desole pour la longueur du post et merci d'avance pour ton aide (et bonne annee 2008) COMMENTAIRE DE SHAREVB LE 30/12/2007 20:42:47 salut, En fait, j'aurais du intitul cette source : "fournir ses propres fonctions de macros" car il ne s'agit pas d'un addin au sens habituel...pour ce que tu cherches faire, il faut crer un "Addin partag"/"Shared Addin" (modle de projet VS2005) qui va recevoir un objet Application complet d'Excel sur lequel tu pourras associer des handlers pour les vnements d'ouverture de workbook, ajouter des menus, modifier les cellules du classeurs ouvert, enfin bref, tout faire, y compris un timer qui rafraichit une cellule toute les N secondes partir de l'ouverture du classeur... enfin, voici des liens utiles : http://support.microsoft.com/kb/302901 http://msdn2.microsoft.com/en-us/library/aa537184(office.11).aspx tu as donc deux solutions : les addins en C# ou les macros en vb.net ShareVB COMMENTAIRE DE ALPHARD2008 LE 04/01/2008 02:50:14 Merci ShareVB, je vais regarder ca!

COMMENTAIRE DE BOSSUN LE 19/03/2008 11:58:46 Tutoriel trs trs bien fait.. je te flicite et te remercie car a m'aide un point ou tu ne peux pas imaginer...

COMMENTAIRE DE BOSSUN LE 19/03/2008 15:01:21 AU fait j'ai une question qui rejoint un peu le soucis de Alphard2008. J'ai cod ma DLL qui me rcupre juste une donne d'une base sql. a fonctionne plutt bien mais le soucis est qu' l'ouverture du classeur, les donnes ne se rafraichissent pas. J'ai activ le calcul automatique de mon classeur. mais rien n'y fait. pour que a rafraichisse, je dois aller dans la cellule et faire ENTER. Aurais-tu une ide pour rsoudre ce problme? Merci d'avance

Ajouter un commentaire
Authentification Nom d'utilisateur : Mot de passe :

Se souvenir du profil

Connexion
Mot de passe oubli ? / Activation de compte Crer un compte

Codes en rapport avec CRER UN ADDIN AUTOMATION POUR EXCEL si cette page ne contient pas votre bonheur
Code C# Tous les langages Tutoriels Forum Livres Groups Logiciels Boutique

Crer un addin automation pour excel


Ce code montre comment crer un addin automation pour excel permettant de fournir des fonctions utilisables dans les formules des cellules d'excel. ce code est en annexe du tutoriel http://www.csharpf...
http://www.csharpfr.com/codes/CREER-ADDIN-AUTOMATION-EXCEL_44236.aspx

Win courrier
Logiciel permettant de grer tous les documents administratifs tel que les impts, les factures ou tout autre document dans un treeview faon explorateur windows avec cette source vous pouvez : - ...
http://www.cppfrance.com/codes/WIN-COURRIER_44272.aspx

Directorystructure2excel: application copiant la structure d'un rpertoire dans un excel


C'est une application trs simple crite en vc++ (avec mfc) permettant d'crire la structure d'un rpertoire (et ses sous -rpertoires) dans un fichier excel (qui est cr). elle crit aussi dans le fi...
http://www.cppfrance.com/codes/DIRECTORYSTRUCTURE2EXCEL-APPLICATION-COPIANT-STRUCTURE-REPERTOIREDANS-FICHIER-EXCEL_45307.aspx

http://www.csharpfr.com/tutoriaux/CREER-ADDIN-AUTOMATION-EXCEL_743.a... 03/01/2012

CRER UN ADDIN AUTOMATION POUR EXCEL, Tutoriel N743,

Page 9 sur 9

Project timer
Vous avez du misre comptabiliser vos heures passs sur un projet ? utilisez ce petit utilitaire pour vous assister. ok, ok, il y a mlange de nerlandais et anglais .... mais bon, je ne suis pas fl...
http://www.vbfrance.com/codes/PROJECT-TIMER_28186.aspx

Automation excel
Ce programme a vu le jour quand des rapports excel gnrs automatiquement par une application laissaient de nombreuses instances d'excel invisibles et qui devaient tre termines avec le 'task manage...
http://www.vbfrance.com/codes/AUTOMATION-EXCEL_39123.aspx

+ de ressources pour CRER UN ADDIN AUTOMATION POUR EXCEL

Dveloppement ralis par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci Vincent pour ses prcieux conseils. CodeS-SourceS.com Toute reproduction mme partielle est interdite sauf accord crit du Webmaster CodeS-SourceS.com est une marque dpose tous droits rservs

Temps d'xcution de la page : 0,109 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions lgales Outils Convertisseur VB/C# Snippets et scripts Outils en ligne La ToolBox Communaut Programmation Photographie Technologie Newsgroups Emploi Forum Blogs Guided'achat Tlphonie mobile Image et son Informatique Bureautique Jeux vido Logicie ls Internet & Rseau Dveloppement Market Android Jeux & Loisirs Graphisme Multimdia Scurit Pilotes Loisirs Cartes virtuelles Vidos droles Jeux en ligne Goguide AndroLib (Android Market)

http://www.csharpfr.com/tutoriaux/CREER-ADDIN-AUTOMATION-EXCEL_743.a... 03/01/2012