Procédure pas-à-pas : programmation Office en Visual Basic
Visual Studio offre des fonctionnalités en Visual Basic qui améliorent la programmation Microsoft Office. Les fonctionnalités de Visual Basic incluent les propriétés implémentées automatiquement, les instructions dans les expressions lambda et les initialiseurs de collection. Vous pouvez incorporer des informations de type, qui permettent de déployer des assemblies interagissant avec les composants COM sans déployer les assemblies PIA (Primary Interop Assemblies) sur l’ordinateur de l’utilisateur. Pour plus d’informations, consultez Procédure pas à pas : incorporation de types provenant d’assemblys managés.
Cette procédure pas à pas illustre ces fonctionnalités dans le contexte de la programmation Office, mais beaucoup d’entre elles sont aussi utiles en programmation générale. Dans la procédure pas à pas, vous allez utiliser une application de complément Excel pour créer un classeur Excel. Vous créerez ensuite un document Word contenant un lien vers le classeur. Enfin, vous apprendrez à activer et désactiver la dépendance d’assembly PIA.
Pour effectuer cette procédure pas à pas, Microsoft Office Excel et Microsoft Office Word doivent être installés sur votre ordinateur.
Notes
Il est possible que pour certains des éléments de l'interface utilisateur de Visual Studio, votre ordinateur affiche des noms ou des emplacements différents de ceux indiqués dans les instructions suivantes. L'édition de Visual Studio dont vous disposez et les paramètres que vous utilisez déterminent ces éléments. Pour plus d’informations, consultez Personnalisation de l’IDE.
Démarrez Visual Studio.
Dans le menu Fichier , pointez sur Nouveau, puis cliquez sur Projet.
Dans le volet Modèles installés, développez Visual Basic, développez Office, puis cliquez sur l’année de version du produit Office.
Dans le volet Modèles, cliquez sur Complément Excel <version>.
Regardez en haut du volet Modèles pour vérifier que .NET Framework 4, ou version ultérieure, apparaît dans la zone Framework cible.
Tapez un nom pour votre projet dans la zone Nom, si vous le souhaitez.
Cliquez sur OK.
Le nouveau projet s’affiche dans l’Explorateur de solutions.
Dans l’Explorateur de solutions, cliquez avec le bouton droit sur le nom de votre projet, puis cliquez sur Ajouter une référence. La boîte de dialogue Ajouter une référence s’affiche.
Sous l’onglet Assemblys, sélectionnez Microsoft.Office.Interop.Excel, version
<version>.0.0.0
(pour plus d’informations sur les numéros de version des produits Office, consultez Versions Microsoft),dans la liste Nom du composant, puis maintenez la touche CTRL enfoncée et sélectionnez Microsoft.Office.Interop.Word,version <version>.0.0.0
. Si les assemblys n’apparaissent pas, vous devez vérifier qu’ils sont installés et s’affichent (consultez Guide pratique pour installer les assemblys PIA (Primary Interop Assembly) d’Office).Cliquez sur OK.
Dans l’Explorateur de solutions, cliquez avec le bouton droit sur le fichier ThisAddIn.vb ou ThisAddIn.cs, puis cliquez sur Afficher le code.
Ajoutez les instructions
Imports
suivantes en haut du fichier de code, si elles ne sont pas déjà présentes.Imports Microsoft.Office.Interop
Dans l’Explorateur de solutions, cliquez avec le bouton droit sur le nom de votre projet, cliquez sur Ajouter, puis sur Classe. Nommez la classe Account.vb. Cliquez sur Add.
Remplacez la définition de la classe
Account
par le code suivant : Les définitions de classe utilisent les propriétés implémentées automatiquement. Pour plus d’informations, consultez Propriétés implémentées automatiquement.Public Class Account Property ID As Integer = -1 Property Balance As Double End Class
Pour créer une liste
bankAccounts
qui contient deux comptes, ajoutez le code suivant à la méthodeThisAddIn_Startup
dans ThisAddIn.vb. Les déclarations de liste utilisent les initialiseurs de collection. Pour plus d’informations, consultez Initialiseurs de collection.Dim bankAccounts As New List(Of Account) From { New Account With { .ID = 345, .Balance = 541.27 }, New Account With { .ID = 123, .Balance = -127.44 } }
Dans le même fichier, ajoutez la méthode suivante à la classe
ThisAddIn
. La méthode configure un classeur Excel, vers lequel elle exporte les données.Sub DisplayInExcel(ByVal accounts As IEnumerable(Of Account), ByVal DisplayAction As Action(Of Account, Excel.Range)) With Me.Application ' Add a new Excel workbook. .Workbooks.Add() .Visible = True .Range("A1").Value = "ID" .Range("B1").Value = "Balance" .Range("A2").Select() For Each ac In accounts DisplayAction(ac, .ActiveCell) .ActiveCell.Offset(1, 0).Select() Next ' Copy the results to the Clipboard. .Range("A1:B3").Copy() End With End Sub
La méthode Add possède un paramètre facultatif pour spécifier un modèle particulier. Les paramètres facultatifs vous permettent d’omettre l’argument du paramètre, si vous souhaitez utiliser la valeur par défaut de ce dernier. Dans la mesure où aucun argument n'est envoyé dans l'exemple précédent,
Add
utilise le modèle par défaut et crée un classeur.Les propriétés
Range
etOffset
de l’objet Range utilisent la fonctionnalité des propriétés indexées. Les propriétés indexées vous permettent également d'utiliser la propriétéValue
de l'objetRange
, ce qui rend superflue l'utilisation de la propriétéValue2
. La propriétéValue
est indexée, mais l'index est optionnel. Les arguments facultatifs et les propriétés indexées fonctionnent ensemble dans l’exemple suivant.
À la fin de
DisplayInExcel
, ajoutez le code suivant pour ajuster les largeurs de colonne au contenu.' Add the following two lines at the end of the With statement. .Columns(1).AutoFit() .Columns(2).AutoFit()
Pour plus d'informations sur l'incorporation des types d'interopérabilité, consultez les procédures « Pour rechercher la référence d'assembly PIA » et « Pour restaurer la dépendance d'assembly PIA » plus loin dans cet article.
Ajoutez le code suivant à la fin de la méthode
ThisAddIn_StartUp
. L'appel àDisplayInExcel
contient deux arguments. Le premier argument est le nom de la liste des comptes à traiter. Le deuxième argument est une expression lambda multiligne qui définit comment les données doivent être traitées. Les valeursID
etbalance
de chaque compte s'affichent dans des cellules adjacentes et la ligne s'affiche en rouge si le solde est inférieur à zéro.DisplayInExcel(bankAccounts, Sub(account, cell) ' This multiline lambda expression sets custom ' processing rules for the bankAccounts. cell.Value = account.ID cell.Offset(0, 1).Value = account.Balance If account.Balance < 0 Then cell.Interior.Color = RGB(255, 0, 0) cell.Offset(0, 1).Interior.Color = RGB(255, 0, 0) End If End Sub)
Pour exécuter le programme, appuyez sur F5. Une feuille de calcul Excel s'affiche avec les données des comptes.
Ajoutez le code suivant à la fin de la méthode
ThisAddIn_StartUp
pour créer un document Word qui contient un lien vers le classeur Excel.Dim wordApp As New Word.Application wordApp.Visible = True wordApp.Documents.Add() wordApp.Selection.PasteSpecial(Link:=True, DisplayAsIcon:=True)
La méthode PasteSpecial comporte sept paramètres, tous définis en tant que paramètres de référence facultatifs. Les arguments nommés et les arguments facultatifs vous permettent de désigner les paramètres auxquels vous souhaitez accéder par leur nom et d’envoyer des arguments à ces seuls paramètres. Dans cet exemple, les arguments sont envoyés pour indiquer qu’un lien vers le classeur dans le Presse-papiers doit être créé (paramètre
Link
) et que ce lien doit être affiché dans le document Word sous forme d’une icône (paramètreDisplayAsIcon
).
- Appuyez sur F5 pour exécuter l'application. Excel démarre et affiche un tableau qui contient les informations des deux comptes de
bankAccounts
. Puis, un document Word apparaît qui contient un lien vers le tableau Excel.
- Dans Visual Studio, cliquez sur Nettoyer la solution dans le menu Générer. Sinon, le complément s'exécutera chaque fois que vous ouvrirez Excel sur votre ordinateur.
Exécutez de nouveau l’application, mais ne cliquez pas sur Nettoyer la solution.
Sélectionnez le bouton Démarrer. Recherchez Microsoft Visual Studio <version> et ouvrez une invite de commandes développeur.
Tapez
ildasm
dans la fenêtre Invite de commandes développeur pour Visual Studio, puis appuyez sur Entrée. La fenêtre IL DASM s'affiche.Dans le menu Fichier de la fenêtre IL DASM, sélectionnez Fichier>Ouvrir. Double-cliquez sur Visual Studio <version>, puis sur Projets. Ouvrez le dossier de votre projet et, dans le dossier bin/Debug, recherchez nom de votre projet.dll. Double-cliquez sur nom de votre projet.dll. Une nouvelle fenêtre affiche les attributs de votre projet, en plus des références à d'autres modules et assemblys. Remarquez que les espaces de noms
Microsoft.Office.Interop.Excel
etMicrosoft.Office.Interop.Word
sont inclus dans l'assembly. Par défaut, dans Visual Studio, le compilateur importe les types dont vous avez besoin à partir d’un assembly PIA référencé dans votre assembly.Pour plus d’informations, consultez Guide pratique pour afficher le contenu d’un assembly.
Double-cliquez sur l’icône MANIFESTE. Une fenêtre affiche la liste des assemblys contenant les éléments référencés par le projet.
Microsoft.Office.Interop.Excel
etMicrosoft.Office.Interop.Word
ne sont pas inclus dans la liste. Étant donné que les types dont votre projet a besoin ont été importés dans votre assembly, les références à un assembly PIA ne sont pas requis. Le déploiement s'en trouve facilité. Les assemblys PIA ne doivent pas être présents sur l'ordinateur de l'utilisateur ; comme une application ne nécessite pas le déploiement d'une version spécifique d'un assembly PIA, les applications peuvent être conçues pour fonctionner avec plusieurs versions d'Office, sous réserve que les API nécessaires existent dans toutes les versions.Le déploiement d'assemblys PIA n'étant plus nécessaire, vous pouvez créer une application dans les scénarios avancés qui fonctionne avec plusieurs versions d'Office, y compris les versions antérieures. Cependant, cela ne fonctionne que si votre code n'utilise pas d'API qui ne sont pas disponibles dans la version d'Office que vous utilisez. Comme il n'est pas toujours évident de savoir si une API particulière était disponible dans une version antérieure, l'utilisation de versions antérieures d'Office n'est pas recommandée.
Notes
Jusqu'à Office 2003, Office ne publiait pas les assemblys PIA. Par conséquent, le seul moyen de générer un assembly d'interopérabilité pour Office 2002 ou versions antérieures consiste à importer la référence COM.
Fermez la fenêtre de manifeste et la fenêtre d'assembly.
- Dans l’Explorateur de solutions, cliquez sur le bouton Afficher tous les fichiers. Développez le dossier Références et sélectionnez Microsoft.Office.Interop.Excel. Appuyez sur F4 pour afficher la fenêtre Propriétés.
- Dans la fenêtre Propriétés, remplacez la valeur True de la propriété Incorporer les types d’interopérabilité par False.
- Répétez les étapes 1 et 2 de cette procédure pour
Microsoft.Office.Interop.Word
. - Appuyez sur F5 pour vérifier que le projet continue de s'exécuter correctement.
- Répétez les étapes 1 à 3 de la procédure précédente pour ouvrir la fenêtre d'assembly. Notez que
Microsoft.Office.Interop.Word
etMicrosoft.Office.Interop.Excel
ne sont plus dans la liste des assemblys incorporés. - Double-cliquez sur l’icône MANIFESTE et faites défiler la liste des assemblys référencés.
Microsoft.Office.Interop.Word
etMicrosoft.Office.Interop.Excel
figurent tous deux dans la liste. Comme l’application référence les assemblys PIA Excel et Word, et que la propriété Incorporer les types d’interopérabilité a la valeur False, les deux assemblys doivent exister sur l’ordinateur de l’utilisateur final. - Dans Visual Studio, cliquez sur Nettoyer la solution dans le menu Générer pour nettoyer le projet achevé.
- Propriétés implémentées automatiquement (Visual Basic)
- Initialiseurs de collection
- Paramètres facultatifs
- Passage des arguments par position et par nom
- Liaison anticipée et liaison tardive
- Expressions lambda
- Procédure pas à pas : incorporation de types provenant d’assemblys managés
- Procédure pas à pas : création de votre premier complément VSTO pour Excel
- COM Interop
Commentaires sur .NET
.NET est un projet open source. Sélectionnez un lien pour fournir des commentaires :