web-dev-qa-db-fra.com

Contrôles ActiveX Microsoft Excel désactivés?

J'ai des feuilles de calcul Excel qui utilisent des cases à cocher ActiveX pour contrôler certaines activités. Ils ont travaillé récemment mais aujourd'hui, ils ont commencé à donner des erreurs. Un collègue m'a alerté à ce sujet, mais l'ordinateur fonctionnait toujours. J'ai vérifié sa version d'Excel contre la mienne et la sienne était plus récente. J'ai remarqué qu'il y avait de nouvelles mises à jour Windows, alors j'ai fait la mise à jour. Après avoir appliqué les mises à jour en attente, cela ne fonctionne plus sur mon ordinateur. Je ne peux plus vérifier les cases à cocher ActiveX et, dans le cadre de la tentative de débogage, il semble que je ne peux même plus ajouter de contrôle ActiveX à une feuille de calcul, même une nouvelle feuille de calcul. J'obtiens une boîte de dialogue d'erreur indiquant "Impossible d'insérer un objet". (Je peux toujours ajouter des contrôles de formulaire, mais pas ActiveX.) Quelqu'un d'autre aurait-il été confronté à cela après une mise à jour récente? Aucune suggestion?

Merci,

Mike

108
Mike Pedersen

D’autres forums, j’ai appris que c’est à cause de MS Update et qu’une bonne solution consiste simplement à supprimer le fichier MSForms.exd de tout sous-dossier Temp du profil de l’utilisateur. Par exemple:

C:\Users\[user.name]\AppData\Local\Temp\Excel8.0\MSForms.exd

C:\Users\[user.name]\AppData\Local\Temp\VBE\MSForms.exd

C:\Users\[user.name]\AppData\Local\Temp\Word8.0\MSForms.exd

Bien entendu, l'application (Excel, Word ...) doit être fermée pour supprimer ce fichier.

156
John W.

Voici la meilleure réponse que j'ai trouvée sur le blog de l'équipe de support technique de Microsoft Excel

Pour certains utilisateurs, les contrôles de formulaire (FM20.dll) ne fonctionnent plus en tant que attendu après l'installation des mises à jour de décembre 2014. Les problèmes sont expérimentés, par exemple lorsqu’ils ouvrent des fichiers avec VBA existant projets utilisant des contrôles de formulaire, essayez d’insérer un contrôle de formulaire dans un fichier nouvelle feuille de calcul ou exécuter un logiciel tiers pouvant utiliser ces logiciels Composants. 

Vous pouvez recevoir des erreurs telles que: 

"Impossible d'insérer un objet" "Bibliothèque d'objets non valide ou contenant des références À des définitions d'objet introuvables"

En outre, vous ne pourrez peut-être pas utiliser ou modifier les propriétés d'un fichier Contrôle ActiveX sur une feuille de calcul ou recevez une erreur en essayant de faire référence à un contrôle ActiveX en tant que membre d'une feuille de calcul via le code . Étapes à suivre après la mise à jour:

Pour résoudre ce problème, vous devez supprimer les versions en cache du fichier Bibliothèques de types de contrôle (fichiers d’extension) sur l’ordinateur client. Faire Pour cela, vous devez rechercher sur votre disque dur les fichiers qui ont le ".exd" extension de nom de fichier et supprimez tous les fichiers .exd que vous avez trouvés. Celles-ci Les fichiers .exd seront recréés automatiquement lorsque vous utiliserez le nouveau fichier contrôle la prochaine fois que vous utilisez VBA. Ces fichiers d'extension seront sous le profil de l'utilisateur et peut également se trouver à d'autres emplacements, tels que le suivant: 

% appdata%\Microsoft\forms

% temp%\Excel8.0

% temp%\VBE

Solution de script:

Parce que ce problème peut affecter plusieurs ordinateurs, il en est de même possible de créer une solution de script pour supprimer les fichiers EXD et exécutez le script dans le cadre du processus de connexion à l'aide d'une stratégie. Le scénario vous auriez besoin devrait contenir les lignes suivantes et devrait être exécuté pour chaque UTILISATEUR car les fichiers .exd sont spécifiques à UTILISATEUR.

del% temp%\vbe\*. exd

del% temp%\Excel8.0\*. exd

