Upload
lolo406
View
270
Download
1
Embed Size (px)
Citation preview
Accueil Codes Tutoriels Forum Livres Emploi Services Connexion
Déposé par ShareVB le 20/09/2007 19:28:22Dans la catégorie Applications
Vu : 21 639 fois
Site perso
Ecrire un message privé à l'auteur
Commentaire sur cette source (9)
Ajouter un commentaire et/ou une note
Note :
Aucune note
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
Trouver un code source : dans Tout le site Rechercher [ Dernières recherches ]
Accueil > Tutoriels > Applications > CRÉER UN ADDIN AUTOMATION POUR EXCEL
CRÉER UN ADDIN AUTOMATION POUR EXCEL
Annonces Google
QlikTech QlikView
Outil d'analyse pour tout le monde. Regardez la demo. www.QlikView.com
Information sur le tutoriel
Description
Ce tutoriel montre comment créer un Addin Automation pour Excel permettant de fournir des fonctions utilisables dans les formules des cellules.
Tutorial
Créer un Add-in Automation pour Excel en C#
Introduction
Depuis la version 2002 (XP) d’Office, Excel propose le concept d’Add-In Automation. Ceci est donc disponible dans Excel XP, Excel 2003 et Excel 2007.
Ce concept d’Add-In Automation permet d’accéder aux méthodes publiques des Dll COM en tant que Fonctions Définies par l’Utilisateur, c’est-à-dire de pouvoir les utiliser directement dans les formules des cellules.
Cet article décrit la manière de construire un Add-in Automation pour Excel et de le déployer. Je me suis inspiré fortement de “Create an Automation Add-In for Excel using .NET”.
Version VB6
Vous pouvez tout à fait développer un tel Add-in avec Visual Basic 6 avec les options par défaut.
Pour cela, il vous suffit de :
Créer un projet « Dll ActiveX »Ajouter un « module de classe »Déclarer et implémenter vos méthodes dans ce module de classe :
Option Explicit
Public Function TestAutomationAddInt(ByVal a As Integer, ByVal b As Integer) As Integer
TestAutomationAddInt = a + b
End Function
'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
D'autres ressources pour interfaces dotnet
interop dans excel 2003 si cette page ne
contient pas votre bonheur
EXCELDOTNET : PROGRAMMER EXCEL EN
DOTNET SANS VBA NI VSTO
EXPORTER UN DATAGRIDVIEW VERS
EXCEL
CRÉER UN VRAI OCX EN DOTNET
EXPORTER UNE BASE DE DONNEES MS
ACCESS VERS MYSQL OU POSTGRESQL
XLDOTNET : QUITTER EXCEL SANS
Annonces Google
Nos sponsors
Derniers Blogs
AFTERWORKS DES COMMUNAUTéS MICROSOFT
SHAREPOINT : INTéRêT DE ZIPPER UN BACKUP
[WINDOWS SERVER 2008 R2] CONFIGURATION
MEILLEURS VŒUX ET PLUS POUR 2012 par themit
SOMVC - TEMPLATE DE SOLUTION ASP.NET MVC3
La suite RSS
Forum
RE : [DéPLACé VB -> C#]PROJET C# ETUDE DE
RE : [DéPLACé VB -> C#]PROJET C# ETUDE DE
RE : PROJET C# ETUDE DE FONCTION par NHenry
RE : PROJET C# ETUDE DE FONCTION par jack
Ce site au démarrage
Page 1 sur 9CRÉER UN ADDIN AUTOMATION POUR EXCEL, Tutoriel N°743,
03/01/2012http://www.csharpfr.com/tutoriaux/CREER-ADDIN-AUTOMATION-EXCEL_743.a...
'un test avec une plage de cellules
Public Function TestAutomationAddRange(ByVal r As Range) As Double
'On peut très bien accéder aux valeurs des plages de cellules
'Par contre, il peut arriver que définir les propriétés
'des cellules génère une erreur 800A03EC,
'erreur qu'Excel renvoie dans 90% des cas où il y a une erreur
'dans la définition de la propriété
'Par exemple, je n'ai pas trouvé de solution pour définir
'les propriétés de Range.Interior...
'par contre, définir la couleur de la police se fait sans erreur
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 définie 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
CompilerEnregistrer votre dll avec « regsvr32 votre_dll.dll »
Pour déboguer, il suffit de faire Ctrl-F5 puis de choisir « Démarrer le programme » / « Start external program» (également accessible dans les propriétés du projet), de cliquer sur « … » puis de choisir le fichier « excel.exe » dans le dossier d’installation d’Office. 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 déboguer directement votre code à l’exécution (recalcule) de la macro.
Version .Net
Développement de base
Voici la méthode générale :
Créer une « bibliothèque de classes » par exemple « TestAutomationAddin »Dans les propriétés du projet, dans l’onglet « Compilation »/ « Build », vérifier que « Enregistrer pourInteropérabilité COM » / « Register for COM Interop » est coché.Toujours dans les propriétés du projet, dans l’onglet « Application », cliquer sur « Information sur l’Assemblage » / « Assembly Information », puis vérifier que « Rendre l’assemblage visible de COM » / « Make assembly COM-Visible» est cochée.Ajouter la référence COM (clic droit sur le projet, « Ajouter une référence » / « 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 :
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 définissant les "macros" qui seront disponibles
La suite RSS
Côté 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 développeur Web
Recherche Développeur/Intégrateur (H/F)
Recherche un Développeur web expérimenté
Recherche Développeur Jeux iOS
Recherche Développeur Web CDI
Recherche Développeur Web & Multimédia
Recherche Développeur DotNet confirmé
Déposer 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
Logiciels
Academy System (16.9.2.0)
PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO
LettresFaciles 2011 (8.0.0.1)
DocTranslate (V3.0.1.0)
sDEVIS-FACTURES vlPRO (7.3.0.2)
+ de logiciels à télécharger
Vidéos drôles
Halloween Party
Terry Tate Office Linebacker Superbowl 2003
Jeu vidéo instructif
C'est un véritable vol !
Banana Song
Comment attraper la grippe A
Parodie Pub Window 7
La suite RSS
Sondage...
Page 2 sur 9CRÉER UN ADDIN AUTOMATION POUR EXCEL, Tutoriel N°743,
03/01/2012http://www.csharpfr.com/tutoriaux/CREER-ADDIN-AUTOMATION-EXCEL_743.a...
/// dans Excel
/// </summary>
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
[Guid("5B016456-A7A0-4cf0-A738-DCC9B400251D")]
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 implémentant les "macros" définies
/// dans l'interface précédente
/// </summary>
[ClassInterface(ClassInterfaceType.None),
ComDefaultInterface(typeof(ITestAutomationAddin))]
public class TestAutomationAddin
: ITestAutomationAddin
{
#region ITestAutomationAddin Members
//Un test de macros prenant deux entiers et en faisant la somme
public int TestAutomationAddInt(int a, int b)
{
return a + b;
}
//Un test de macros prenant deux flottants et en faisant la somme
public double TestAutomationAddDouble(double a, double b)
{
return a + b;
}
//un test avec une plage de cellules
public double TestAutomationAddRange(Range r)
{
//On peut très bien accéder aux valeurs des plages de cellules
//Par contre, il peut arriver que définir les propriétés
//des cellules génère une erreur 800A03EC,
//erreur qu'Excel renvoie dans 90% des cas où il y a une erreur
//dans la définition de la propriété
//Par exemple, je n'ai pas trouvé de solution pour définir
//les propriétés de Range.Interior...
//par contre, définir la couleur de la police se fait
//sans erreur
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 définie et
//si c'est un entier...
if (cell.Value2 != null)
Vous êtes
Un Homme
Une Femme
Sondage fourni par ProSondage.com
Statistiques
1 863 837 membres174 nouveaux aujourd'hui
16 132 membres club
Comparez les prix
Motorola MILESTONEEntre 489€ et 489€
Visiter le guide achat
CalendriCode
Janvier 2012L M M J V S D
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
Consulter la suite du CalendriCode
Photothèque
Visiter la photothèque
CS Tool Box
Page 3 sur 9CRÉER UN ADDIN AUTOMATION POUR EXCEL, Tutoriel N°743,
03/01/2012http://www.csharpfr.com/tutoriaux/CREER-ADDIN-AUTOMATION-EXCEL_743.a...
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 définit 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 ComplémentsDans la boîte de dialogue Compléments, cliquer sur Automatisation. Dans la liste des serveurs COM enregistrés, sélectionner votre Add-In Automation « TestAutomationAddin. TestAutomationAddinClass » et cliquer sur OK.Votre Add-In Automation devrait apparaître dans la boîte de dialogue des Compléments. Cliquer OK pour fermer la boîte de dialogue des Compléments.
Page 4 sur 9CRÉER UN ADDIN AUTOMATION POUR EXCEL, Tutoriel N°743,
03/01/2012http://www.csharpfr.com/tutoriaux/CREER-ADDIN-AUTOMATION-EXCEL_743.a...
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 Compléments.Dans Gérer, choisir Compléments Excel, puis cliquer sur Atteindre.Dans la boîte de dialogue Compléments, cliquer sur Automatisation.Dans la liste des serveurs COM enregistrés, sélectionner votre Add-In Automation « TestAutomationAddin. TestAutomationAddinClass » et cliquer sur OK.Votre Add-In Automation devrait apparaître dans la boîte de dialogue des Compléments. Cliquer OK pour fermer la boîte de dialogue des Compléments.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 »
Débogguer
Pour déboguer facilement, il suffit dans les propriétés de votre Bibliothèque de classes, dans l’onglet « Débogage » / « Debug » puis de choisir « Démarrer le programme externe » / « Start external program », de cliquer sur « … » puis de choisir le fichier « excel.exe » dans le dossier d’installation d’Office. 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 déboguer directement votre code à l’exécution (recalcule) de la macro.
Déploiement .Net
Déploiement manuel
Pour enregistrer la dll après l’avoir déplacée dans un autre dossier, exécuter « regasm » avec l’option /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 l’assembly n’est pas signé, ce n’est pas grave.
Déploiement par projet de déploiement
Pour que l’enregistrement se fasse correctement lors de l’installation par un projet de déploiement, il est nécessaire d’ajouter une « custom action ».
La procédure est la suivante :
Dans le projet de votre bibliothèque de classe, ajouter un « Installer » nommé « SelfRegisterInstaller » avec le code suivant à l’intérieur :
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 systématique
/// des méthodes ComRegisterFunction/ComUnregisterFunction
/// </summary>
[RunInstaller(true)]
public partial class SelfRegisterInstaller : Installer
{
public SelfRegisterInstaller()
{
InitializeComponent();
}
//enregistre l'assembly et appelle les méthodes marquées
//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);
}
//désenregistre l'assembly et appelle les méthodes marquées
//comme ComUnregisterFunction
Page 5 sur 9CRÉER UN ADDIN AUTOMATION POUR EXCEL, Tutoriel N°743,
03/01/2012http://www.csharpfr.com/tutoriaux/CREER-ADDIN-AUTOMATION-EXCEL_743.a...
public override void Uninstall(System.Collections.IDictionary savedState)
{
//désenregistre 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 système de fichiers », ajouter la « sortie principale » du projet de Bibliothèque de classes dans le dossier « Dossier de l’application » / « Application Folder »dans l’« Editeur d’actions personnalisées » (clic droit sur le projet de Setup, « Vues » / « View »), ajouter une « action personnalisée » dans « Install » et « Uninstall » en choisissant « Sortie principale » / « Primary Output» (dans le dossier « Dossier de l’application » / « Application Folder »)
Tout ceci permet d’exécuter les méthodes ComRegisterFunction de la DLL Addin Automation à l’installation et à la désinstallation.
Points Importants
La bibliothèque de classes doit être enregistrée avec regasm.exe ou en cochant l’option « Enregistrer pour interopérabilité COM ».Pour que Excel trouve notre Add-In Automation, il faut ajouter une sous clé « Programmable » dans l’enregistrement de la classe en tant que classe COM (dans HKCR\CLSID\{xxx}\.) . Ceci doit se faire dans deux méthodes static marquées avec les attributs ComRegisterFunction et ComUnregisterFunction.Pour empêcher le message d’erreur “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 nécessaire de marquer la classe qui implémente le complément Automation avec l’attribut ClassInterface. Vous avez ensuite deux solutions pour donner une valeur à cet attribut :ClassInterface.None : il faut alors définir une « interface par défaut » avec toutes les méthodes accessibles par Excel qu’implémente la classe marquée. Cela vous permet de définir explicitement ce qui est exposé. C’est la méthode recommandée pour les développements de production.ClassInterface.AutoDual : il suffit juste de définir et d’implémenter les méthodes directement et l’interface COM sera générée automatiquement. Cette méthode est non recommandée car les identifiants des interfaces peuvent changer lors que la classe change.On peut marquer « l’interface par défaut » avec l’attribut InterfaceType pour spécifier comment sont exposées ses méthodes :ComInterfaceType.InterfaceIsIDispatch : les méthodes sont résolues à l’exécution et ne sont donc pas incluses dans la typelib générée pour la bibliothèque de classe. On pourra les utiliser mais elles n’apparaîtront pas dans l’Intellisense ou dans la liste des macros disponibles.ComInterfaceType.InterfaceIsIUnknown : les méthodes sont résolues à la compilation et sont donc incluses dans la typelib générée pour la bibliothèque de classe. On pourra les utiliser et elles apparaîtront dans l’Intellisense et dans la liste des macros disponibles.ComInterfaceType.InterfaceIsDual : les méthodes peuvent être résolues à l’exécution ou à la compilation et sont donc incluses dans la typelib générée pour la bibliothèque de classe. On pourra les utiliser et elles apparaîtront dans l’Intellisense et dans la liste des macros disponibles.On peut préciser explicitement « l’interface par défaut » de la classe de nos macros Automation avec l’attribut ComDefaultInterface.Il est nécessaire de définir au moins le Guid de « l’interface par défaut » afin de ne pas avoir à réenregistrer la bibliothèque de classe à chaque fois que l’on ajoute/supprime une méthode à cet interface.Pour faire l’enregistrement correctement, on utilise les RegistrationServices dans un Custom Installer (un composant qui dérivent de la classe Installer et qui est marquée avec l’attribut RunInstaller(true)) et qui sera appelé à notre demande par une Custom Action.
Problèmes courants
Quand vous développez des Addins Automation, vous pouvez vous trouver confronté à un certain nombre de problèmes :
Problème d’installation : là, ca va il y a des solutionsProblème « 0x800A03EC » lors de l’exécution des méthodes exposées…là par contre…
Problème d’enregistrement
Description
Quand vous enregistrez votre DLL .Net en tant qu’Add-in Automation dans Excel, vous pouvez recevoir le message d’erreur : « Le fichier que vous avez spécifié ne contient pas de nouveau serveur Automation, ou vous ne disposez pas des privilèges suffisants pour enregistrer le serveur Automation. » ou en anglais : « The file you selected doesnot contain a new Automation Server, or you do not have sufficient privileges to register the Automation Server. ».
Cause
Cela est dû au fait qu’une DLL .Net ne contient pas les points d’entrée COM. En fait, c’est la dll « mscoree.dll », constituant le cœur du framework .Net, qui expose n’importe quelle DLL .Net en tant que COM. C’est cette DLL qui sert de InprocServer et qui localise la DLL .Net qui implémente les méthodes demandées.
Solution
Si vous obtenez cette erreur, c’est que vous avez cliqué sur « Parcourir » et que vous avez choisi votre DLL dans son dossier. Mais cette méthode ne marche pas. Normalement, votre Add-In Automation devrait se trouver dans la liste qui se trouve à côté du bouton « Parcourir ». Il vous suffit de choisir votre DLL dans la liste, sous le nom « espace_de_nom.nom_classe ».
Problème de mscoree.dll
Description
Quand vous ajoutez (ou que vous modifiez) votre DLL à la liste des « macros complémentaires », un message d’erreur « mscoree.dll est introuvable, voulez-vous supprimer le complément ?» apparaît.
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 forcément ne la trouve pas…Cela vient du fait que « regasm » a enregistré dans la sous clé « InProcServer32 » de l’enregistrement classique des classes COM, « mscoree.dll » sans son chemin.
Solution
Page 6 sur 9CRÉER UN ADDIN AUTOMATION POUR EXCEL, Tutoriel N°743,
03/01/2012http://www.csharpfr.com/tutoriaux/CREER-ADDIN-AUTOMATION-EXCEL_743.a...
Normalement, le code présenté ci-dessus devrait avoir résolu le problème. Cependant la solution manuelle reste de localiser l’enregistrement de la classe et de modifier la sous clé « InProcServer32 » et d’ajouter le chemin complet de « mscoree.dll » à savoir « C:\Windows\System32\mscoree.dll ».
Problème de HRESULT 0x800A03EC
Alors là, c’est beaucoup plus compliqué. Tout d’abord, c’est une exception qui survient à l’exécution et qui peut donner l’affichage « #VALEUR » ou « #ERREUR » ou « #NOM » ou « #REF », ou alors la valeur que renvoie votre fonction au moment de l’exception suivant l’humeur d’Excel et des try/catch que vous avez mis dans votre code... En principe, cette erreur est renvoyée quand vous avez défini une valeur invalide pour une propriété d’un objet Excel quelque soit cette valeur invalide et quelque soit la propriété en question, c’est-à-dire dans 90% des cas.
J’ai eu le cas par exemple pour définir la couleur de fond d’une cellule (et je n’ai toujours pas trouvé de solution, d’autant que le même code marche parfaitement dans une macro du classeur). Par contre, définir la couleur de la police marche parfaitement.
Bibliographie
Voici quelques articles qui parlent d’Add-in Automation :
Q291392 - Excel COM add-ins and Automation add-insQ285337 - How To Create a Visual Basic Automation Add-in for Excel Worksheet FunctionsQ278328 - XL2002: How to Mark an Automation Add-In Function as VolatileHow 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 méthode 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-AUTOMATION-EXCEL_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 cochée)? 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 même temps des librairies COM (Excel COM Add-in ou simple DLL) utilisant 2 versions différentes 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 ! -> définir 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
Désolé 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.asphttp://www.codeproject.com/dotnet/nettocom.asphttp://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
Page 7 sur 9CRÉER UN ADDIN AUTOMATION POUR EXCEL, Tutoriel N°743,
03/01/2012http://www.csharpfr.com/tutoriaux/CREER-ADDIN-AUTOMATION-EXCEL_743.a...
Nom d'utilisateur :
Mot de passe :
Code C# Tous les langages Tutoriels Forum Livres Groups Logiciels Boutique
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 créer un "Addin partagé"/"Shared Addin" (modèle de projet VS2005) qui va recevoir un objet Application complet
d'Excel sur lequel tu pourras associer des handlers pour les évènements 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/302901http://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 très très bien fait.. je te félicite 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 récupère juste une donnée d'une base sql. ça fonctionne plutôt bien mais le soucis est qu'à l'ouverture du classeur, les données 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 idée pour résoudre ce problème?
Merci d'avance
Ajouter un commentaire
Authentification
Se souvenir du profil
Connexion
Mot de passe oublié ? / Activation de compteCréer un compte
Codes en rapport avec CRÉER UN ADDIN AUTOMATION POUR EXCEL si cette page ne contient pas votre
bonheur
Créer un addin automation pour excelCe code montre comment créer 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 gérer tous les documents administratifs tel que les impôts, les factures ou tout autre document
dans un treeview façon explorateur windows avec cette source vous pouvez : - ...
http://www.cppfrance.com/codes/WIN-COURRIER_44272.aspx
Directorystructure2excel: application copiant la structure d'un répertoire dans unexcelC'est une application très simple écrite en vc++ (avec mfc) permettant d'écrire la structure d'un répertoire (et ses sous
-répertoires) dans un fichier excel (qui est créé). elle écrit aussi dans le fi...
http://www.cppfrance.com/codes/DIRECTORYSTRUCTURE2EXCEL-APPLICATION-COPIANT-STRUCTURE-REPERTOIRE-
DANS-FICHIER-EXCEL_45307.aspx
Page 8 sur 9CRÉER UN ADDIN AUTOMATION POUR EXCEL, Tutoriel N°743,
03/01/2012http://www.csharpfr.com/tutoriaux/CREER-ADDIN-AUTOMATION-EXCEL_743.a...
+ de ressources pour CRÉER UN ADDIN AUTOMATION POUR EXCEL
Outils
Convertisseur VB/C#Snippets et scripts
Outils en ligneLa ToolBox
Communauté
ProgrammationPhotographieTechnologieNewsgroups
EmploiForumBlogs
Guide d'achat
Téléphonie mobileImage et sonInformatiqueBureautiqueJeux vidéo
Logiciels
Internet & RéseauDéveloppementMarket AndroidJeux & Loisirs
GraphismeMultimédiaSécuritéPilotes
Loisirs
Cartes virtuellesVidéos drolesJeux en ligne
GéoguideAndroLib (Android Market)
Project timer
Vous avez du misère à comptabiliser vos heures passés sur un projet ? utilisez ce petit utilitaire pour vous assister.
ok, ok, il y a mélange de néerlandais et anglais .... mais bon, je ne suis pas fl...
http://www.vbfrance.com/codes/PROJECT-TIMER_28186.aspx
Automation excelCe programme a vu le jour quand des rapports excel générés automatiquement par une application laissaient de
nombreuses instances d'excel invisibles et qui devaient être terminées avec le 'task manage...
http://www.vbfrance.com/codes/AUTOMATION-EXCEL_39123.aspx
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,109 sec (3)
Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales
Page 9 sur 9CRÉER UN ADDIN AUTOMATION POUR EXCEL, Tutoriel N°743,
03/01/2012http://www.csharpfr.com/tutoriaux/CREER-ADDIN-AUTOMATION-EXCEL_743.a...