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

113

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 ont commencé aujourd'hui à donner des erreurs. J'ai été alerté par un collègue, mais cela fonctionnait toujours sur mon ordinateur. J'ai vérifié sa version d'Excel par rapport à 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 cocher les cases ActiveX et, dans le cadre de la tentative de débogage, il semble que je ne puisse même plus ajouter un 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 l'objet». (Je peux toujours ajouter des contrôles de formulaire, mais pas ActiveX.) Quelqu'un d'autre rencontre-t-il cela après une mise à jour récente? Aucune suggestion?

Merci,

Mike

Mike Pedersen
la source
de quel contrôle s'agissait-il précisément? ou voulez-vous dire TOUS activeX?
peege
3 de mes collègues semblent également avoir ce problème. Leurs feuilles de calcul utilisent, je pense, des contrôles ActiveX - ComboBoxes et Buttons. L'un d'eux avait son PC en cours de travail et n'a donc pas obtenu les mises à jour. Quand il l'a récupéré, il a exécuté avec succès les commandes. Autrement dit, jusqu'à ce que son PC soit mis à jour automatiquement. Maintenant, ce n'est pas le cas. Nous ne pouvons pas non plus ajouter de contrôles ActiveX à leurs feuilles.
Mitchell Kaplan
5
Je rencontre moi aussi ce problème, comme tous les utilisateurs de mon entreprise. Comment MS pourrait-il publier une mise à jour qui brise les contrôles ActiveX dans Excel? C'est fou.
harryg
3
@ vba4all: non, c'est une question de programmation et appartient ici.
Harry Johnston
2
@ vba4all: Les contrôles ActiveX sont un outil de programmation - n'est-ce pas? Pour quoi d'autre les utiliseriez-vous? Ce serait différent si l'OP posait, par exemple, des questions sur un produit tiers particulier (qui utilise VBA) qui avait cessé de fonctionner. Mais dans ce cas, il semble que ce soit son propre code qui a été affecté?
Harry Johnston

Réponses:

159

À partir d'autres forums, j'ai appris que cela était dû à la mise à jour MS et qu'une bonne solution consiste simplement à supprimer le fichier MSForms.exd de n'importe quel sous-dossier Temp dans le 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.

John W.
la source
1
J'avais un PC non mis à jour. J'ai ouvert Excel et j'ai pu ajouter un bouton ActiveX. J'ai cherché C: \ Users [nom.utilisateur] \ AppData \ Local \ Temp \ Excel8.0 \ MSForms.exd, mais il n'y avait pas de dossier Excel8.0. J'ai ensuite exécuté la mise à jour Windows. J'ai essayé à nouveau d'ajouter un bouton ActiveX à ma feuille de calcul et je n'ai pas pu. J'ai également noté que j'avais maintenant Excel8.0 \ MSForms.exd. Je l'ai supprimé et sans redémarrer, j'ai rouvert Excel et je pouvais maintenant ajouter le bouton ActiveX. Merci!
Mitchell Kaplan
2
Je vous remercie!! Ce processus a résolu le problème sur mon ordinateur. Je pense que pour les développeurs qui ont de grandes versions publiques que cela casse ... J'espère que MS publiera un correctif.
Mike Pedersen du
1
Cela n'a pas fonctionné pour moi. Je suis en train de restaurer le système en 12/7/14 sur l'un de nos PC pour voir si cela résoudra le problème. J'ai également essayé de supprimer un bouton et de le remplacer par une réponse ci-dessous, mais j'ai reçu une fenêtre contextuelle "Impossible d'insérer un objet" ou quelque chose du genre.
mountainclimber
1
Pour les utilisateurs de Windows XP, le sous-dossier Temp peut être trouvé ici: C: \ Documents and Settings \ [user.name] \ Local Settings \ Temp \ Excel8.0 \ MSForms.exd
bjtilley
2
Après avoir supprimé les fichiers ci-dessus, cela n'a pas fonctionné pour moi, mais j'ai trouvé ces fichiers dans le dossier C: / Windows / Temp et je les ai supprimés. Ensuite, j'ai pu faire fonctionner ce problème.
QV1
35

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

Pour certains utilisateurs, les contrôles de formulaires (FM20.dll) ne fonctionnent plus comme prévu après l'installation des mises à jour de décembre 2014. Des problèmes sont rencontrés à des moments tels que lorsqu'ils ouvrent des fichiers avec des projets VBA existants à l'aide de contrôles de formulaires, tentent d'insérer un contrôle de formulaires dans une nouvelle feuille de calcul ou exécutent un logiciel tiers pouvant utiliser ces composants.

Vous pouvez recevoir des erreurs telles que:

"Impossible d'insérer l'objet" "Bibliothèque d'objets non valide ou contient des références à des définitions d'objet introuvables"

En outre, il se peut que vous ne puissiez pas utiliser ou 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 le code. Étapes à suivre après la mise à jour:

Pour résoudre ce problème, vous devez supprimer les versions mises en cache des bibliothèques de types de contrôle (fichiers d'extension) sur l'ordinateur client. Pour ce faire, vous devez rechercher sur votre disque dur les fichiers qui ont l'extension de nom de fichier «.exd» et supprimer tous les fichiers .exd que vous trouvez. Ces fichiers .exd seront recréés automatiquement lorsque vous utiliserez les nouveaux contrôles la prochaine fois que vous utiliserez VBA. Ces fichiers d'extension seront sous le profil de l'utilisateur et peuvent également se trouver dans d'autres emplacements, tels que les suivants:

% appdata% \ Microsoft \ forms

% temp% \ Excel8.0

% temp% \ VBE

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 exécuter le script dans le cadre du processus d'ouverture de session à l'aide d'une stratégie. Le script dont vous avez besoin doit contenir les lignes suivantes et doit être exécuté pour chaque USER car les fichiers .exd sont spécifiques à USER.

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 qui 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.

    Ouvrez Visual Basic pour Applications> modifiez le projet en ajoutant un commentaire ou une modification quelconque à n'importe quel module de code> Déboguer> Compiler VBAProject.

    Enregistrez et rouvrez le fichier. Testez la résolution. En cas de résolution, fournissez ce projet mis à jour à des utilisateurs supplémentaires.

    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 utilisateurs devront également faire appliquer les mises à jour sur leurs systèmes et supprimer les fichiers .exd.

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. Surveillez le blog pour les mises à jour.

La source

Jan Moritz
la source
3
Vérifiez la source liée, il a maintenant mis à jour la solution de script
peterson
Sur ma machine,% appdata% est défini comme "C: \ Users \ <utilisateur actuel> \ AppData \ Roaming \", il n'y a donc pas de répertoire "% appdata% \ microsoft \ local \". De plus, "% appdata% \ Roaming \ microsoft \ forms \" semble être redondant, comme "C: \ Users \ <utilisateur actuel> \ AppData \ Roaming \ Roaming \ microsoft \ forms \" et, encore une fois, aucun répertoire de ce type n'existe sur ma machine.
pstraton le
15

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 supprimer des fichiers. Nous sommes blâmés pour quelque chose que Microsoft a causé.

Ron R
la source
1
Aussi KB2596927 et KB2726958, selon la version d'Office que vous exécutez.
Harry Johnston
13

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 qui ont besoin de distribuer leurs feuilles de calcul peuvent ajouter le code VBA suivant à leurs feuilles de calcul pour les immuniser contre 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    

Le sous-programme RenameMSFormsFiles tente de renommer les fichiers MSForms.exd dans les 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 le sous-programme 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 concerné rencontrera toujours les erreurs de contrôle ActiveX lors de l'exécution du code VBA lors de la toute 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 cassée, la réaction instinctive est de fermer Excel et d'essayer d'ouvrir à nouveau la feuille de calcul. :)
  2. Les fichiers MSForms.exd sont renommés à chaque fois que la feuille de calcul s'ouvre, même en l'absence de problème avec les fichiers MSForms.exd. Mais la feuille de calcul fonctionnera très bien.

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 .

Yi Hu
la source
Merci Yi. Cela a fonctionné pour moi mais j'ai dû redémarrer mon Excel 2010 (cela pourrait être lié au fait que j'utilisais l'éditeur VBA en même temps?)
J. Chomel
5

Avec Windows 8.1, je n'ai trouvé aucun fichier .exd à l'aide de la recherche Windows. D'autre part, une commande cmd a dir *.exd /Strouvé le seul fichier sur mon système.

Marc Thibault
la source
3

Les conseils en KB 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é; pas sûr des circonstances exactes qui en sont la cause) enregistre le fichier, l'erreur d'origine revient.

J'ai découvert que le moyen le plus rapide de réparer à nouveau le fichier était de supprimer tout le code VBA. Sauver. Remplacez ensuite le code VBA (copier / coller). Sauver. Avant de tenter cela, je supprime d'abord les fichiers .EXD, sinon j'obtiens une erreur à l'ouverture.

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

pghcpa
la source
2
Aucune des suggestions n'a fonctionné pour moi, sauf l'enregistrement du fichier au format XLSX (suppression de tout le code), puis le recollage comme vous l'avez fait - le réenregistrement au format XLSM. Énorme douleur MASSIVE dans le cul Microsoft. La réinstallation du bureau ne m'a pas non plus
résolu le problème,
2

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

Voici comment résoudre le problème lorsqu'il survient:

  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 avoir de problèmes.

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

poiré
la source
2

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 mentionné):

Les contrôles de formulaire cessent de fonctionner 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 automatisé et des instructions manuelles, et il est également disponible sur Windows Update.

Dernière mise à jour et correctif de Microsoft: erreur 3025036 «Impossible d'insérer un objet» dans une solution Office personnalisée ActiveX après l'installation de la mise à jour de sécurité MS14-082

STATUT: Mise à jour du 10 mars 2015:

Des 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 sont parfois rencontrés lors de l'ouverture de fichiers avec des projets VBA existants à l'aide de contrôles de formulaires, essayez pour insérer un contrôle de formulaires dans une nouvelle feuille de calcul ou 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 l'objet"; "Bibliothèque d'objets invalide ou contient 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 dans Forms sont fermées." [...] En outre, il se peut que vous ne puissiez pas utiliser ou 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 le 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 exécuter le script dans le cadre du processus d'ouverture de session à l'aide d'une stratégie. Le script dont vous avez besoin doit contenir les lignes suivantes et doit être exécuté pour chaque USER car les fichiers .exd sont spécifiques à USER.

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 qui 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 quelconque à n'importe quel module de code> Déboguer> Compiler VBAProject.

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

En cas de résolution, fournissez ce projet mis à jour à des utilisateurs supplémentaires.

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 utilisateurs devront également faire appliquer les mises à jour sur leurs systèmes et supprimer les fichiers .exd.

dePatinkin
la source
1

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 elle reconnaît que Microsoft est conscient du problème.

Mike Pedersen
la source
0

Je sais que de nombreuses réponses ont déjà été publiées à ce sujet, mais aucune des réponses n'a fonctionné indépendamment pour mon site. Voici donc 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 des redémarrages suivants

Étape 3: Supprimez 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 KB mentionnés ci-dessus n'ont pas été appliqués par inadvertance)

chaltahai
la source
0

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

colStore = new Collection

Je n'étais pas conscient que cela génère une erreur, j'ai donc été déconcerté 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 comme suit:

Set colStore = new Collection

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

Faux
la source