IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

webbrowser ajouté dynamiquement inutilisable


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut webbrowser ajouté dynamiquement inutilisable
    Bonjour a tous

    je suis en train de faire une petite expérience ou j'ai besoins d'ajouter un webbrowser dynamiquement dans le sheets
    je l'ajoute mais il est inutilisable apparemment ou j'ai pas pigé un truc
    si quelqu'un a une idée je prends
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Sub AddWebBroswerToWorksheet()
        Dim myWebBrowser
        Dim wb
        Set myWebBrowser = Sheets(1).OLEObjects.Add(ClassType:="Shell.Explorer.2", Left:=147, Top:=60.75, Width:=400, Height:=400)
        myWebBrowser.Name = "web"
        Set wb = myWebBrowser.Object
        With wb
            .Silent = True
            .Navigate "about:blank" si je met l'adresse de google ca navigue pas non plus 
     
            .Document.write "<html><div id=""calque"" style=""width:80%;height:80%;border:1px solid red""></div></html>"
     
            Do: DoEvents: Loop Until .ReadyState = 4    'probleme boucle indéfiniment
     
            Debug.Print .Document.getelementbyid("calque").innerhtml
     
            '.Document.body.Scroll = "no"
            'Debug.Print .Document.body.innerHTML
        End With
     
    End Sub
    normalement je dois avoir mon carré(balise div) avec bordure rouge dans le webbrowser
    une idée pitié je me prends la tète avec ca depuis 1 bonne heure
    merci pour les retours
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  2. #2
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    Salut Patrick,

    Pas d'idée, désolé, mais une piste...
    Ton cadre rouge apparaît si tu actives puis désactives le mode création (onglet développeur).

  3. #3
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    bonjour pikaju
    bizarre comme comportement
    je viens de tester et chez moi le webbrowser qui était blanc devient noir et rétréci a chaque fois que j'active/désactive le mode création

    vraiment bizarre
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  4. #4
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    Idem chez moi...

  5. #5
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    bon pour ma petite exeperience il y aura bien quelqu'un qui saura un jour je ne clos donc pas encore le sujet

    petite explication sur mon projet :

    1. je souhaite ajouter un webbrowser
    2. dans le document de celuici ajouter un div contenteditable
    3. copier une plage a la volé(rng.copy)
    4. exécuter la commande javascript "paste" dans le diven ayant donner le focus a celui ci
    5. récupérer ainsi le code html avec le meme mime que si j'avais sauver la plage en html en vue de l'inserer dans le corps du mail en CDO ou Outlook
    6. et enfin supprimer le webbrowser


    pour le moment je le fait avec une instance IE c'est assez rapide
    cette méthode permet de faire la même chose que si je sauve la plage en html dans excel mais sans fichier html externe et surtout rien que la table
    c'est propre et net

    pour voir le résultat dans IE remplacer 3000 par 1 et bloquer le ".Quit"

    voila
    sub de test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub test()
    Dim tablehtml As String 'variable
    tablehtml = range_to_html_sans_codagehtml(Sheets(1).Range("A4:C" & Cells(Rows.Count, 1).End(xlUp).Row)) 'plage a adapter
    Debug.Print tablehtml
    End Sub
    petite fonction qui va bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    Function range_to_html_sans_codagehtml(rng) As String
        Dim ie As Object, codebase As String
        codebase = "<html><div id=""calque"" contenteditable=true style=""width:80%;height:80%;""></div></html>" 'code de base avec mon div conteneditable
        rng.Copy
        Set ie = CreateObject("internetexplorer.application")
        With ie
            .Visible = True: .Left = 3000: .Navigate "about:blank" ' la position de la fenetre ie est en dehors du chanps de l'ecran (pas la peine dela voir ca n'est pas necessaire
            .Document.write codebase: .Document.getelementbyid("calque").Focus ' je met le div et lui donne le focus
            .Document.execcommand "paste", False, Null 'j'execute la commande javascript "Paste"
            Set mestd = .Document.getelementsbytagname("TD") 'je collectionne tout les balises "TD"
            For i = 0 To mestd.Length - 1
                'je met toutes les bordures xlnone de la plage en couleur resemblante a celle du xlnone( bleu/grisclair)
                If mestd(i).Style.Bordertop Like "*0px*" Then mestd(i).Style.Bordertop = "0.1pt solid #A9BCF5"
                If mestd(i).Style.Borderbottom Like "*0px*" Then mestd(i).Style.Borderbottom = "0.1pt solid #A9BCF5"
                If mestd(i).Style.Borderleft Like "*0px*" Then mestd(i).Style.Borderleft = "0.1pt solid #A9BCF5"
                If mestd(i).Style.Borderright Like "*0px*" Then mestd(i).Style.Borderright = "0.1pt solid #A9BCF5"
            Next
            range_to_html_sans_codagehtml = .Document.getelementbyid("calque").innerhtml 'la fonction devient le string du code html de la plage correspondante
            .Quit' on quite IE on en a plus besoins
        End With
       Application.CutCopyMode = False 'on debloque la plage en pointillés (due a copy)
    End Function
    dans le debug on a le résultat

    cette fonction dans un webbrowser devrait remplacer mes contrib grille to hml
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  6. #6
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour patricktoulon
    J'ignore totalement comment a été construit ce contrôle (je n'utilise jamais Excel à d'autres fins que celles d'un tableur).
    Il peut y avoir plusieurs explications au fait que ce problème surgisse en création dynamique et non en mode création manuelle.
    Il se peut par exemple qu'en création manuelle (si décision du créateur de ce contrôle), l'image de ce contrôle soit directement insérée en tant que partie de l'image d'un userform. Elle est alors persistante.
    En mode création dynamique, les choses revêtent un aspect totalement différent et ce qui est dessiné sur le userform en mode exécution n'a pas de qualité persistante (pas plus que tout ce que tu pourrais y dessiner d'autre). Un Userform ne dispose en effet pas de la propriété AutoRedraw (comme par exemple un Form de VB6).
    Tu peux essayer de vérifier si ce que je dis est exact de la manière suivante :
    - ajoute dynamiquement ce contrôle, sans autre instruction
    - déplace maintenant la fenêtre du userform jusqu'à ce que ce contrôle soit hors écran
    - reviens en arrière. Si le dessin de ce contrôle n'est plus visible, tu as ta réponse dans ce que j'ai exposé plus haut.

    EDIT : je vois que tu insères ce contrôle sur une feuille et non sur un userform. Les choses sont alors différentes, mais peuvent être similaires. (ne n'ai jamais fait l'expérience d'un dessin fait en mode exécution sur une feuille de calcul et ne sais donc s'il aurait une persistance).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VBA] Ajouter dynamiquement une référence
    Par jpharand dans le forum VBA Access
    Réponses: 23
    Dernier message: 16/04/2010, 23h28
  2. Ajout dynamique de colonne identity
    Par graphicsxp dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 16/11/2005, 16h40
  3. ajouter dynamiquement des items dans un popup menu
    Par Malone dans le forum Composants VCL
    Réponses: 7
    Dernier message: 23/08/2005, 16h08
  4. Réponses: 2
    Dernier message: 10/05/2005, 15h54
  5. Ajout dynamique d'un contrôle à une fenêtre
    Par Yacine95000 dans le forum MFC
    Réponses: 6
    Dernier message: 08/06/2004, 16h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo