Symptômes
Si vous automatisez Microsoft Excel avec Microsoft Visual Basic .NET, Microsoft Visual C# .NET ou Microsoft Visual C++, vous pouvez recevoir l’erreur suivante lors de l’appel de certaines méthodes :
Erreur : 0x80028018 (-2147647512)Description : Ancien format ou bibliothèque de types non valide
Cause
Vous recevez cette erreur lors de l’appel d’une méthode Excel lorsque les conditions suivantes sont remplies :
-
La méthode nécessite un LCID (identificateur de paramètres régionaux).
-
Vous exécutez une version anglaise d’Excel. Toutefois, les paramètres régionaux de l’ordinateur sont configurés pour une langue autre que l’anglais.
Si l’ordinateur client exécute la version anglaise d’Excel et que les paramètres régionaux de l’utilisateur actuel sont configurés pour une langue autre que l’anglais, Excel tente de localiser le module linguistique correspondant à la langue configurée. Si le module linguistique est introuvable, l’erreur est signalée.
Solution de contournement
Pour contourner ce problème, vous pouvez utiliser l’une des méthodes suivantes :
-
Installez le pack d’interface utilisateur multilingue pour votre version d’Office.
-
Exécutez la méthode ou la propriété Excel à l’aide d’InvokeMember afin de pouvoir spécifier cultureInfo pour l’appel. Par exemple, le code suivant illustre comment appeler la méthode Add de l’objet Workbooks avec « en-US » comme CultureInfo :
Dim oApp As New Excel.Application()oApp.Visible = TrueoApp.UserControl = TrueDim oBooks As Object = oApp.WorkbooksDim ci As System.Globalization.CultureInfo = New System.Globalization.CultureInfo("en-US")oBooks.GetType().InvokeMember("Add", Reflection.BindingFlags.InvokeMethod, Nothing, oBooks, Nothing, ci)
-
Vous pouvez également définir CultureInfo avant d’appeler la méthode Excel. Par exemple :
Dim oApp As New Excel.Application()oApp.Visible = TrueoApp.UserControl = TrueDim oldCI As System.Globalization.CultureInfo = _ System.Threading.Thread.CurrentThread.CurrentCultureSystem.Threading.Thread.CurrentThread.CurrentCulture = _ New System.Globalization.CultureInfo("en-US")oApp.Workbooks.Add()System.Threading.Thread.CurrentThread.CurrentCulture = oldCI
-
Créez un répertoire 1033 sous Microsoft Office\Office11. Ensuite, copiez excel.exe dans le répertoire 1033 et renommez-le en xllex.dll. Pour plus d’informations, cliquez sur le lien suivant :http://blogs.msdn.com/eric_carter/archive/2005/06/15/429515.aspx
Lorsque vous utilisez l’une de ces solutions de contournement pour un ordinateur où les paramètres régionaux ne correspondent pas à la version linguistique actuelle d’Office, vous devez être familiarisé avec le comportement d’Excel et la façon dont Excel interprétera les données qui peuvent être mises en forme pour un paramètre régional spécifique. Pour plus d’informations sur l’écriture de solutions Excel mondialisées avec Visual Studio .NET, consultez les articles suivants dans MSDN :Création de solutions Office à utiliser dans plusieurs pays/régions
http://msdn2.microsoft.com/en-us/library/aa168494(office.11).aspxProblèmes de globalisation et de localisation pour les solutions créées avec Microsoft Visual Studio Tools pour Microsoft Office System
http://msdn2.microsoft.com/en-us/library/aa192494(office.11).aspx
État
Microsoft a confirmé qu’il s’agit d’un bogue dans les produits Microsoft répertoriés dans la section « S’applique à ».
Informations supplémentaires
Étapes pour reproduire le comportement
-
Vérifiez que les paramètres régionaux de l’ordinateur sont définis sur une langue autre que l’anglais.Pour Windows 2000 :
-
Dans Windows Panneau de configuration, double-cliquez sur Options régionales.
-
Sous l’onglet Général, sélectionnez un emplacement, puis cliquez sur OK.
Pour Windows XP ou Windows Server 2003 :
-
Dans Panneau de configuration, ouvrez Options régionales et linguistiques.
-
Sous l’onglet Options régionales , sélectionnez des paramètres régionaux, puis cliquez sur OK.
-
-
Démarrez Microsoft Visual Studio .NET.
-
Dans le menu Fichier, pointez sur Nouveau, puis cliquez sur Projet. Dans la boîte de dialogue Nouveau projet, sous Types de projets, cliquez sur Projets Visual Basic. Sous Modèles, cliquez sur Application Windows, puis sur OK. Par défaut, Form1 est créé.
-
Dans le menu Affichage, cliquez sur Boîte à outils, puis ajoutez un bouton à Form1.
-
Pour afficher la fenêtre de code du formulaire, double-cliquez sur Button1.
-
Dans la fenêtre de code, remplacez le code suivant
Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles Button1.ClickEnd Sub
Avec:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim oApp As Object Dim oDoc As Object oApp = CreateObject("Excel.Application") oApp.Visible = True oDoc = oApp.Workbooks.Add oDoc.Close() oApp.Quit() oDoc = Nothing oApp = NothingEnd Sub
-
Ajoutez la ligne suivante au début du module de code Form1 :
Option Strict Off
-
Appuyez sur F5 pour générer et exécuter le programme.
-
Pour générer l’erreur, cliquez sur Button1. L’erreur se produit sur la ligne qui indique :
oDoc = oApp.Workbooks.Add
Références
Pour plus d’informations sur Office Automation, visitez le site Web de développement Microsoft Office suivant :
http://support.microsoft.com/ofd En outre, consultez les articles suivants de la Base de connaissances Microsoft :
301982 Comment automatiser Microsoft Excel à partir de Visual Basic .NET
302084 Comment automatiser Microsoft Excel à partir de Microsoft Visual C# .NET