del% appdata%\Microsoft\forms\*. exd

del% appdata%\Microsoft\local\*. exd

del% appdata%\Roaming\Microsoft\forms\*. exd

del% temp%\Word8.0\*. exd

del% temp%\PPT11.0\*. exd

Étape supplémentaire:

Si les étapes ci-dessus ne résolvent pas votre problème, une autre étape peut être testé (voir l'avertissement ci-dessous):

  1. Sur un ordinateur entièrement mis à jour et après avoir supprimé les fichiers .exd, ouvrez le fichier dans Excel avec les autorisations de modification.

    Ouvrez Visual Basic pour Applications> modifiez le projet en ajoutant un commentaire ou une modification à un module de code> Debug> Compile VBAProject.

    Enregistrez et rouvrez le fichier. Tester la résolution. S'il est résolu, fournissez ce projet mis à jour à d'autres utilisateurs.

    Avertissement: Si cette étape résout votre problème, sachez qu'après le déploiement de ce projet mis à jour auprès des autres utilisateurs, ceux-ci utiliseront également avoir besoin d'appliquer les mises à jour sur leurs systèmes et leurs fichiers .exd enlevé aussi bien.

Si cela ne résout pas votre problème, il peut s'agir d'un problème différent et un dépannage supplémentaire peut être nécessaire. 

Microsoft travaille actuellement sur ce problème. Regardez le blog pour mises à jour.

La source

35
Jan Moritz

C'était KB2553154 . Microsoft doit publier un correctif. En tant que développeur d'applications Excel, nous ne pouvons pas accéder à tous les ordinateurs de nos clients et en supprimer des fichiers. On nous blâme pour quelque chose que Microsoft a causé.

14
Ron R

Je suis un développeur Excel et j'ai vraiment ressenti la douleur lorsque cela s'est produit. Heureusement, j'ai pu trouver une solution de contournement en renommant les fichiers MSForms.exd dans VBA, même lorsque Excel est en cours d'exécution, ce qui peut également résoudre le problème. Les développeurs Excel ayant besoin de distribuer leurs feuilles de calcul peuvent ajouter le code VBA suivant à leurs feuilles de calcul pour les protéger de la mise à jour MS.

Placez ce code dans n’importe quel module.

Public Sub RenameMSFormsFiles() 
  Const tempFileName As String = "MSForms - Copy.exd"  
  Const msFormsFileName As String = "MSForms.exd"  
  On Error Resume Next 

  'Try to rename the C:\Users\[user.name]\AppData\Local\Temp\Excel8.0\MSForms.exd file  
  RenameFile Environ("TEMP") & "\Excel8.0\" & msFormsFileName, Environ("TEMP") & "\Excel8.0\" & tempFileName 
  'Try to rename the C:\Users\[user.name]\AppData\Local\Temp\VBE\MSForms.exd file  
  RenameFile Environ("TEMP") & "\VBE\" & msFormsFileName, Environ("TEMP") & "\VBE\" & tempFileName 
End Sub  

Private Sub RenameFile(fromFilePath As String, toFilePath As String) 
  If CheckFileExist(fromFilePath) Then 
      DeleteFile toFilePath  
      Name fromFilePath As toFilePath  
  End If  
End Sub

Private Function CheckFileExist(path As String) As Boolean 
  CheckFileExist = (Dir(path) <> "")  
End Function  

Private Sub DeleteFile(path As String) 
  If CheckFileExist(path) Then 
      SetAttr path, vbNormal  
      Kill path  
  End If  
End Sub    

La sous-routine RenameMSFormsFiles tente de renommer les fichiers MSForms.exd des dossiers C:\Users\[user.name]\AppData\Local\Temp\Excel8.0\ et C:\Users\[user.name]\AppData\Local\Temp\VBE\ en MSForms - Copy.exd.

Appelez ensuite la sous-routine RenameMSFormsFiles au tout début de l'événement Workbook_Open.

Private Sub Workbook_Open() 
  RenameMSFormsFiles  
End Sub

La feuille de calcul essaiera de renommer les fichiers MSForms.exd lors de son ouverture. De toute évidence, ce n'est pas une solution parfaite:

  1. L'utilisateur affecté rencontrera toujours les erreurs de contrôle ActiveX lors de l'exécution du code VBA lors de la première ouverture de la feuille de calcul. Ce n'est qu'après avoir exécuté le code VBA une fois et redémarré Excel que le problème est résolu. Normalement, lorsqu'un utilisateur rencontre une feuille de calcul brisée, la réaction réflexe consiste à fermer Excel et à essayer d'ouvrir à nouveau la feuille de calcul. :)
  2. Les fichiers MSForms.exd sont renommés chaque fois que la feuille de calcul est ouverte, même si les fichiers MSForms.exd ne posent aucun problème. Mais le tableur fonctionnera parfaitement.

