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 :

Récupérer une fenêtre IE déjà ouverte [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur Logistique
    Inscrit en
    Octobre 2013
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Logistique
    Secteur : Transports

    Informations forums :
    Inscription : Octobre 2013
    Messages : 104
    Par défaut Récupérer une fenêtre IE déjà ouverte
    Bonjour à tous,

    voilà, je cherche à faire une macro qui me permet de récupérer des informations d'une page web (en fait un logiciel interne de l'entreprise tournant sous IE 8).
    Simplement j'ai besoin de lire des informations sur cette page sans l'avoir chargée depuis excel.
    Je m'explique :
    l'opérateur devra ouvrir la page web qu'il souhaite et en lançant la macro celle-ci va chercher les informations sur la page.

    J'ai trouvé le topic de Qwazerty, mais il m'a semblé en le lisant (je n'ai pas tout lu dans le détail) qu'il fallait ouvrir et charger les pages depuis le code VBA pour y accéder.

    Comment donc accéder à la page sans l'avoir au préalable chargé depuis le code VBA ? (la recherche des informations dans la page n'étant pas un problème grace au topic de Qwazerty)

    Merci d'avance de votre aide,


    Philippe

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    ce code va te permetre de récupérer le IE ouvert sur la page du site choisie par l'utilisateur.

    le reste comme dans le tuto ou il est quetion de récupérer les infos
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub test()
    dim IE as object
    set IE =getobject(,"internetexplorer.application")
    end sub

  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 heu
    Bonjour

    Comment donc accéder à la page sans l'avoir au préalable chargé depuis le code VBA ? (la recherche des informations dans la page n'étant pas un problème grace au topic de Qwazerty)
    je crains fort que sans charger au moins le code source de ta page il ne soit pas possible d'en extraire des donné

    c'est un sujet que je traite souvent
    comme durupt te la montré il faut instancier une une instance de IE(internet explorer )

    c'est une première solution la plus courante et la plus lourde et selon le niveau de sécurité du site (de la page en question )cela peut être la seule solution


    il peut si le site l'autorise y avoir la possibilité de faire une requête avec l'object(Microsoft XMLHTPP) qui récupère le code source de la page en question

    exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    sub recupcode
    dim reQ as object,url as string 
    url="http//www.truc machin.com/"'met ton lien ici en toute lettre 
    set reQ= createobject("Microsoft.xmlhttp")
    with reQ
    .open "POST",url,false
    .send 
    message=.responsetext
    end with 
    msgbox message' dans le message tu devrai voir apparaitre les premières lignes du code source de ta page (cela veut dire que tu peut faire une requête avec cet object )
    end sub
    il est possible qu'il faille ajouter un header a ta requête mai on en est pas encore la je te laisse faire tes recherches sur le site



    si tu cherche sur le site dans ce forum et même les contributions vba tu trouvera des exemples de travaux déjà effectué et abouti ,tu pourrais t'en inspirer
    en cherchant avec l'indice (internet ,requête)


    tu pourrais aussi rechercher avec comme indice le pseudo des participants

    MarcL,qwazerty,itwoo,durupt etc... et moi même

    si la page en question n'est pas confidentiel tu pourrais en donner le lien je verrais ce que je peut faire

    au plaisir
    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 confirmé
    Homme Profil pro
    Ingénieur Logistique
    Inscrit en
    Octobre 2013
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Logistique
    Secteur : Transports

    Informations forums :
    Inscription : Octobre 2013
    Messages : 104
    Par défaut
    Merci à vous deux déjà pour vos réponses : la page en question est sur le serveur de l'entreprise donc ce ne sera pas possible d'y accéder. Mais merci aussi de la proposition.
    J'essaye de voir déjà ce que vous m'avez donné et tente d'en faire quelque chose.

    Je poserais une solution ici si je la trouve.


    Philippe

  5. #5
    Membre confirmé
    Homme Profil pro
    Ingénieur Logistique
    Inscrit en
    Octobre 2013
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Logistique
    Secteur : Transports

    Informations forums :
    Inscription : Octobre 2013
    Messages : 104
    Par défaut
    Citation Envoyé par rdurupt Voir le message
    Bonjour,
    ce code va te permetre de récupérer le IE ouvert sur la page du site choisie par l'utilisateur.

    le reste comme dans le tuto ou il est quetion de récupérer les infos
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub test()
    dim IE as object
    set IE =getobject(,"internetexplorer.application")
    end sub
    Alors en essayant cette proposition je me retrouve avec une erreur 429 : un composant activeX ne peut pas créer d'objet

    Avez-vous une idée de là où ça peut venir et s'il est possible de résoudre ce problème ? (Les références HTML Object... et Microsoft internet Options sont activées déjà.) J'ai essayé de faire la même chose avec google au lieu de mon site, mais ça m'a fait la même chose.

    [edit]
    Bon après quelques recherches sur internet, il semblrait purement et simplement que cette possibilité n'existe pas (en tous cas, pas avec cette fonction) cf. : http://support.microsoft.com/kb/239470

    est-ce que vous verriez une autre manière d'accéder à la page ? Sachant que l'on pourrait très bien dire dans mon cas que la macro ouvre Internet et l'utilisateur navigue dedans, seulement après ça on récupère les informations... J'ai fait un essai et l'instance IE ne change pas lorsque l'on navigue comme si elle était "dupliquée" : qu'il y avait celle de la macro et celle de l'utilisateur je ne sais pas si je suis très clair...
    [/edit]

  6. #6
    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
    Bonjour

    ca n'existe pas !!!!
    on a pas cherché au meme endroit alors
    ouvre plein de fenêtre internet explorer et lance ce code dans un module standard
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub liste_les_fenetres_internet_ouvertes()
        Dim shellWins As SHDocVw.ShellWindows, explorer As SHDocVw.InternetExplorer, texte As String
     
        Set shellWins = New SHDocVw.ShellWindows
     
        For Each explorer In shellWins
            texte = texte & explorer.LocationName & vbCrLf
        Next
     
        Set shellWins = Nothing
        Set explorer = Nothing
    MsgBox texte
    End Sub
    ouais!!pas au même endroit


    [EDIT]
    J'OUBLIAIS !!! IL FAUT ACTIVER LA REFERENCE "MICROSOFT INTERNET CONTROL"
    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

  7. #7
    Invité
    Invité(e)
    Par défaut
    bonjour,
    oui patrick je m'en suis redus compte après, erreur d’habitude!

  8. #8
    Membre confirmé
    Homme Profil pro
    Ingénieur Logistique
    Inscrit en
    Octobre 2013
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Logistique
    Secteur : Transports

    Informations forums :
    Inscription : Octobre 2013
    Messages : 104
    Par défaut
    Quand je disais "ça n'existe pas" je parlais de l'utilisation de getobject avec internetexplorer.application
    Bien que j'ai vu des milliers de personnes (sur le net) tenter de le faire. Mais là, c'est par rapport à ce que j'ai lu dans l'article windows (cf lien du message précédent)

    Toutefois en cherchant bien (si quand même) j'ai trouvé une autre solution :
    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
    Sub TEST3OK()
     
    Dim IEObject As Object
    Dim ShellApp
    Dim ShellWindows
    Dim i
     
    Set ShellApp = CreateObject("Shell.Application")
    Set ShellWindows = ShellApp.Windows()
     
    For i = 0 To ShellWindows.Count - 1
        If InStr(ShellWindows.Item(i).FullName, "iexplore.exe") <> 0 Then
            Set IEObject = ShellWindows.Item(i)
        End If
    Next
     
    set IEObject = nothing
     
    End Sub
    (Je me demande en revanche dans quelle mesure cela fonctionne avec plusieurs fenêtres et/ou onglets, mais je ne traiterais pas personnellement ce problème)
    Donc j'ai réussi à faire ce que je souhaitais. Ouf ! Et merci de votre aide qui m'a guidé.
    J'ai désormais un autre problème : trouver une information dans la page, mais je vais poster un autre sujet pour ne pas tout mélanger. (non que ce soit compliqué en soit, mais que le ******** qui a codé la page n'a mis aucun identificateur..... Grrr)

    Merci beaucoup,


    Philippe

    [edit] la référence était bien activée pour ma part.
    [edit 2] J'ai modifié le titre du sujet pour qu'il colle plus au sujet traité. Dès fois que ça serve à d'autres.

  9. #9
    Membre confirmé
    Homme Profil pro
    Ingénieur Logistique
    Inscrit en
    Octobre 2013
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Logistique
    Secteur : Transports

    Informations forums :
    Inscription : Octobre 2013
    Messages : 104
    Par défaut
    Citation Envoyé par patricktoulon Voir le message
    Bonjour

    ca n'existe pas !!!!
    on a pas cherché au meme endroit alors
    ouvre plein de fenêtre internet explorer et lance ce code dans un module standard
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub liste_les_fenetres_internet_ouvertes()
        Dim shellWins As SHDocVw.ShellWindows, explorer As SHDocVw.InternetExplorer, texte As String
     
        Set shellWins = New SHDocVw.ShellWindows
     
        For Each explorer In shellWins
            texte = texte & explorer.LocationName & vbCrLf
        Next
     
        Set shellWins = Nothing
        Set explorer = Nothing
    MsgBox texte
    End Sub
    ouais!!pas au même endroit


    [EDIT]
    J'OUBLIAIS !!! IL FAUT ACTIVER LA REFERENCE "MICROSOFT INTERNET CONTROL"
    Après avoir utilisé ton code plusieurs fois, je me suis rendu compte qu'il me donnait le nom de certaines fenêtres qui n'étaient pas d'internet... Chez moi tes quelques lignes recensent aussi les fenêtre de l'explorateur Windows qui sont ouvertes...

  10. #10
    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
    ces raisins sont trop vert pour un gouja

    puisque tu y tiens voila une version qui non seulement vise les fenêtre internet uniquement
    mais en plus pour te prouver que l'on peut en extraire les données je récupère le texte innerhtml de la 1 ere balise "div"

    il te reste a ajouter une 2 eme condition apres la "if typename" sur le lien du document pour être sur de récupérer sur la bonne fenêtre internet explorer

    maintenant tu es paré pour l'aventure je ne vais pas tout faire a ta place
    allez essaie ca!!!
    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
    Sub recup_text_du_div_1_de_la_page()
    'Get all currently open IE and Explorer windows (those are based on the same class).
    'For IE windows, get location. For WE windows, get path.
    Dim objShell As Shell, objIE As InternetExplorer, objExplorer As ShellFolderView
    Dim obj As Object
    Set objShell = New Shell
    For Each obj In objShell.Windows
    If TypeName(obj.document) = "HTMLDocument" Then
    Set objIE = obj
    Debug.Print objIE.LocationURL ' le lien  ou l'adresse de la page
    MsgBox objIE.document.getElementsByTagName("div")(1).innerHTML ' le texte inerhtml de la 1 ere div de la page
     
    End If
    Next obj
    End Sub
    et la marmotte elle .............. alu

    et pour appuyer la demo avec le test de la bonne page que je veux visiter

    voici le test sur le forum lui même
    il y a la 2 eme condition sur le ".locationURL" afin de bien cibler la bonne page

    a condition que tu soit dessus bien évidemment
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub recup_text_du_div_1_de_la_page()
        Dim objShell As Shell, objIE As InternetExplorer, objExplorer As ShellFolderView
        Dim obj As Object
        Set objShell = New Shell
        For Each obj In objShell.Windows
            If TypeName(obj.document) = "HTMLDocument" Then
                Set objIE = obj
                If objIE.LocationURL = "http://www.developpez.net/forums/f664/logiciels/microsoft-office/excel/macros-vba-excel/" Then    ' le lien  ou l'adresse de la page
     'les question se trouvent a l'interieur d'un des enfant de la balise "OL" avec la class "threads"              
     MsgBox objIE.document.getElementsByClassName("threads")(0).Children(0).innerText
                End If
            End If
        Next obj
    End Sub
    si cela n'est pas précis alors je mange mon ordi

    durupt:

    je n'ai pas essayé mais en vbs ca devrait fonctionner , je n'en suis pas sur alors je vais faire une recherche

    voila une petite fonction a faire afin de substituer le "getobject" pour "IE" amèrement absent de vba

    on pourrais même lui affubler des paramètres comme l'url ,location Name ,title etc......

    allez hop contribution : je te laisse la faire moi je vais faire la recherche
    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

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

Discussions similaires

  1. [C#] Connaître le temps qu'une fenêtre est restée ouverte
    Par AmineDev9 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 17/01/2009, 10h25
  2. Récupérer une fenêtre
    Par vg-matrix dans le forum Débuter
    Réponses: 2
    Dernier message: 21/01/2008, 08h43
  3. [VBScript] Récupérer une fenêtre IE
    Par jenesuispasunrobot dans le forum VBScript
    Réponses: 1
    Dernier message: 28/12/2006, 11h21
  4. récupérer la fenêtre en ayant ouvert une autre ?
    Par GregHory dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 10/05/2006, 17h56
  5. Détecter si une fenêtre est déjà ouverte et aller dedans
    Par thierry198 dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 24/11/2005, 17h53

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