Meilleur auteur de réponses
Compatibilité Webbrowser office 2010 - 2019

Question
-
Le transfert de mon programme excel-VBA de Office 2010 vers office 2019 bloque sur une erreur dans un contrôle Webbrowser. Excel se ferme sans aucun message quand on clique sur le webbrowser à l'exécution (y compris sur l'ascenseur), l'erreur dans les événements est un Stack buffer overflow (0xc0000409 dans ntdll). Pour aller plus loin, dans le même programme j'ai ajouté d'autres webbrowser, certains semblent marcher et d'autres pas.
Quand on exécute juste le "Initialize" de la fenêtre contenant le contrôle sous le debbuger, le simple fait de cliquer pour examiner les valeurs du wewbrowser a pour conséquence que excel aborte sans aucun message. Il arrive que le programme marche alors que le debugger provoque un abort. Les valeurs des variables d'un webbrowser changent parfois sans raison comme si la zone était modifiée par un débordement d'une autre zone. Dans le programme contenant un webbrowser que j'ai écrit pour vérifier, les valeurs des variables dans le webbrowser sont bien accessibles donc la structure est connue du debugger.
Dans les pistes possibles, un problème de bibliothèque (ce sont les mêmes aux versions près)? mélange 32/64bits ? un problème de framework 3.5 vs 4.8 ? Un problème ie ?
Avez-vous une idée ?
Réponses
-
J'ai finalement trouvé un moyen pour contourner le problème : enlever toutes les références au webbrowser y compris la bibliothèque, puis relancer, créer un userform et ajouter le webbrowser (la bibliothèque est automatiquement ajoutée). Ensuite faire des copier/coller du reste des éléments du userform qui ne fonctionnait pas, supprimer l'ancien userform et voilà!
Plus de magie que de raison, mais en attendant de trouver l'explication... Une piste, la gestion des bibliothèques qui est opaque : si j'enlève la bibliothèque du webbrowser (internet controls) tout marche comme si elle était incluse.
Merci encore Daniel pour votre aide!
- Marqué comme réponse Nina ZaekovaMicrosoft contingent staff, Moderator lundi 1 février 2021 09:30
Toutes les réponses
-
-
-
-
-
Bonjour,
IE 11 est installé (fonctionnalités complémentaires windows), comme dans la configuration précédente.
Mon programme fait plus de 10000 lignes (?) et il utilise l'API sécurisée (oauth2 donc callback) de Flickr, impossible de l'exécuter sans cela tant tout est imbriqué. J'ai essayé de reproduire le problème dans un petit programme indépendant, sans succès pour l'instant mais je continue mes essais.
Windows 10 a été complètement réinstallé donc les bibliothèques ont changé... Voici des infos qui pourraient vous inspirer. Bibliothèques et emplacements avant :
1) Excel C:\Program Files\Microsoft Office\root\Office14\EXCEL.EXE
2) Microsoft Forms 2.0 Object Library (MSFORMS) C:\WINDOWS\sysWOW64\FM20.DLL (14.0...)
3) Microsoft HTML Object Library (MSHTML) C:\Windows\sysWOW64\mshtml.tlb
4) Microsoft XML, v4.0 (MSXML2) C:\Windows\sysWOW64\msxml4.dll
5) Microsoft Office 14.0 Object Library C:\Program Files\Common Files\Microsoft Shared\OFFICE14\MSO.DLL
6) Microsoft Internet Controls (SHDocVw) C:\Windows\sysWOW64\ieframe.dll
7) OLE Automation (stdole) C:\Windows\sysWOW64\stdole2.tlb
8) Visual Basic For Applications (VBA) C:\Program Files\Common Files\Microsoft Shared\VBA\VBA7.1\VBE7.DLL
9) M. VBScript Reg. Expr. 5.5 (VBScript_RegExp_55) C:\Windows\sysWOW64\vbscript.dll\3
10) Microsoft WinHTTP Services, version 5.1 (WinHttp) C:\WINDOWS\system32\winhttpcom.dll
Bibliothèques et emplacements après :
1) Excel C:\Program Files\Microsoft Office\root\Office16\EXCEL.EXE
2) Microsoft Forms 2.0 Object Library (MSFORMS) C:\WINDOWS\system32\FM20.DLL (16.0...)
3) Microsoft HTML Object Library (MSHTML) C:\Windows\System32\mshtml.tlb
4) Microsoft XML, v6.0 (MSXML2) C:\Windows\System32\msxml6.dll
5) Microsoft Office 16.0 Object Library C:\Program Files\Common Files\Microsoft Shared\OFFICE16\MSO.DLL
6) Microsoft Internet Controls (SHDocVw) C:\Windows\System32\ieframe.dll
7) OLE Automation (stdole) C:\Windows\System32\stdole2.tlb
8) Visual Basic For Applications (VBA) C:\Program Files\Common Files\Microsoft Shared\VBA\VBA7.1\VBE7.DLL
9) M. VBScript Reg. Expr. 5.5 (VBScript_RegExp_55) C:\Windows\System32\vbscript.dll\3
10) Microsoft WinHTTP Services, version 5.1 (WinHttp) C:\WINDOWS\system32\winhttpcom.dll
Le Webbrowser est défini dans Ieframe.dll (6) version 11.0.19041.662 qui figure dans syswow64 et dans system32. C'est la même version que dans la précédente configuration.
Sinon pour les autres bibliothèques :
MSXML2 (4), ShDocvW (=ieframe 6), VBScript (9, identique) et Winhttp (10, identique) dans syswow64 et dans system32
MSHTML (3), stdole (7) semble (pas de n° de version) identique au même endroit.
MsForms (2), Excel (1), MSXML2 (4), et Office (5) sont de nouvelles versions.Ce qui est bizarre : il s'agit de la même version windows 10 (dont l'une est issue d'upgrade successifs), et les bibliothèques de la nouvelle version sont dans system32 tandis que les anciennes sont dans SysWOW64. Ensuite MSFORMS (2), se trouve en réalité dans C:\Program Files\Microsoft Office\root\vfs\System et ne figure pas dans system32, ce qui signifie que l'on ne sait pas quelle bibliothèque est réellement utilisée, ce qui empêche toute vérification... J'ai enlevé cette bibliothèque mais cela ne change rien.
Excusez-moi d'être long. Merci pour vos idées !
-
-
-
-
-
Pour déposer ton classeur :
Clique sur https://mon-partage.fr/
Clique sur "Choisir un fichier", puis sur "Uploader". Quand la fenêtre suivante s'affiche, fais un clic droit sur le "lien de téléchargement" et clique sur "Copier l'adresse du lien" (le libellé de ce message peut varier suivant ton navigateur). Colle ensuite le lien dans ta réponse.
Daniel
-
Je ne peux pas mettre de lien, compte non validé... Fichier à prendre sur le site indiqué en ajoutant slash f slash voEENCS8.
J'ai un module qui ouvre un dialogue contenant un browser. Placer un arrêt sur la première ligne de Initialize puis lancer le test. Au point d'arrêt, afficher la valeur de la variable WebBrowser1 dans la fenêtre des variables et là pour moi le debugger se plante et excel se ferme.
J'ai trouvé un moyen (!) de faire marcher cet exemple : supprimer le browser et mettre la bibliothèque internet devant forms. Sauver et sortir. Relancer, créer le WebBrowser et là pour moi miracle cela marche. Malheureusement ce procédé ne marche pas pour mon programme d'origine. Je note que même sans la bibliothèque internet qui normalement définit le webbrowser, cela marche parfois (i.e. la structure du l'object WebBrowser est connue).
-
-
-
-
-
-
Cela peut avoir l'air de marcher alors que le debugger fait planter. Dans mon vrai programme cela a l'air de marcher mais si on clique sur le webbrowser n'importe où, même sur l'ascenseur, cela plante. Le mieux pour mettre l'erreur en évidence est de regarder le contenu de la variable webbrowser dans la fenêtre des variables.
Sinon, je ne serais pas surpris que cela marche chez vous. Le même programme marche ou non en fonction de facteurs inconnus. Partant d'un programme qui marchait, j'ai réussi à force de changements dans les bib et l'ordre de création à obtenir un programme qui ne marchait pas. Je note toutes mes modifications et pourtant je n'ai rien trouvé de reproductible! Peut-être que cela dépend de l'implantation des variables en mémoire! Je suis bien conscient que c'est une situation hors contrôle... En tous cas cela paraît lié à l'ordre des bibliothèques.
Microsoft dit qu'il y a une version excel et une version system du webbrowser, mais je ne sais pas dans quelles bibliothèques elles se trouvent. Je n'ai pas trouvé de graphe de dépendance entre les bibliothèques, donc il y a un doute ici aussi.
-
-
-
-
J'ai finalement trouvé un moyen pour contourner le problème : enlever toutes les références au webbrowser y compris la bibliothèque, puis relancer, créer un userform et ajouter le webbrowser (la bibliothèque est automatiquement ajoutée). Ensuite faire des copier/coller du reste des éléments du userform qui ne fonctionnait pas, supprimer l'ancien userform et voilà!
Plus de magie que de raison, mais en attendant de trouver l'explication... Une piste, la gestion des bibliothèques qui est opaque : si j'enlève la bibliothèque du webbrowser (internet controls) tout marche comme si elle était incluse.
Merci encore Daniel pour votre aide!
- Marqué comme réponse Nina ZaekovaMicrosoft contingent staff, Moderator lundi 1 février 2021 09:30