A nouveau : Win erreur : "Le sujet n'est pas approuvé pour l'action spécifiée"

Trebly2 Messages postés 25 Date d'inscription samedi 29 juillet 2006 Statut Membre Dernière intervention 13 septembre 2011 - 18 mars 2009 à 03:43
Trebly2 Messages postés 25 Date d'inscription samedi 29 juillet 2006 Statut Membre Dernière intervention 13 septembre 2011 - 9 nov. 2010 à 00:32
[applicable aussi Office 2003, 2007 et VBA, et composants - contrôles - VB6 utilisés en VBA]

Bonjour,

J'avais rencontré ce problème il y a longtemps quand MS avait supprimé pour des raisons de sécurité l'utilisation de la "RichTextBox" (voir sujet correspondant)

Aujourd'hui je relance après une non utilisation exceptionnelle de plusieurs mois, une grosse application VBA (+70 000 lignes de code, pour 500 routines en 25 modules et 50 forms + objets spécifiques) et plus rien ne passe.

Après une recherche assez brève je découvre que les contrôles MsFlexGrid et MSHFlexGrid donc "msflxgrd.ocx" et "mshflxgd.ocx" ont disparu de l'application (absents de forms).
Donc la compilation ne reconnait plus les variables objets dans les routines correspondantes.

Si l'on essaye de les replacer dans les forms dont cesz contrôles ont disparu on obtient le message laconique (sans code erreur : "Le sujet n'est pas approuvé pour l'action spécifiée".

Après un examen de la Base de Registre, j'ai pu vérifier que ces composants sont "enregistrés, référencés" plusieurs fois, c'est normal puisque ma machine comprend pas mal d'outils de développement qui utilisent ces composants.

Je soupçonne donc une incohérence, avec des test de sécurité nouveaux dans XP SP3 (seul changement majeur a priori sur ma machine).
Comme je fais toujours faire une vérification dans d'autres environnements avant d'émettre ce type de message, le premier test est celui effectué
par un ami proche (poids lourd du domaine) a fait les test dans son propre environnement (office 2007 et VB2005 et non 2003 pour moi, ainsi .net complet, test dito avec VB6) et le résultat est identique tous systèmes confondus (fonctionnent par contre si l'on utilise VB6 seul).

Ces composants essentiels et qui n'ont aucun équivalent ne sont plus utilisables pour les applis sous Office (VBA ou .net), ceci dans des conditions inconnues.

Ce qui est tout de même à nouveau plus qu'irritant de la part de Microsoft et même franchement intolérable est le caractère laconique de l'info et la désinvolture vis à vis de ses clients (contraints), la conséquence étant l'arrêt total d'applications, le verrouillage semblant supprimer purement et simplement vos contrôles de vos applis (faire bien ses backups, car si vous sauvegardez malencontreusement... le danger est là).

Merci d'avance pour toute info sur le sujet (le Web ne donne rien, MS non plus, ou du moins je n'ai pas trouvé, sauf mon message sur richtextbox qui sort en tête sur Google). En particulier les clefs assez complexes de leur enregistrement dans la BDR (je ne suis pas suffisamment expert dans leur structure) anciennes ou nouvelles qui peuvent bloquer l'usage de ces composants de cette manière particulièrement brutale et dommageable pour les utilisateurs.

Trebly

16 réponses

Londonic Messages postés 298 Date d'inscription jeudi 22 janvier 2009 Statut Membre Dernière intervention 26 septembre 2009
5 juil. 2009 à 00:50
Peut-être le nouveau compilateur cherche le fichier à une adresse enregistrée dans un fichier de config, et enregistre seulement l'adresse de la config dans le registre, peut-être... Pourquoi pas un dossier.bin du config de la base dans un projet. Facile de faire un registre avec un viewtree. 
Chez Microsoft, le pire c'est de gérer la souris dans un Viewport. Il faudrait remplacer un de ses ancêtres par un PictureBox, mais désinvolture Laconique c'est gentil.
Et c'est vrai que la BDR est un gros B de R... , qu'il vaut mieux consacrer une machine au studio de développement ou aller chez Linux avec une arborescence de dossier au lieu de ce ridicule index de texte multiracines de clefs arborescentes.
Peut-être en spécifiant des actions abordables par le sujet. Qui sait ?
0
Trebly2 Messages postés 25 Date d'inscription samedi 29 juillet 2006 Statut Membre Dernière intervention 13 septembre 2011
10 juil. 2009 à 19:38
Bonjour,

