Résumé
Lorsque vous utilisez l’opérateur New ou la fonction CreateObject dans Microsoft Visual Basic pour créer une instance d’une application Microsoft Office, le message d’erreur suivant peut s’afficher :
Erreur d’exécution « 429 » : le composant ActiveX ne peut pas créer d’objet
Cette erreur se produit lorsque le modèle COM (Component Object Model) ne peut pas créer l’objet Automation demandé et que l’objet Automation n’est donc pas disponible pour Visual Basic. Cette erreur ne se produit pas sur tous les ordinateurs.
Cet article explique comment diagnostiquer et résoudre les problèmes courants susceptibles d’entraîner cette erreur.
Informations supplémentaires
Dans Visual Basic, il existe plusieurs causes de l’erreur 429. L’erreur se produit si l’une des conditions suivantes est remplie :
-
Il y a une erreur dans l’application.
-
Il y a une erreur dans la configuration du système.
-
Il manque un composant.
-
Il y a un composant endommagé.
Pour trouver la cause de l’erreur, isolez le problème. Si vous recevez le message d’erreur « 429 » sur un ordinateur client, utilisez les informations suivantes pour isoler et résoudre l’erreur dans les applications Microsoft Office.
Note Certaines des informations suivantes peuvent également s’appliquer aux serveurs COM non-Office. Toutefois, cet article suppose que vous souhaitez automatiser les applications Office.
Examiner le code
Avant de résoudre l’erreur, essayez d’isoler une seule ligne de code qui peut être à l’origine du problème.
Si vous découvrez qu’une seule ligne de code peut être à l’origine du problème, procédez comme suit :
-
Assurez-vous que le code utilise la création d’objets explicite.
Les problèmes sont plus faciles à identifier s’ils sont limités à une seule action. Par exemple, recherchez la création d’objet implicite qui est utilisée comme l’un des éléments suivants.
Exemple de code 1Application.Documents.Add 'DON'T USE THIS!!
Exemple de code 2
Dim oWordApp As New Word.Application 'DON'T USE THIS!! '... some other code oWordApp.Documents.Add
Ces deux exemples de code utilisent la création d’objets implicite. Microsoft Office Word 2003 ne démarre pas tant que la variable n’est pas appelée au moins une fois. Étant donné que la variable peut être appelée dans différentes parties du programme, le problème peut être difficile à localiser. Il peut être difficile de vérifier que le problème est dû à la création de l’objet Application ou à la création de l’objet Document .
Au lieu de cela, vous pouvez effectuer des appels explicites pour créer chaque objet séparément, comme suit.Dim oWordApp As Word.Application Dim oDoc As Word.Document Set oWordApp = CreateObject("Word.Application") '... some other code Set oDoc = oWordApp.Documents.Add
Lorsque vous effectuez des appels explicites pour créer chaque objet séparément, le problème est plus facile à isoler. Cela peut également faciliter la lecture du code.
-
Utilisez la fonction CreateObject au lieu de l’opérateur New lorsque vous créez une instance d’une application Office.
La fonction CreateObject mappe étroitement le processus de création que la plupart Microsoft Visual C++ clients utilisent. La fonction CreateObject autorise également les modifications du CLSID du serveur entre les versions. Vous pouvez utiliser la fonction CreateObject avec des objets à liaison anticipée et avec des objets à liaison tardive. -
Vérifiez que la chaîne « ProgID » transmise à
CreateObject est correcte, puis vérifiez que la chaîne « ProgID » est indépendante de la version. Par exemple, utilisez la chaîne « Excel.Application » au lieu d’utiliser la chaîne « Excel.Application.8 ». Le système qui échoue peut avoir une version antérieure de Microsoft Office ou une version plus récente de Microsoft Office que la version que vous avez spécifiée dans la chaîne « ProgID ». -
Utilisez la commande Erl pour signaler le numéro de ligne de la ligne de code qui n’aboutit pas. Cela peut vous aider à déboguer des applications qui ne peuvent pas s’exécuter dans l’IDE. Le code suivant vous indique quel objet Automation ne peut pas être créé (Microsoft Word ou Microsoft Office Excel 2003) :
Dim oWord As Word.Application Dim oExcel As Excel.Application On Error Goto err_handler 1: Set oWord = CreateObject("Word.Application") 2: Set oExcel = CreateObject("Excel.Application") ' ... some other code err_handler: MsgBox "The code failed at line " & Erl, vbCritical
Utilisez la fonction MsgBox et le numéro de ligne pour suivre l’erreur.
-
Utilisez la liaison tardive comme suit :
Dim oWordApp As Object
Les objets à liaison précoce nécessitent que leurs interfaces personnalisées soient marshalées au-delà des limites de processus. Si l’interface personnalisée ne peut pas être marshalée pendant CreateObjectou new, vous recevez le message d’erreur « 429 ». Un objet à liaison tardive utilise l’interface définie par le système IDispatch qui ne nécessite pas de marshaling d’un proxy personnalisé. Utilisez un objet à liaison tardive pour vérifier que cette procédure fonctionne correctement.
Si le problème se produit uniquement lorsque l’objet est lié en amont, le problème se trouve dans l’application serveur. En règle générale, vous pouvez réinstaller l’application comme décrit dans la section « Examiner le serveur Automation » de cet article pour corriger le problème.
Examiner le serveur Automation
La raison la plus courante pour laquelle une erreur se produit lorsque vous utilisez CreateObject ou New est un problème qui affecte l’application serveur. En règle générale, la configuration de l’application ou l’installation de l’application provoque le problème. Pour résoudre les problèmes, utilisez les méthodes suivantes :
-
Vérifiez que l’application Office que vous souhaitez automatiser est installée sur l’ordinateur local. Assurez-vous que vous pouvez exécuter l’application. Pour ce faire, cliquez sur Démarrer, sur
Exécuter, puis essayez d’exécuter l’application. Si vous ne pouvez pas exécuter l’application manuellement, l’application ne fonctionnera pas via l’automatisation. -
Réinscrivez l’application comme suit :
-
Cliquez sur Démarrer, puis sur Exécuter.
-
Dans la boîte de dialogue Exécuter , tapez le chemin du serveur, puis ajoutez /RegServer à la fin de la ligne.
-
Cliquez sur OK.
L’application s’exécute en mode silencieux. L’application est réinscrite en tant que serveur COM.
Si le problème se produit parce qu’une clé de Registre est manquante, ces étapes corrigent généralement le problème.
-
-
Examinez la clé LocalServer32 sous le CLSID de l’application que vous souhaitez automatiser. Assurez-vous que la clé LocalServer32 pointe vers l’emplacement approprié pour l’application. Assurez-vous que le nom du chemin d’accès est au format de chemin court (DOS 8.3). Vous n’avez pas besoin d’inscrire un serveur à l’aide d’un nom de chemin d’accès court. Toutefois, les noms de chemin d’accès longs qui incluent des espaces incorporés peuvent entraîner des problèmes sur certains systèmes.
Pour examiner la clé de chemin d’accès stockée pour le serveur, démarrez l’Éditeur du Registre Windows, comme suit :-
Cliquez sur Démarrer, puis sur Exécuter.
-
Tapez regedit, puis cliquez sur OK.
-
Accédez à la touche HKEY_CLASSES_ROOT\CLSID.
Les CLSID des serveurs Automation inscrits sur le système se trouvent sous cette clé. -
Utilisez les valeurs suivantes de la clé CLSID pour rechercher la clé qui représente l’application Office que vous souhaitez automatiser. Examinez la clé LocalServer32 de la clé CLSID pour le chemin d’accès.
Serveur Office
Clé CLSID
Access.Application
{73A4C9C1-D68D-11D0-98BF-00A0C90DC8D9}
Excel.Application
{00024500-0000-0000-C000-000000000046}
Outlook.Application
{0006F03A-0000-0000-C000-000000000046}
PowerPoint.Application
{91493441-5A91-11CF-8700-00AA0060263B}
Word.Application
{000209FF-0000-0000-C000-0000000000046}
-
Vérifiez le chemin d’accès pour vous assurer qu’il correspond à l’emplacement réel du fichier.
Remarque Les noms de chemin d’accès courts peuvent sembler corrects lorsqu’ils ne sont pas corrects. Par exemple, Office et Microsoft Internet Explorer (s’ils sont installés dans leurs emplacements par défaut) ont un chemin d’accès court similaire à C:\PROGRA~1\MICROS~X\ (où
X est un nombre). Ce nom peut ne pas apparaître initialement comme un nom de chemin d’accès court.
Pour déterminer si le chemin est correct, procédez comme suit :-
Cliquez sur Démarrer, puis sur Exécuter.
-
Copiez la valeur à partir du Registre, puis collez-la dans la boîte de dialogue Exécuter .
Note Supprimez le commutateur /automation avant d’exécuter l’application. -
Cliquez sur OK.
-
Vérifiez que l’application s’exécute correctement.
Si l’application s’exécute après avoir cliqué sur OK, le serveur est inscrit correctement. Si l’application ne s’exécute pas après avoir cliqué sur OK, remplacez la valeur de la clé LocalServer32 par le chemin d’accès correct. Utilisez un nom de chemin d’accès court si vous le pouvez.
-
-
Testez l’altération possible du modèle Normal.dot ou du fichier de ressources Excel.xlb. Des problèmes peuvent se produire lorsque vous automatisez Microsoft Word ou Microsoft Excel si le modèle Normal.dot dans Word ou le fichier de ressources Excel.xlb dans Excel est endommagé. Pour tester ces fichiers, recherchez dans les disques durs locaux toutes les instances de Normal.dot ou d’Excel.xlb.
Note Vous pouvez trouver plusieurs copies de ces fichiers. Il existe une copie de chacun de ces fichiers pour chaque profil utilisateur installé sur le système.
Renommez temporairement les fichiers Normal.dot ou Excel.xlb, puis réexécutez votre test d’automatisation. Word et Excel créent ces fichiers s’ils ne les trouvent pas. Vérifiez que le code fonctionne. Si le code fonctionne lors de la création d’un fichier Normal.dot, supprimez les fichiers que vous avez renommés. Ces fichiers sont endommagés. Si le code ne fonctionne pas, vous devez rétablir ces fichiers à leur nom d’origine pour enregistrer tous les paramètres personnalisés enregistrés dans ces fichiers. -
Exécutez l’application sous le compte Administrateur. Les serveurs Office nécessitent un accès en lecture/écriture au Registre et au lecteur de disque. Les serveurs Office peuvent ne pas se charger correctement si vos paramètres de sécurité actuels refusent l’accès en lecture/écriture.
Examiner le système
La configuration du système peut également entraîner des problèmes de création de serveurs COM hors processus. Pour résoudre les problèmes, utilisez les méthodes suivantes sur le système sur lequel l’erreur se produit :
-
Déterminez si le problème se produit avec un serveur hors processus. Si vous avez une application qui utilise un serveur COM particulier (tel que Word), testez un autre serveur hors processus pour vous assurer que le problème ne se produit pas dans la couche COM elle-même. Si vous ne pouvez pas créer un serveur COM hors processus sur l’ordinateur, réinstallez les fichiers système OLE comme décrit dans la section « Réinstallation de Microsoft Office » de cet article, ou réinstallez le système d’exploitation pour résoudre le problème.
-
Examinez les numéros de version des fichiers système OLE qui gèrent l’automatisation. Ces fichiers sont généralement installés en tant qu’ensemble. Ces fichiers doivent correspondre aux numéros de build. Un utilitaire d’installation mal configuré peut installer par erreur les fichiers séparément. Cela entraîne une incompatibilité des fichiers. Pour éviter les problèmes d’automatisation, examinez les fichiers pour vous assurer que les builds de fichiers correspondent.
Les fichiers Automation se trouvent dans le répertoire Windows\System32. Examinez les fichiers suivants.Nom du fichier
Version
Date de modification
Asycfilt.dll
10.0.16299.15
29 septembre 2017
Ole32.dll
10.0.16299.371
29 mars 2018
Oleaut32.dll
10.0.16299.431
3 mai 2018
Olepro32.dll
10.0.16299.15
29 septembre 2017
Stdole2.tlb
3.0.5014
29 septembre 2017
Pour examiner la version du fichier, cliquez avec le bouton droit sur le fichier dans l’Explorateur Windows, puis cliquez sur Propriétés. Notez les quatre derniers chiffres de la version du fichier (le numéro de build) et la date de la dernière modification du fichier. Assurez-vous que ces valeurs sont identiques pour tous les fichiers Automation.
Note Les fichiers suivants concernent Windows 10 version 1709, build 16299.431. Ces nombres et dates ne sont que des exemples. Vos valeurs peuvent être différentes. -
Utilisez l’utilitaire configuration du système (Msconfig.exe) pour examiner les services et le démarrage du système pour les applications tierces susceptibles de restreindre l’exécution du code dans l’application
OfficeRemarque Désactivez le programme antivirus uniquement temporairement sur un système de test qui n’est pas connecté au réseau.
Vous pouvez également suivre ces étapes dans Outlook pour désactiver les compléments tiers :
Si cette méthode résout le problème, contactez le fournisseur d’antivirus tiers pour plus d’informations sur une mise à jour du programme antivirus.-
Dans le menu Fichier, cliquez sur Options, puis sur Compléments.
-
Cliquez sur Gérer les compléments COM, puis sur Accéder.
Note La boîte de dialogue Compléments COM s’ouvre. -
Décochez la case pour n’importe quel complément tiers, puis cliquez sur OK.
-
Redémarrez Outlook.
-
Réinstaller Office
Si aucune des procédures précédentes ne résout le problème, supprimez puis réinstallez Office.
Pour plus d’informations, consultez l’article Office suivant :
Télécharger et installer ou réinstaller Office 365 ou Office 2016 sur un PC ou Mac
Références
Pour plus d’informations sur l’automatisation d’Office et les exemples de code, accédez au site web Microsoft suivant :