none
Compatibilité Webbrowser office 2010 - 2019 RRS feed

  • 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 ?

    mercredi 6 janvier 2021 14:23

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!

    lundi 18 janvier 2021 10:21

Toutes les réponses

  • Bonjour,

    Sur internet, ,ce code erreur est associé à Citrix. Est-ce ton cas ?

    Cordialement.

    Daniel

    jeudi 7 janvier 2021 08:10
  • Bonjour,

    Non ce n'est pas mon cas. Uniquement excel. C'est une zone qui déborde et corrompt la mémoire.

    J'ai évidemment réinstallé Windows, effacé Office avec l'outil Microsoft puis réinstallé Office, rien n'y fait!

    Cordialement, JL

    jeudi 7 janvier 2021 09:13
  • Peux-tu poster le classeur, sans données confidentielles. Ca permettrait de restreindre le problème à ton environnement, le cas échéant.

    Daniel

    jeudi 7 janvier 2021 10:47
  • Est-ce qu'Internet Explorer est installé ?

    Daniel

    jeudi 7 janvier 2021 10:52
  • 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 !   

    jeudi 7 janvier 2021 15:25
  • Ta version d'Office est une version 32 bits ou 64 bits ?

    Daniel

    jeudi 7 janvier 2021 15:32
  • C'est Office 2019 '16.0...) 64 bits

    JL

    jeudi 7 janvier 2021 16:11
  • Je suis sec. Désolé.

    Daniel

    jeudi 7 janvier 2021 16:44
  • J'ai une version minimale, je ne sais pas comment il faut la déposer sur le site.

    Dans mon cas initial le debugger et le programme plantent. Ici le debugger plante mais le programme s'exécute normalement...

    vendredi 8 janvier 2021 14:39
  • 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

    vendredi 8 janvier 2021 15:18
  • 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).

    vendredi 8 janvier 2021 16:53
  • J'ai essayé :

    https://mon-partage.fr/f/voEENCS8

    Ca ne fonctionne pas ?

    Daniel

    vendredi 8 janvier 2021 17:06
  • Je ne peux pas envoyer de lien car mon compte n'est pas "validé", je ne sais pas ce que cela signifie...
    vendredi 8 janvier 2021 17:18
  • Sans mettre de lien, il n'accepte pas  non pplus le simple coller du lien (comme je j'ai fait) ? Sinon, colle-le en ne mettant pas "https://". Ca devrait le faire.

    Sinon, j'ai ajouté mon adresse mail dans mon profil :

    Daniel

    vendredi 8 janvier 2021 17:39
  • Je n'avais pas compris que le lien ne fonctionnait pas, il faut un slash à la fin!

    mon-partage.fr/f/voEENCS8/

    lundi 11 janvier 2021 09:01
  • Je n'ai pas réussi à reproduire le crash. Ca fonctionne sans problème, du moins en utilisant les deux boutons. Faut-il faire autre chose ?

    Daniel

    lundi 11 janvier 2021 09:22
  • 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.

    lundi 11 janvier 2021 11:03
  • Je viens de réessayer avec l'ascenseur, pas de problème. Que veux-tu que je regarde dans la fenêtre des variables ?

    Pour ta configuration, c'est difficile de t'aider, malheureusement. Je teste avec Excel 2016 332 bits.

    Daniel

    lundi 11 janvier 2021 11:57
  • Juste le contenu de la variable webbrowser1 : pour moi il suffit de cliquer sur le + pour que excel se ferme tout seul sans message.

    Oui, la configuration a un rôle.

    lundi 11 janvier 2021 12:57
  • "Juste le contenu de la variable webbrowser1 : pour moi il suffit de cliquer sur le + pour que excel se ferme tout "

    Pas ici.

    Daniel

    lundi 11 janvier 2021 13:37
  • 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!

    lundi 18 janvier 2021 10:21