Au moins pour le moment, les développeurs Excel peuvent continuer à distribuer leur travail avec cette solution de contournement jusqu'à ce que Microsoft publie un correctif.

J'ai posté cette solution ici .

13
Yi Hu

Avec Windows 8.1, je ne pouvais trouver aucun fichier .exd avec Windows Search. D'autre part, une commande cmddir *.exd /Sa trouvé le fichier sur mon système.

5
Marc Thibault

Les conseils en Ko et au-dessus n'ont pas fonctionné pour moi. J'ai découvert que si un utilisateur d'Excel 2007 (avec ou sans la mise à jour de sécurité; ne sachant pas exactement dans quelles circonstances en est la cause) enregistre le fichier, l'erreur d'origine est renvoyée.

J'ai découvert que le moyen le plus rapide de réparer à nouveau le fichier est de supprimer tout le code VBA. Sauvegarder. Puis remplacez le code VBA (copier/coller). Sauvegarder. Avant de tenter cela, je supprime d'abord les fichiers .EXD, car sinon, je reçois une erreur lors de l'ouverture.

Dans mon cas, je ne peux pas mettre à jour/mettre à jour tous les utilisateurs de mon fichier Excel à différents endroits. Puisque le problème revient après que certains utilisateurs ont sauvegardé le fichier Excel, je vais devoir remplacer le contrôle ActiveX par autre chose.

3
pghcpa

La meilleure source d'informations et de mises à jour sur ce problème que j'ai pu trouver se trouve dans les blogs TechNet »Le blog de l'équipe de support Microsoft Excel (comme indiqué):

Les contrôles de formulaire ne fonctionnent plus après les mises à jour de décembre 2014 (Mise à jour le 10 mars 2015)

En mars 2015, un correctif a été publié en plus du correctif automatique et des instructions manuelles. Il est également disponible sur Windows Update.

La dernière mise à jour et correction de Microsoft: 3025036 Erreur "Impossible d’insérer un objet" dans une solution Office ActiveX personnalisée après l’installation de la mise à jour de sécurité MS14-082

STATUS: Mise à jour du 10 mars 2015:

Les correctifs pour ce problème ont été publiés dans les mises à jour de mars 2015 pour Office 2007, 2010 et 2013. 

Informations générales sur le problème:

Pour certains utilisateurs, les contrôles de formulaire (FM20.dll) ne fonctionnent plus comme prévu après l'installation des mises à jour de sécurité Microsoft Office MS14-082 pour décembre 2014. Des problèmes surviennent parfois, notamment lors de l'ouverture de fichiers avec des projets VBA existants à l'aide de contrôles de formulaire. d'insérer un contrôle de formulaire dans une nouvelle feuille de calcul ou d'exécuter un logiciel tiers pouvant utiliser ces composants. 

https://technet.Microsoft.com/en-us/library/security/ms14-082.aspx

Vous pouvez recevoir des erreurs telles que: "Impossible d'insérer un objet"; "Bibliothèque d'objets invalide ou contenant des références à des définitions d'objets introuvables."; "Le programme utilisé pour créer cet objet est Forms. Ce programme n'est pas installé sur votre ordinateur ou il ne répond pas. Pour modifier cet objet, installez Forms ou assurez-vous que toutes les boîtes de dialogue de Formulaires sont fermées." [...] En outre, vous pouvez être incapable d'utiliser ou de modifier les propriétés d'un contrôle ActiveX dans une feuille de calcul ou recevoir une erreur lorsque vous essayez de faire référence à un contrôle ActiveX en tant que membre d'une feuille de calcul via du code.

Solutions manuelles et complémentaires:

