Trucs et astuces VSTO

De Ensiwiki
Aller à : navigation, rechercher

HOWTOS pour les Add-In

Comment créer une nouvelle feuille excel et l'ajouter au classeur actif?

On suppose qu'on veut créer un nouveau worksheet et le nommer "nom_de_nouveau_worksheet" :

Excel.WorkSheet nouveauWorksheet = Globals.ThisAddIn.Application.ActiveWorkbook.Sheets.Add(missing,missing,missing,missing) as Excel.Worksheet;
nouveauWorksheet.Name = "nom_de_nouveau_worksheet";

Comment prendre la main sur une feuille Excel dont on connait le nom?

On suppose qu'on veut accéder à la feuille qui s'appelle "MaNouvelleFeuille"

Excel.Worksheet accesFeuille = Globals.ThisAddIn.Application.Sheets["MaNouvelleFeuille"] as Excel.Worksheet;
               

Comment ajouter un bouton à une feuille Excel?

1) Accéder à la version étendue de la feuille Excel:

Excel.Worksheet wkSheet = Globals.ThisAddIn.Application.ActiveWorkbook.Sheets["MaFeuille"] as Excel.Worksheet;
Worksheet extendedSheet = Globals.Factory.GetVstoObject(wkSheet);

2) Créer le bouton:

Button myBtn = new Button;

3) Sélectionner la plage de localisation du bouton et l'y placer:

Excel.Range btnLoc = wkSheet.Range["A0","B1"];
extendedSheet.Controls.AddControl(myBtn, btnLoc , "myBtn");

4) Ajouter une gestion de l'évènement 'Click sur le bouton':

myBtn.Click += new EventHandler(myBtn_Clicked);

Comment ajouter un graphique à une feuille Excel?

On suppose qu'on veut ajouter le graphique à la feuille wkSheet

1) Définir la plage contenant les données:

Excel.Range myRange = wkSheet.Range[wkSheet.Cells[1, 1], wkSheet.Cells[50, 50]];

2) Récupérer le composant de wkSheet contenant les graphes:

Excel.ChartObjects charts = wkSheet.ChartObjects(missing) as Excel.ChartObjects;

3) Définir un objet ChartObject qui contiendra le graphique, et un objet Chart où il sera tracé

Excel.ChartObject chartObj = charts.Add(200, 200, 500, 300); 
Excel.Chart chart = chartObj.Chart;

4) Se servir du chartwizard pour tracer le graphique:

chart.ChartWizard(myRange, Excel.XlChartType.xlLine, 2, Excel.XlRowCol.xlColumns, 1, 1, missing, "Mon Premier Graphique", missing, missing, missing);

Comment afficher une date dans une feuille ?

On suppose qu'on souhaite afficher les dates dans un objet Range nommé dataRange

Il suffit de modifier le format d'affichage du Range:

dataRange.NumberFormat = "dd/mm/yyyy";

Comment provoquer un affichage instantané dans une feuille Excel ?

On suppose que la fonction Affichage() gère l'affichage d'objet dans Excel ( graphique , tableau ... )

Globals.ThisAddIn.Application.EnableEvents = false;   // désactive les évènements dans Excel
Affichage();
Globals.ThisAddIn.Application.ScreenUpdating = true;  // forçe le rafraîchissement de la page 
Globals.ThisAddIn.Application.EnableEvents = true;    // réactive les évènements dans Excel

Codes d'erreur COM

J'ai une erreur HRESULT : 0x800AC472 quand j'essaye d'accéder à ma feuille Excel: que faire?

Cette erreur peut provenir du fait que l'AddIn n'a pas eu le temps de se lancer correctement, ce qui est le cas quand par exemple, une méthode qui accède à l'application Excel est invoquée depuis ThisAddIn_Startup. Il ne faut donc invoquer la méthode qu'après le lancement de l'AddIn.


J'ai une erreur HRESULT : 0x800A03EC quand je crée un bouton sur une feuille Excel où il y a des merges (fusion de cellules)

Une fois qu'un contrôle a été ajouté sur une feuille excel, la fusion de cellules sur cette feuille n'est plus possible (erreur). Il ne faut ajouter le contrôle qu'après avoir fait toutes les fusions de cellules.