Je reviens avec la solution qui m'a couté un bon paquet d'heures (j'ai bien du passer 50h sur pb).
Sollicité hier par un membre qui m'a envoyé un message perso, une annulation de RV me donne le temps de rédiger une petite synthèse.

Le message brutal et laconique "Le sujet n'est pas approuvé pour l'action spécifiée" résulte d'une pile d'erreurs et, sans signification claire, se produit à l'ouverture des macros complémentaires.
Aucune compilation n'est possible. Il n'y a accès à aucune information qui puisse mettre sur une piste quelconque.
Une PME qui utilise depuis des années Office 2003 et a développé ses propres outils ee gestion en VBA peut se retrouver sans gestion commerciale, sans facturation etc....

Le problème est le suivant (résumé de principe inutile de rentrer dans les détails, ref etc) :
pour des raisons de sécurité une mise à jour de sécurité vient invalider plusieurs OCX du VBA d'office 2003 et en fait l'ensemble des bibliothèques qui les contiennent.
Il s'ensuit d'énormes trous de composants.
Le compilateur ne comprend plus rien puisqu'il lui manque beaucoup de références.
Le système est donc bloqué et aucune démarche logique de recherche d'anomalie à partir du ou des messages (évolutifs...) ne peut aboutir.

Solution :
-Il  faut passer absolument toutes les mises à jour de sécurité de Windows
- Il faut ensuite passertoutes les mises à jour d'office 2003 : le dernier sp + les mise à jour de sécurité récentes
- par sécurité installer enfin les outils de développement "libre" de MS "Microsoft Visual Basic 2008 Express Edition", ainsi vous récupérerez les dernières versions des OCX sécurisés.

Lorsque vous relancerez vos macros cela devrait aller beaucoup mieux.
Au pire (c'est à dire une compilation qui se plante sur une instruction lambda) recherchez dans les références les "MANQUANTE" et réinstallez les. En cas de doute l'observateur d'objets vous aidera, pour trouver les noms d'objets appartenant à des OCX ou DLL manquantes. En principe pas avec la bibliothèque Microsoft.

L'ordre des opérations assure la fiabilité de la procédure vis à vis de la BdR, en effet il faut que les références soient mises à jour dans le bon ordre.
- les mises à jour de sécurité invalident ce qu'il faut et interdisent de se tromper de référence.
- les mises à jour Office vous installeront avec les bons CSID les dernières bibliothèques VBA sécurisées.
- enfin "goodies" et "améliorations" plusieurs compléments améliorations et facilités seront apportés par "Microsoft Visual Basic 2008 Express Edition".

Les objets disparus dans les forms réapparaitront etc...
Après les bonnes mises à jour, j'ai pas loin de 100k instructions qui se sont remises à fonctionner en totalité.

Attention : des sauvegardes (intempestives) de macros pendant la période d'instabilité peuvent générer des dégraissages fâcheux, repartir alors de la dernière version ayant fonctionné normalement.

Bonne chance
Cordialement

Trebly

Nota: vous retrouverez

j'espère en septembre des synthèses sur les différents sujets que j'ai pu et continuerai à traiter sur les forums d'aide mais avec des exemples complets, des blogs, copies d'écrans et téléchargements actuellement dispersées sur mon site http://trebly.info (non encore ouvert)
0
debethune Messages postés 13 Date d'inscription lundi 7 janvier 2008 Statut Membre Dernière intervention 8 octobre 2009
23 juil. 2009 à 11:17
bonjour,

merci pour ces infos !
je suis novice et ai développé une petite macro qui communique avec le port série grâce à MSCOMM32.OCX.
j'ai malheureusement laisser windows faire ses mise à jour automatiques et depuis je n'ai plus le contrôle MScomm. et lorsque j'essaie d'en créer un nouveau ce fameux message "Le sujet n'est pas approuvé pour l'action spécifiée" !!!

je suis en train de mettre windows et office à jour !!! en espérant que ca règle mes problèmes !!

je vous tiens au courant !
merci encore

bertrand
0
Londonic Messages postés 298 Date d'inscription jeudi 22 janvier 2009 Statut Membre Dernière intervention 26 septembre 2009
23 juil. 2009 à 15:56
Et que la macro pourrait faire réapparaitre les contrôles MsFlexGrid et MSHFlexGrid donc "msflxgrd.ocx" et "mshflxgd.ocx" qui ont disparu de l'application (absents de forms).
Ca serait bien!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
debethune Messages postés 13 Date d'inscription lundi 7 janvier 2008 Statut Membre Dernière intervention 8 octobre 2009
23 juil. 2009 à 16:21
Salut,

MERCI pour ta réponse rapide !

il n'y a rien de spécial dans ma macro : simplement communiquer avec le port COM1 + faire un graph Excel...
mais le problème est réglé : après quelques manips infructueuses (j'ai d'abord suivi à la lettre tes indications puis réinstaller OFFICE, backup des MàJ windows...) j'ai réinstallé windows et CA MARCHE !!!
j'ai aussi bien sur désactive les MàJ automatiques qui ne servent à rien sur le PC qui fait tourner cette appli' !

heureusement que je suis tombé sur tes explications sans quoi j'aurai cherché...... longtemps... longtemps...

bref ! un grand merci à tous ceux qui postent des tutos, codes, problèmes sur vbfrance. étant 100% autodidacte, je n'aurai jamais pu développer les nombreuses applications qui tournent ici (Excel, Solidworks, COM port serie, outlook, carte d'acquisition graphique, etc...)!!! il serait peut être temps que je partage mes quelques codes (sans doute encore trop "déstructurés")...

à la prochaine j'espère...
bertrand
0
Londonic Messages postés 298 Date d'inscription jeudi 22 janvier 2009 Statut Membre Dernière intervention 26 septembre 2009
23 juil. 2009 à 17:53
Oui! bien besoin de structures. Depuis qu'on les a remplacées par des classes, on sait plus comment hiérarchiser ses dossiers. Faut revenir à dADA.
Et Faut poster.
0
Trebly2 Messages postés 25 Date d'inscription samedi 29 juillet 2006 Statut Membre Dernière intervention 13 septembre 2011
24 juil. 2009 à 00:16
Bonsoir,

Je confirme que tant que les bibliothèques ne sont pas validées les contrôles correspondants à leur contenu disparaissent des forms affichées (mais elle sont toujours dans le code si vous n'enregistrez pas, par contre jamais vos procédure associées aux objets ne seront touchées).
Si l'on n'enregistre pas, elles réapparaitront normalement après validation des bibliothèques.
Il s'agit tout particulièrement de richtext, msflexgrid, mshflexgrid (90% des cas).

Bien sur contrairement au cas d'utilisation d'outils qui neutralisent les invalidations vous aurez des applications plus robustes.
La sécurité ça coute cher et le paradoxe est qu'une faille mineure n'a pas d'importance tant qu'elle n'est pas découverte par les hackers et autres espions, par contre ensuite ce sont des trous béants dans le système que l'on doit fermer de toute urgence.
Si vous êtes une PME qui fait de la recherche vous n'imaginez pas les risques que vous prenez.
Donc SVP appliquez bien les mises à jour de sécurité même c'est un peu, voire passablement fastidieux et énervant.
Enfin, c'est le prix à payer.
Notez enfin qu'un système vieillit assez vite et la cohérence des mise à jour est un problème très complexe. Donc SVP passez les mises à jour régulièrement vous aurez un système plus stable.

Les mises à jour automatiques suivant l'usage des systèmes peut être gênante (développeurs) donc prévoyez un créneau de temps, faites vos sauvegardes système (pour ma part je sépare toujours le système de données dans des partitions différentes), puis faites vous un plan de mises à jour (lisez même rapidement les fiches associées, vous pourrez programmer efficacement vos test) puis définissez des test essentiels associés puis passez les mises à jour, renseignez vous. Cela vous évitera de nombreux incidents couteux.

le thème en cours, où je me suis moi-même laissé piéger en est un bon exemple.

A bientôt

Trebly
0
Londonic Messages postés 298 Date d'inscription jeudi 22 janvier 2009 Statut Membre Dernière intervention 26 septembre 2009
24 juil. 2009 à 08:20
Sauvegarder la prochaine fois que je passe à Londres. Merci Trebly !

Pour la mise à jour de W7, j'attendrais la génération de prises SATA qui permettra d'installer Microsoft sur disque externe.
En Attendant, Dos est toujours lisible sur Vista directement sans W31.(sur Os, il faut installer toutes les versions intermédiaires.)
0
cs_lannoyge Messages postés 1 Date d'inscription mardi 21 juin 2005 Statut Membre Dernière intervention 16 septembre 2009
16 sept. 2009 à 18:19
Merci Trebly pour toutes ces infos, je viens de passer une journée sur le net et sur mon invite de commande à faires regsvr32.exe etc...
En effet très peu d'infos là dessu, c'est vraiment dingue.

Bonne continuation.
0
greffierjc Messages postés 13 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 21 novembre 2009
8 nov. 2009 à 17:47
Bonjour,

Je reviens sur l'erreur "Le sujet n'est pas approuvé pour l'action spécifiée".
J'entre dans ce cas, car toutes les applications que j'ai écrites en VBA, et qui possèdent l'ocx MSHFlexGrid sont bloquées, et j'en ai besoin tous les mois, surtout en cette fin d'année.

J'ai lu et relu tout ce qu'a écrit Trebly, et je me suis lancé.

Je suis sous Windows XP Pro SP3, et office 2003. J'utilise les ocx de VB6 SP6.

Pour ce qui est des mises à jour je les effectue régulièrement chaque fois qu'elles arrivent : donc tous les mois.

J'ai donc téléchargé "Microsoft Visual Basic 2008 Express Edition", que j'ai trouvé sur un site.

Malheureusement, une fois tout téléchargé, j'ai la même erreur. J'ai du louper une étape, mais laquelle?

Quelqu'un pourrait-il m'informer sur la marche exacte du téléchargement et l'après téléchargement.

Je remercie de tout cœur toutes les suggestions qui me seront faites.

Je suis prêt à mettre mon téléphone à votre disposition.


Merci pour vos réponses.

Greffier.
0
Risleure Messages postés 1 Date d'inscription mercredi 12 décembre 2007 Statut Membre Dernière intervention 19 novembre 2009
19 nov. 2009 à 13:22
Bonjour,

Ce matin j'ai rencontré le même pb avec le même message. La bibliothèque que je voulais utiliser est MS Comm Comtrols 6.0
Après une recherche sur Google, j'ai écrit avec notepad le fichier suivant que j'ai collé et enregistré avec une extension .reg le texte suivant

Windows Registry Editor Version 5.00

[-HKEY_LOCAL_MACHINE\SOFTWARE\Mi crosoft\Internet Explorer\ActiveX Compatibility\{648A5600-2C6E-101B-82B6-000000000014}]

NB : bien laisser une ligne vide après Windows Registry Editor Version 5.00
Tu le poses sur le bureau et double clic /Oui Et pour moi tout est rentré dans l'ordre !!!

c'est microsoft qui a fait une nouvelle farce dans un mise à jour qui date du 16/06/2009 et qui rajoute Mscommx dans liste des activex potentiellement dangereux pour internet explorer.
0
Trebly2 Messages postés 25 Date d'inscription samedi 29 juillet 2006 Statut Membre Dernière intervention 13 septembre 2011
20 nov. 2009 à 12:33
Bonjour,

Désolé j'ai raté le premier message de Greffier.

Pour ma part je n'ai rencontré le problème.

Oui c'est vrai des mises à jour de composants interviennent régulièrement, c'est à dire chaque que fois qu'un malin trouve un moyen d'entrer... dans votre système et que Microsoft verrouille le plus tôt possible chaque fois qu'il en est informé. En effet le problème est que, dès qu'une faille est trouvée, cette information se répend chez les pourvoyeurs de virus, hackers et autres comme une traînée de poudre. Le petit détail inconnu devient un trou béant dans votre système, il a changé de statut. Aussi prendre le risque de forcer l'activation de l'activeX en cause est assez inconscient.

Ceci étant dit, le procédure de base est toujours la même :
[list]
- ne télécharger de correctifs, de programme, d'activeX que depuis le site Microsoft ou de sites certifiés
- la mise à jour Windows change le statut de l'ancien activeX
- la mise à jour du logiciel qui contient le nouvel ActiveX (mise à jour dite de sécurité),(là peut être le problème) est en général postérieure et doit être passée après la mise à jour Windows. Cette mise à jour réactivera l'appel à la fonction assurée par l'activeX.

Vous comprenez qu'il est difficile de retrouver l'enchaînement de mise à jour qui conduit au blocage sur le système et quand ça coince la solution est une remise à jour réparation générale, Windows d'abord puis, dans le cas d'utilisation de activeX VB6 et/ou Express, puis enfin Office
/list
Il n'est pas facile et peu efficace de chercher à pister le problème dans la BR. Sauf pour MS dans le cas ou une anomalie serait venue se sur-ajouter (d'où l'intérêt de se manifester et de signaler quand le problème et comment il a été résolu, c'est le prix à payer pour avoir vu...)

Pour ce qui concerne Greffier, je penche pour un problème d'ordre :
1- Maj windows
2- Maj VB6
3- Maj Express
4- Maj Office

Att: Update sait très bien quoi mettre à jour pour établir la cohérence, mais si ce n'est pas dans l'ordre ou si des modifs manuelles non prévues ont été effectuées, la cohérence c'est peut-être le verrouillage, d'où la nécessité de reprendre tout dans l'ordre (un peu fastidieux mais très efficace).

A+
Cordialement
Trebly

nota complémentaire : la version de MSHFlexGrid doit être 1.1 et celle du container MSComm32.Ocx 6.01.9813 du November 13, 2008 (InprocServer32)
0
greffierjc Messages postés 13 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 21 novembre 2009
21 nov. 2009 à 12:44
Bonjour, et merci à tous les deux,

Voici ce que j'ai pu glaner, et que j'ai mis en marche, qu'en pensez-vous.

http://www.nirsoft.net/utils/acm.html

(à voir et à traduire, pour posséder les tables et tableaux, avec google)


ActiveX Compatibility Manager v1.00
Copyright (c) 2004 Nir Sofer

Description
Cet utilitaire vous permet de facilement désactiver / activer les composants ActiveX sur Internet Explorer.
Il désactive le composant ActiveX désirée en définissant le «kill bit» du CLSID désiré sous la clé de registre suivante: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Internet Explorer \ ActiveX Compatibility
Pour plus d'informations sur cette clé de registre, lisez cet article de Microsoft

L'aide d'ActiveX Compatibility Manager
ActiveX Compatibility Manager est un exécutable autonome et ne nécessite aucun processus d'installation ou des DLL supplémentaires. Afin de commencer à l'utiliser, copiez simplement le fichier exécutable (acm.exe) vers n'importe quel dossier vous voulez, et l'exécuter.
La fenêtre principale affiche des acm la liste de tous les composants ActiveX qui sont actuellement disponibles pour l'activation / désactivation. Pour les composants qui sont actuellement installés sur votre ordinateur, des informations supplémentaires sont également affichées: nom du produit, nom de société, la description, la version, nom de fichier et plus ...
Si vous souhaitez désactiver un composant ActiveX qui ne figurent pas dans la liste, vous pouvez l'ajouter à la liste en utilisant "ajouter de nouveaux éléments" option. Sur la page "ajouter de nouveaux éléments" fenêtre, vous pouvez taper un ou plusieurs CLSID ou ProgID séparés par une virgule ou la touche Entrée. Par exemple: si vous souhaitez ajouter ADODB.Stream et composants ShockwaveFlash.ShockwaveFlash à la liste: Vous pouvez simplement taper leurs CLSID:
(00000566-0000-0010-8000-00AA006D2EA4)
(D27CDB6E-AE6D-11cf-96B8-444553540000)

Ou bien, vous tapez son ProgID:
ADODB.Stream, ShockwaveFlash.ShockwaveFlash
Après Ok cliquant sur ' », les composantes que vous avez tapés sont ajoutés à la liste de compatibilité ActiveX et vous êtes permis de facilement désactiver / réactiver leur compte.
Vous pouvez également ajouter de nouveaux CLSID à partir d'un fichier texte, en utilisant «Charger les éléments nouveaux à partir du fichier" option. Lorsque vous utilisez cette option, tous les CLSID dans le fichier texte sera disponible dans un état désactivé.
Désactivation / activation de Macromedia Flash Player
Par défaut, Flash Player n'est pas répertorié dans la liste de compatibilité ActiveX (sauf si elle a ajouté un autre programme), mais votre pouvoir facilement ajouter en suivant les instructions ci-dessous:
1. Sélectionnez "ajouter de nouveaux éléments" dans le menu Fichier (ou appuyez sur Ctrl + N).
2. Tapez le CLSID de Macromedia Flash: (D27CDB6E-AE6D-11cf-96B8-444553540000)
Si Flash est installé sur votre ordinateur, vous pouvez également taper le ProgID de Flash: ShockwaveFlash.ShockwaveFlash
3. Appuyez sur OK et Flash seront ajoutés à la liste "ActiveX Compatibility '. Après cela, vous pouvez facilement sélectionner l'élément Flash, puis désactiver / activer.
Command-Line Options
/ <Filename> AddFromFile
Ajouter tous CSLIDs spécifié dans le fichier à la liste de compatibilité ActiveX. Le CSLIDs sont ajoutés à l'état désactivé.
/ <Filename> sText
Sauvegarder la liste de compatibilité ActiveX dans un fichier texte ordinaire.
/ <Filename> stab
Sauvegarder la liste de compatibilité ActiveX dans un onglet de fichier texte délimité.
/ <Filename> stabular
Sauvegarder la liste de compatibilité ActiveX dans un fichier texte sous forme de tableau.
/ <Filename> shtml
Sauvegarder la liste de compatibilité ActiveX dans le fichier HTML.

/ <Filename> sverhtml
Sauvegarder la liste de compatibilité ActiveX dans le fichier HTML. (vertical)
/ <Filename> sXml
Sauvegarder la liste de compatibilité ActiveX dans le fichier XML.

Traduire dans d'autres langues
Cet utilitaire vous permet de traduire facilement tous les menus, les boîtes de dialogue, et d'autres cordes à d'autres langues.
Pour ce faire, suivez les instructions ci-dessous:
1. ACM Exécuter avec paramètre / savelangfile:
acm.exe / savelangfile
Acm_lng.ini Un fichier nommé sera créé dans le dossier d'utilité ACM.
2. Ouvrez le fichier créé langue dans le Bloc-notes ou dans tout autre éditeur de texte.
3. Traduire tous les menus, les boîtes de dialogue, et les entrées de chaîne à la langue désirée. En option, vous pouvez également ajouter votre nom et / ou un lien vers votre site Web. (TranslatorName et les valeurs TranslatorURL) Si vous ajoutez cette information, il sera utilisé dans le 'About' fenêtre.
4. Après avoir fini la traduction, Run ACM, et toutes les chaînes traduites seront chargés à partir du fichier de langue.
Si vous souhaitez exécuter acm sans la traduction, renommez simplement le fichier de langue, ou le déplacer vers un autre dossier.
Licence
Cet utilitaire est libérée sous forme de freeware pour usage personnel et non commercial. Vous êtes autorisé à distribuer gratuitement cet utilitaire via des disquettes, CD-ROM, Internet, ou de toute autre manière, tant que vous ne facturez pas quelque chose pour cela. Si vous distribuez cet utilitaire, vous devez inclure tous les fichiers du package de distribution, sans aucune modification!
Disclaimer
Le logiciel est fourni "TEL QUEL" sans aucune garantie, expresse ou implicite, y compris, mais sans s'y limiter, les garanties implicites de qualité marchande et d'adéquation à un usage particulier. L'auteur ne saurait être tenue responsable pour tout dommage particulier, incident, consécutif ou indirect dû à la perte de données ou toute autre raison.
Feedback
Si vous avez n'importe quel problème, suggestion, commentaire, ou vous avez trouvé un bug dans mon utilitaire, vous pouvez envoyer un message à nirsofer@yahoo.com
Télécharger ActiveX Compatibility Manager

ActiveX Compatibility Manager est également disponible dans d'autres langues. Afin de changer la langue de l'ACM, téléchargez le fichier zip langue appropriée, extrait de la «acm_lng.ini», et le mettre dans le même dossier que vous avez installé utilitaire ACM.
Langue
Traduit par

Français
Jean-Michel Gillion - www.etrad.net

Galicien
XOS Antn Vicente RODRGUEZ

Polonais
Szymon Ogrodnik

Allemand
ppm007

Italien
Fabio Mastroianni

Coréen
Fineman

Japonais
X-WORKS

Portugais-Brésil
Mark Nascimento

Hébreu

Chinois Traditionnel
Lee Jones

Hongrois
Hevesi Jnos








greffier
0
Florent_maf Messages postés 1 Date d'inscription vendredi 3 août 2007 Statut Membre Dernière intervention 10 février 2010
10 févr. 2010 à 09:35
Bonjour à tous ;

à l'image de Trebly2, j'ai passé moi aussi bon nombre d'heures de recherche au sujet de controles "non approuvé" ou "not trusted".
La démarche de Trebly2 n'a pas fonctionné pour ma part.
A savoir que sur mon poste étaient présents (lors de mon soucis) Visual Studio 2008 SP1, Visual Basic 6 SP6, Office 2000 et SolidWorks 2008 SP5 (j'utilise VBA).

Après avoir suivi les conseils de Trebly2 (j'ai même installé Visual Basic 2008 Express Edition SP1, ce qui me semblait faire doublon avec Visual Studio), je ne suis pas parvenu à obtenir le controle Msdatgrd.ocx (Microsoft Datagrid) "approuvé".

J'ai aussi cherché à mettre a jour mon VBA via cette page(je pense c'est la dernière version disponible à ce jour).
Mais en vain.

Bref, j'avais toujours des contrôles non-approuvés lorsqu'enfin j'ai trouvé cette mise à jour pour Visual Basic 6.
Celle-ci permet notament d'installer la dernière version des contrôles ActiveX approuvés.
Voici la liste des contrôles (et leur version) contenus dans ce msi.

Ayant Visual Basic 6 installé sur ma machine, je n'ai pas rencontré de difficulté à installer cette mise à jour. Mais si cela ne fonctionne pas chez vous, il est possible d'extraire les contrôles du MSI. Il ne vous restera alors qu'à les inscrire via regsvr32.

ATTENTION : le forçage d'activation d'un contrôle dé-validé par une mise à jour à l'aide avec "ActiveX Compatibility Manager" (comme le suggère Greffier) ne vous permettra que de repousser le problème et SURTOUT d'ouvrir une faille de sécurité.

PS : L'installation de Visual Basic 2008 (selon les recommandations de Trebly2) me semble inutile car ce produit est associé au développement VB.Net n'utilisant pas d'OCX. La mise à jour de ces contrôles n'est donc pas influencée par la présence ou non de ce programme. (ceci dit, je me trompe peut être).

Espérant apporter de l'aide à celui qui lira ces lignes.
A la prochaine pour de nouvelles aventures (MERCI µsoft !!! )

Florent
0
Trebly2 Messages postés 25 Date d'inscription samedi 29 juillet 2006 Statut Membre Dernière intervention 13 septembre 2011
17 févr. 2010 à 20:57
Bonsoir,

D'accord en presque tous points avec Florent.
J'avais omis de dire que je présupposais que vb.net n'était pas installé et plus visual-studio 2008.
En effet implicitement je me plaçais dans la situation d'utilisateurs d'office 2003, comme de nombreuses PME et qui ont développé des applications VBA qui leur ont couté fort cher et qui se voient désactivées, sans crier gare, lors de mise à jour de sécurité réellement indispensables de Windows. Cette désactivation entraine des perturbation d'outils de production et en conséquence des couts et pertes importantes, interdisant l'acquisition de nouveaux outils.
Les utilisateurs n'ont pas toujours les moyens des mises à jour. En effet au delà des couts logiciels, ces derniers évoluent (i.e. office 2008 et office 2003), en conséquence non seulement il faut mettre à jour les logiciels (parfois de modifications majeures), les modèles etc. mais aussi assurer la formation du personnel, tirer partie des nouveaux outils. Les entreprises, même si elles l'ont prévu à un certain terme ne sont pas prêtes à supporter la chute de ces épées de Damoclès.

PS : L'installation de Visual Basic 2008 (selon les recommandations de Trebly2) me semble inutile car ce produit est associé au développement VB.Net n'utilisant pas d'OCX. La mise à jour de ces contrôles n'est donc pas influencée par la présence ou non de ce programme. (ceci dit, je me trompe peut être).


D'accord, mais indépendamment des OCX, on utilise les dll de base contenant les contrôles fondamentaux dont la mise à jour est utile.

L'hypothèse de mes propos était : "comment s'en sortir sur le base de VB6 et VBA (2003) et ses updates disponibles".

Attention à propos de mises à jour d'ocx et dll :

Les fonctions associées sont enregistrées suivant leur CSID souvent les modules équivalents (même nom et fonctions, souvent améliorées et fiabilisées) nécessitent non seulement un ré-enregistrement (regsvr32) mais d'être associé à votre application. Cette opération une fois l'ocx ou la dll placée ou il faut (vous pouvez quand il y a plusieurs versions de même nom, les mettre dans un répertoire complémentaire permettant une distribution d'un véritable package sur plusieurs postes) se réalise en une seule fois. Dans "outils:références" de VB(A) désactivez la référence dont vous savez qu'elle contient la mise à jour et utilisez parcourir pour venir pointer le "module (ocx, dll)" à jour contenant les références utiles. Cette manip effectue s'il n'a pas été fait automatiquement l'enregistrement dans la BR (regsvr32) et recréera les liens avec votre application lors de la recompilation de votre application. Une fois la compil passée enregistrez.
Nota1: une référence non résolue peut créer les effets les plus intempestifs sans signification à la compilation. Pour que les messages d'erreur de votre compilation ait un sens il faut absolument que les références générales (par opposition aux références individuelles d'une appli dans un module tel (MS forms 2.0 FM20.dll) soient toutes marquées "non MANQUANTES".
Nota2: VBAProject vous donne accès à des fonction permettant de lister les références, les CSID, versions etc... J'ai développé un tel module qui donne toutes les références détaillées d'une application sous format Excel. Malheureusement je ne peut la diffuser car elle n'est pas totalement portable et je n'ai pas la disponibilité pour répondre aux questions qui apparaitraient sans aucun doute. Je ne peux le diffuser éventuellement qu'à titre de modèle mais je ne pourrait pas répondre aux questions.

Donc en fusionnant suivant vos besoins et circonstances, les suggestions de Florent et les miennes, en donnant, quand cela vous est possible, la priorité aux recommandations de Florent, vous devriez apporter une bonne solution à ce problème.
Enfin la disponibilité du SP6 de VB6 (et VBA) est un point majeur, après beaucoup de sueurs.


Bonne chance à tous

Trebly


Trebly
0
Trebly2 Messages postés 25 Date d'inscription samedi 29 juillet 2006 Statut Membre Dernière intervention 13 septembre 2011
9 nov. 2010 à 00:32
Bonsoir,

Il me semble utile de compléter mes propos précédents sur ce sujet.

Nous nous mettons donc dans la situation ou un développement VBA (Project simple ou macro complémentaire) voit un arrêt avec une erreur de compilation sur une variable devenue inconnue et référençant un contrôle activeX.
L'application est en panne et quand on consulte la form qui contient ce contrôle, il a disparu.

Si l'on regarde la boîte à outils : il n'y est plus.
Si l'on va voir dans les "références" l'activeX correspondant au contrôle peut être décoché.
Si l'on vérifie la BdR il est toujours bien référencé.
Si l'on réactive la référence, puis si l'on introduit le "contrôle complémentaire" qui avait disparu, quand on tente de la réinsérer dans la form on obtient le message (dont tout ce sujet fait l'objet "Le sujet n'est pas approuvé pour l'action spécifiée"

[i]Que se passe-t-il, que faire
/i[b]
Que se passe-t-il ?/b
Microsoft a jugé que cet activex comportait une faille potentielle de sécurité s'il était utilisé dans un environnement IE et l'a déclaré indésirable lors d'une mise à jour de sécurité.
En cascade lors du lancement de votre application VBA et lors de l'appel de la "form" (et si vous avez besoin de recompiler) la contrôle apparait verrouillé, et il est neutralisé dans la "form" (mais pas effacé, important), il disparait aussi des contrôle utilisables et s'il fait l'objet à lui seul d'une référence elle est désactivée.

Alors que faire ?
[list][*] surtout ne pas sauvegarder
[*] S'il s'agit d'un contrôle Microsoft alors tout ce qui a été dit précédemment est valable. Par contre si le contrôle n'est pas Microsoft il y a problème. Bien sur, Microsoft devrait avoir émis un message d'alerte pour ne pas mettre parfois des entreprises entières au chômage technique pour cause de panne informatique, mais... c'est peut-être beaucoup en demander. Par contre le risque encouru est bien réel. Il faut apprécier.
Donc si le contrôle n'est pas Microsoft, on va d'abord contrôler la BdR (regedit), la procédure est détaillée plus loin, si vous ne comprenez pas la suite lisez les détail tout de suite.
On devrait trouver le CLSID du contrôle dans la liste dépendante de la clef :
[HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Internet Explorer \ ActiveX Compatibility]
et on trouve alors la valeur DWORD du nom de "Compatibility Flags" : dont la donnée Hexa sera 400 soit 0x00000400 (1024)

C'est ce qui verrouille votre ActiveX

Remplacez la donnée de la valeur ("value of data" en anglais serait plutôt "valeur de la donnée") par 0 et vous lui redonnez tous les droits.

[*] Réactivez la référence
[*] Réactivez le contrôle (éventuellement ré-associez l'icône)
[*] Redessinez le contrôle à sa place
[*] Oh! Miracle il reprend son nom d'origine et tous ses attributs (parce que vous n'avez pas sauvegardé)
[*] Maintenant, comme il y a peut-être danger, cherchez avant ou après (à vous de juger), s'il n'existe pas une version du même contrôle, qui ne porte pas évidemment le même CLSID, et ne figure pas dans la liste fatidique. Là, il faudrait recréer les paramètres, vous avez donc intérêt à en garder trace en pratiquant la restauration précédente au moins temporairement.

Evidemment c'est tout ce travail que font les utilitaires cités dans le sujet, mais plus ou moins complètement et plus ou moins de contrôles et vous ne le savez pas (une solution est de regarder avant et après leur passage)

Voilà c'est fini. Tout remarche.

Bien à tous et merci de vos encouragements et remerciements.
Trebly

Nota 1 : Détails de manips sur la BdR. ATT : Si vous n'avez pas l'habitude faites une sauvegarde, en effet il n'y a pas avec Regedit de fonction "sauve" et si votre chat passe par là, il peut effacer une clef et fermer la fenêtre et votre Bdr peut devenir incohérente et irréparable.

Il y a plusieurs voies possibles suivant les informations dont vous disposez, il faut trouver le CLSID de votre contrôle
[list]

[*] Si vous connaissez la désignation du contrôle (dans les noms de références ou liste des contrôles supplémentaires, ou bien le nom exact qu le nom qui apparait dans la boite à outils passez ci-dessous en #B attention ce n'est pas la désignation qui figure dans les noms des références ou des contrôles... par exemple
[*] Cherchez le nom exact du module (dll, ocx, olb etc... pas celui du contrôle) dans les valeurs (c'est plus rapide) et leurs apparitions (plusieurs) vous la trouverez dans une clef appelée "InprocServer32" et dans la donnée "default", copiez la clef principale qui est la CLSID de votre module.
[*] Recherchez la clef (attention clef pas une donnée ni une valeur. Le module pouvant comprendre plusieurs contrôles il va falloir se livrer à un petit jeu de piste pour retrouver le CLSID du contrôle (puisque . Vous allez trouver dans HKEY_CLASSES_ROOT le nom système associé à votre module et au voisinage votre contrôle et son CLSID

[*] #B - Si vous connaissez le nom du contrôle vous trouverez son CLSID associé.
[*] Quand vous l'avez trouvé copier le {CLSID} avec ses crochet dans le presse papier
[*] Positionnez vous dans l'arborescence des clefs à
[HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Internet Explorer \ ActiveX Compatibility]
[*] Relancer à partir de ce point la recherche ou cherchez manuellement (dans l'ordre alpha) la clef et regardez la valeur de la donnée "Compatibility Flags"
[*] Continuez la procédure principale

/list

Nota 2 :
Si vous avez implémenté la référence VBIDE (Microsoft Visual Basic for Application Extensibility) vous avez en principe accès aux données concernant les références ce qui facilite grandement les analyses et permet de tracer un historique de l'environnement d'une application, indispensable si elle est un peu lourde.
Pour ma part j'ai développé un bout de VBA qui écrit dans la page (vierge) courante du classeur ouvert une table complète de toutes les références utilisées dans un projet. Il n'est malheureusement pas disponible à la distribution son packaging même minimal est hors de mes disponibilités de temps. Je peux le confier sur demande à titre de guide et d'exemple d'utilisation de VBIDE (mais il plantera(it) à 99% dans votre contexte).
0
Rejoignez-nous