Solution de script:

Étant donné que ce problème peut affecter plusieurs ordinateurs, il est également possible de créer une solution de script pour supprimer les fichiers EXD et d'exécuter le script dans le cadre du processus de connexion à l'aide d'une stratégie. Le script dont vous avez besoin doit contenir les lignes suivantes et doit être exécuté pour chaque UTILISATEUR car les fichiers .exd sont spécifiques à UTILISATEUR.

del %temp%\vbe\*.exd
del %temp%\Excel8.0\*.exd
del %appdata%\Microsoft\forms\*.exd
del %appdata%\Microsoft\local\*.exd
del %temp%\Word8.0\*.exd
del %temp%\PPT11.0\*.exd

Étape supplémentaire:

Si les étapes ci-dessus ne résolvent pas votre problème, une autre étape peut être testée (voir l'avertissement ci-dessous):

  1. Sur un ordinateur entièrement mis à jour et après avoir supprimé les fichiers .exd, ouvrez le fichier dans Excel avec les autorisations de modification.

  2. Ouvrez Visual Basic pour Applications> modifiez le projet en ajoutant un commentaire ou une modification à un module de code> Débogage> Compiler VBAProject.

  3. Enregistrez et rouvrez le fichier. Tester la résolution.

S'il est résolu, fournissez ce projet mis à jour à d'autres utilisateurs.

Avertissement: Si cette étape résout votre problème, sachez qu'après le déploiement de ce projet mis à jour auprès des autres utilisateurs, ces derniers devront également appliquer les mises à jour appliquées sur leurs systèmes et les fichiers .exd. 

2
dePatinkin

Instructions simplifiées pour les utilisateurs finaux. N'hésitez pas à copier/coller ce qui suit.

Voici comment résoudre le problème quand il se pose:

  1. Fermez tous vos programmes et fichiers Office.
  2. Ouvrez l'explorateur Windows et tapez% TEMP% dans la barre d'adresse, puis appuyez sur Entrée. Cela vous mènera dans le dossier temporaire du système.
  3. Recherchez et supprimez les dossiers suivants: Excel8.0, VBE, Word8.0
  4. Maintenant, essayez à nouveau d'utiliser votre fichier, il ne devrait pas y avoir de problèmes.

Vous devrez peut-être attendre que le problème se produise pour que ce correctif fonctionne. Son application prématurée (avant que Windows Update ne soit installée sur votre système) ne vous aidera pas.

2
perry

J'ai finalement trouvé cette réponse sur la base de connaissances officielle de Microsoft:

http://support.Microsoft.com/kb/3025036/EN-US

Aucune nouvelle information ici que ce que nous avons dans les réponses précédentes, mais au moins cela reconnaît que Microsoft est au courant du problème.

1
Mike Pedersen

Je veux fournir une réponse qui a fonctionné comme la seule chose pour moi (je réalise que je pourrais être le seul jamais). J'avais dans une macro que j'appelais en utilisant le ruban. Il y avait le code suivant:

colStore = new Collection

Je n'étais pas au courant que cela jette une erreur, alors j'ai été dérouté et j'ai tout essayé ici. Le bouton a juste cessé de fonctionner et je ne pouvais pas le faire fonctionner. Quand j'ai remarqué l'erreur et l'ai corrigée pour:

Set colStore = new Collection

Cela a recommencé à fonctionner. Absolument étrange si vous me demandez, mais peut-être que ça aidera quelqu'un qui était aussi désespéré que moi.

0
Spurious

Je sais que de nombreuses réponses ont déjà été postées à ce sujet, mais aucune réponse n’a fonctionné de manière indépendante pour mon site. Alors voici ce qui a fonctionné pour moi:

Étape 1: Désinstallez les mises à jour suivantes - KB2920789, KB2920790, KB2920792, KB2920793, KB2984942, KB2596927

Étape 2: masquez ces mises à jour afin qu'elles ne soient pas installées lors de redémarrages ultérieurs

Étape 3: Supprimer le dossier Excel8.0 de C:\Users\<>\AppData\Local\Temp

Étape 4: Redémarrez la station de travail (je voudrais également m'assurer que les bases de connaissances mentionnées ci-dessus n'ont pas été appliquées par inadvertance)

0
chaltahai