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 :

Fonction GetOject pour Internet Explorer


Sujet :

Macros et VBA Excel

  1. #1
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    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 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut Fonction GetOject pour Internet Explorer
    Bonjour a tous

    une question sur un sujet ayant été posé récemment m'a interpelé alors , j'ai pensé qu'il fallait en faire une fonction
    en effet la fonction getobject permettant de comuniquer entre application a des avantages indéniables

    un seul bemole elle n'existe pas pour Internet explorer

    je sujet ayant été résolu je vous livre cette petite fonction pour palier a ce manque

    fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Function Getobjects(url) As Object
        Dim objShell As Shell,obj As Object
        Set objShell = New Shell
        For Each obj In objShell.Windows
            If TypeName(obj.document) = "HTMLDocument" Then
                If obj.LocationURL = url Then Set Getobjects = obj
            End If
        Next obj
    End Function
    comme vous le voyez ca n'est pas très compliqué

    Testons cette petite fonction

    nous allons la tester sur le forum vba exel (a condition bien évidement que cette fenêtre soit ouverte bien entendu, le principe du getobject étant justement d'aller chercher une app déjà ouverte )

    Nous allons afficher dans un msgbox le titre de la dernière question qui a été posé sur le forum
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub test_du_getobject()
        Dim ie As Object, url As String
        url = "http://www.developpez.net/forums/f664/logiciels/microsoft-office/excel/macros-vba-excel/"
        Set ie = Getobjects(url)
        MsgBox ie.document.getElementsByClassName("threads")(0).Children(0).innerText
    End Sub
    et voila si vous regardez la ligne du msgbox vous verrez que j'utilise les fonctions de la librairie IE de la même manière que si j'avais créé l'élément IE ,pour ce genre d'opération le tutoriel de qwazerty vous indiquera comment récupérer des données et interagir avec IE

    bonne utilisation
    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 averti
    Inscrit en
    Avril 2008
    Messages
    224
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2008
    Messages : 224
    Points : 443
    Points
    443
    Par défaut
    Bonjour patricktoulon, le forum,

    Il est vrai que les GetObject et CreateObject sont bien pratiques pour travailler en Late Binding, mais pas disponibles pour tous les objets.

    J'avais déjà été confronté à ce soucis avec le DataObject pour interagir avec le presse-papier et avais trouvé cette méthode qui consiste à utiliser le CLSID associé à l'objet.

    Le CLSID d'IE semble être le suivant : {0002DF01-0000-0000-C000-000000000046}.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub test()
    Dim dObj As Object, IE As Object
     
        'Equivalent à "MSForms.DataObject"
        Set dObj = CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
     
        'Equivalent à "InternetExplorer.Application"
        Set IE = CreateObject("new:{0002DF01-0000-0000-C000-000000000046}")
    End Sub
    Je n'ai pas pu tester à fond vu que je n'utilise jamais IE en VBA, mais ça semble fonctionner.

    A+

  3. #3
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    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 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut hors sujet mais interessant
    Bonjour romain
    Ton intervention est intéressante j'avais déjà utilise les clisd

    Mais ma contribution avait pour but de palier au manque de cette fonction

    Ça n a rien a voir avec le late binding

    Cette fonction sert a aller chercher le document DEJA Ouvert!!!!! Dans une instance
    De IE non declanche par VBA
    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 averti
    Inscrit en
    Avril 2008
    Messages
    224
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2008
    Messages : 224
    Points : 443
    Points
    443
    Par défaut
    Bonsoir patricktoulon,

    Je n'avais pas saisi la nuance, désolé.

    En plus, je viens de faire l'essai et un simple CreateObject("InternetExplorer.Application") marche pour IE...

    A+

  5. #5
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    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 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut intervention qui n'est pas inutile
    Citation Envoyé par mromain Voir le message
    En plus, je viens de faire l'essai et un simple CreateObject("InternetExplorer.Application") marche pour IE...

    A+
    Oui ça c'est du late binding
    Mais l'utilisation des clisd peuvent éventuellement palier au problème de version de IE
    En effet si tu suis les duscution de marc ;itwoo et moi même tu observera qui est souvent difficile de faire
    Un code générique c'est ce que je suis en train de concevoir en ce moment
    Fase de test et les clisd pourraient utiliser la version IE installee c'est exactement ce que je suis en train d'étudier merci pour la piqure de rappel ça fait pas de mal
    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 éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut


    Bonjour,

    quand on tâtonne en développement ou pour un applicatif local (pas livré sur un ordinateur lointain),
    la déclaration anticipée (early binding) a ses avantages.

    Mais lors du déploiement d'un applicatif sur plusieurs ordinateurs et qui plus est avec différentes versions d'Excel,
    la déclaration tardive (late binding) s'impose effectivement !
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  7. #7
    Membre confirmé
    Homme Profil pro
    conseiller
    Inscrit en
    Janvier 2013
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : conseiller
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 367
    Points : 649
    Points
    649
    Par défaut
    Bonjour à tous,
    je viens de tester ta fonction et chez moi elle plante à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If TypeName(obj.Document) = "HTMLDocument" Then
    Que cherches-tu à obtenir exactement ?
    Détecter si Internet Explorer est déjà ouvert ?
    Détecter si la page contenant l'URL est déjà affichée ?
    Pour info je l'ai testée dans un module standard et je suis sous Windows7 et Excel 2010 64 bits.
    A+
    Images attachées Images attachées   

  8. #8
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut




    Bonjour davido84,

    c'est pourtant clairement expliqué dans le message initial ‼

    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  9. #9
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    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 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    Re bonjour a tousEn effet en 64 bits il y a des soucisActivation de la référence shell automationQui est activée d office en 32 bit mais pas en 64Voilà voilàNon des fois je te jure
    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

  10. #10
    Membre confirmé
    Homme Profil pro
    conseiller
    Inscrit en
    Janvier 2013
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : conseiller
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 367
    Points : 649
    Points
    649
    Par défaut
    Re
    @Marc-L:
    c'est pourtant clairement expliqué dans le message initial ‼
    Je préfère poser clairement la question car je pense qu'il peut y avoir une ambiguïté.

    @patricktoulon: merci pour ton retour. J'ai testé sur un autre ordinateur Excel 2007 32 bits et Windows7 et cela fonctionne.
    Ci-joint quelques réflexions :
    d'après ce que j'en ai compris la fonction GetObject([pathname] [, class]) peut être utilisée soit via le pathname, soit via la classe.

    Via le chemin d'accès :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub GetObject_pathname()
    Dim myFile As Object
    On Error Resume Next
    Set myFile  = GetObject("C:\test.xls")
    If Err.Number > 0 Then
     ' cas où le chemin n'est pas trouvé
    End If
    End Sub
    Via la classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub GetObject_classeOutlook()
    Dim myOlApp As Object
    On Error Resume Next
    Set myOlApp = GetObject(, "outlook.application")
    If Err.Number > 0 Then
      Set myOlApp = CreateObject("outlook.application")
      On Error GoTo 0
    End If
    End Sub
    Dans le cas présent l'affectation de l'URL peut être rapproché du chemin d'accès à un fichier.

    Donc si je comprends bien cette fonction signale si la page est affichée comme tu l'as précisé
    a condition bien évidement que cette fenêtre soit ouverte bien entendu, le principe du getobject étant justement d'aller chercher une app déjà ouverte
    Mais contrairement au GetObject classique la fonction ne te dit pas si une instance d'Internet Explorer est ou non ouverte car si IE est ouvert mais sur une autre page cela ne te l'indique pas (normal puisque l'URL ne correspond pas).

    Si l'on veut une fonction GetObject "complète" peut-être faudrait-il la compléter en ce sens :
    1) Si IE ouvert
    - si une URL est passée en argument=>indiquer si cette page est affichée
    - si pas d'URL passé en argument =>indiquer si IE est ouvert
    2) si IE fermé (même si un autre navigateur est ouvert et même s'il affiche l'URL)=>indiquer que IE est fermé.

    Ce n'est qu'une idée suite à un retour de test rien de plus bien sûr.

    A+

  11. #11
    Membre confirmé
    Homme Profil pro
    conseiller
    Inscrit en
    Janvier 2013
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : conseiller
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 367
    Points : 649
    Points
    649
    Par défaut
    Bonjour,
    un essai non finalisé à partir de la piste fournie par patricktoulon :
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    'si le 2ème argument est placé à True l'url (argument 1) est controlé
    's'il est passé à False ou n'est pas spécifié seule l'ouverture d'IE est contrôlée
    Function Getobjects(Optional url As String, Optional UrlOk As Boolean = False) As Object
    Dim objShell As Shell, objWindows As Object, obj As Object
     
    Set objShell = New Shell
    Set objWindows = objShell.Windows
     
    If Len(url) = 0 Then UrlOk = False
     
    If objWindows.Count = 0 Then
      Set Getobjects = Nothing
      Err.Raise vbError + 1, , "IE n'est pas ouvert"
    Else
      For Each obj In objWindows
        If TypeName(obj.document) = "HTMLDocument" Then
          Set Getobjects = obj: Exit For
        End If
      Next obj
     
      If UrlOk = True Then
        For Each obj In objWindows
          If obj.locationurl = url Then
            Set Getobjects = obj: UrlOk = True: Exit For
          Else
           UrlOk = False
          End If
        Next obj
     
        If UrlOk = False Then
          Err.Raise vbError + 2, , "IE est ouvert mais URL non trouvée"
        End If
      End If
     
    End If
    End Function
     
    Sub test_du_getobject()
    Dim oIE As Object
    Dim url As String
    Dim oDoc As Object
     
      url = "http://www.developpez.net/forums/f664/logiciels/microsoft-office/excel/macros-vba-excel/"
     
      On Error Resume Next
      Set oIE = Getobjects(url, True)
      'Set oIE = Getobjects(, True)
      'Set oIE = Getobjects(url, False)
      'Set oIE = Getobjects
     
      If Err.Number <> 0 Then 'si oIE n'est pas ouvert cela génère l'erreur
        MsgBox "Erreur n° : " & Err.Number & " Description : " & Err.Description
     
        If Err.Number = 11 Then
          MsgBox "on va ouvrir IE"
        Else
          MsgBox "une session d'IE est ouverte mais on va ouvrir une autre session pour charger la page recherchée"
        End If
        Err.Clear
     
        Set oIE = CreateObject("InternetExplorer.application")
        oIE.navigate url
        oIE.Visible = True
     
        Do: DoEvents: Loop Until oIE.readystate = 4
     
        Set oDoc = oIE.document 'on accède au doucment HTML
        MsgBox "le titre de la page est : " & oDoc.Title
     
      Else 'si oIE est déjà ouvert
        MsgBox "IE est déjà ouvert"
        Set oDoc = oIE.document 'on accède au doucment HTML
        MsgBox "le titre de la page est : " & oDoc.Title
      End If
     
      oIE.Quit
     
      Set oIE = Nothing
      Set oDoc = Nothing
    End Sub
    A+

  12. #12
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    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 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    Bonjour DavidOulala!!!!Tu es parti loin toiVisiblement la simplicité c'est pas ton trucMètre le rendu de la fonction en variantEt dans la condition if lui donner la valeur grue ou false si il y a un document HLMSa veut dire que si il y en a un alors forcément IE est en routedonc true dans le cas contraire c'est falsePour la deuxième condition (présence de la bonne URL) c'est pareilD'autant plus que si tu regarde ton code on se rent compte que l'on sort de la boucle de toute façon Essai la simplicité
    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

  13. #13
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut




    Normalement - si j'ai bien compris l'idée - il ne faut pas plus de trois lignes de code !

    Exemple dans cette contribution, lignes n°64 à 66 …

    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  14. #14
    Membre confirmé
    Homme Profil pro
    conseiller
    Inscrit en
    Janvier 2013
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : conseiller
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 367
    Points : 649
    Points
    649
    Par défaut
    Bonsoir,

    J'ai sûrement mal compris la question à voir vos réactions et je me suis certainement compliqué la tâche et oui bien sûr on peut faire plus simple mais si je ne me trompe pas le but est de créer une fonction de type GetObject comme il en existe pour Outlook, Excel, Word.
    Et si je ne fais pas d'erreur ce type de fonction permet de vérifier si une instance de l'application est déjà ouverte ou non.
    Or la fonction proposée au message 1 ne permet pas de savoir si Internet Explorer est lancée mais uniquement de savoir si la contenant une URL est affichée ou non.

    Si c'est le but de la manœuvre alors effectivement la fonction GetObjects proposée fonctionne (tout comme les 3 lignes de codes de Marc-L d'ailleurs) mais alors elle ne remplit pas le rôle de la fonction GetObject telle que l'on peut l'utiliser pour Excel, Word ou Outlook par exemple car si l'application IE est lancée mais pas sur la page contenant l'url cela ne fonctionne pas (et pourtant une instance de l'application est ouverte !).

    Celle que je propose te dit si l'application IE est ou non lancée et si c'est le cas et que le 2ème argument est placé à True fait la distinction entre :
    - IE est lancé et la page contenant l'URL est affiché
    - IE est lancé mais la page contenant l'URL n'est pas affiché.

    J'ai bien précisé que ce n'était qu'un essai sans plus.

    @patricktoulon :
    le rendu de la fonction en variantEt dans la condition if lui donner la valeur grue ou false si il y a un document HLMSa veut dire que si il y en a un alors forcément IE est en routedonc true dans le cas contraire c'est falsePour la deuxième condition (présence de la bonne URL) c'est pareilD'autant plus que si tu regarde ton code on se rent compte que l'on sort de la boucle
    Oui c'est loin d'être optimisé je suis d'accord. Ceci dit je n'ai pas compris tes explications (l'histoire du rendu de la fonction en variant et le reste d'ailleurs). Pourrais-tu développer s'il te plaît ?
    A+

  15. #15
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    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 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    Re
    Tu n'a pas mal compris le but mais oui tu te complique la vie parce que
    La fonction fonctionne rien que avec les fenêtre windows et IE chrome et fire fox ne sont pas pris en compte ce qui implique que " l'obj" est forcément IE si il il ya la bonne Url
    Donc toute tes inquiétudes a ce sujet sont inutiles
    C'est plus clair la?
    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

  16. #16
    Membre confirmé
    Homme Profil pro
    conseiller
    Inscrit en
    Janvier 2013
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : conseiller
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 367
    Points : 649
    Points
    649
    Par défaut
    Oui nous sommes d'accord. Donc, contrairement à un GetObject classique ta fonction en l'état actuelle ne permet pas de contrôler si une application IE est déjà lancée mais simplement si la page de l'URL placé en argument est ouverte.
    Si j'ouvre IE sur ma page de lancement "https://www.google.fr" et que je lance ta fonction elle ne détecte pas que IE est lancé.
    D'où l'ambiguïté que j'avais soulevé dans mon 1er message car une fonction GetObject au sens où je l'entends est capable de te signaler si une instance de l'application est en cours.
    A+

    Edit : donc si ta fonction sert uniquement à contrôler si l'url est affiché dans IE il me semble qu'elle peut être simplifiée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      For Each obj In objShell.Windows
        If obj.LocationURL = url Then Set Getobjects = obj: Exit Function
      Next obj
    Autre point si tu veux la rendre fonctionnelle sur un Excel 64 bits : remplacer par et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set objShell = New Shell
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set objShell = CreateObject("shell.application")
    ce qui donne au final
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Function Getobjects(url) As Object
    Dim objShell As Object, obj As Object
      Set objShell = CreateObject("shell.application")
      For Each obj In objShell.Windows
        If obj.LocationURL = url Then Set Getobjects = obj: Exit Function
      Next obj
    End Function
    Je remarque d'ailleurs que c'est également l'idée des 3 lignes de code indiquées par Marc-L.
    En tout cas bonne idée de passer par Shell, merci pour l'astuce.
    A+

  17. #17
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    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 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    Bonjour et mille sexcuse pour le retard mais j'ai eu beaucoup de boulot sur un autre projet

    Davido84,je te site
    Mais contrairement au GetObject classique la fonction ne te dit pas si une instance d'Internet Explorer est ou non ouverte car si IE est ouvert mais sur une autre page cela ne te l'indique pas (normal puisque l'URL ne correspond pas).
    je crois qu'il va te falloir changer de lunettes

    regarde cette partie du code du post1
    j'ai ajouté les commentaires pour te montrer ton erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For Each obj In objShell.Windows
            If TypeName(obj.document) = "HTMLDocument" Then 'test si le document est un document HTML
                If obj.LocationURL = url Then Set Getobjects = obj' si le document a la bonne url
    comme je te l'ai indiqué plus haut dans la discution ca ne fonctionne qu'avec les fenêtre Windows et IE
    donc si le document est un html c'est forcement une instance de IE (url bonne ou pas )donc on est bien dans la fonction getobject
    bon d'accord j'ajoute pour ma part le local url parce que dans le cas de la nécessité de cette fonction on cherche forcement un document bien précis

    est ce que c'est plus clair maintenant
    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

  18. #18
    Membre confirmé
    Homme Profil pro
    conseiller
    Inscrit en
    Janvier 2013
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : conseiller
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 367
    Points : 649
    Points
    649
    Par défaut
    Bonjour et désolé de ne pas avoir répondu plus tôt,
    je crois qu'il va te falloir changer de lunettes
    mes lunettes vont très bien merci. Je te faisais juste la remarque que ta fonction telle qu'elle est rédigée, avec un argument d'url non optionnel permet uniquement de savoir que la page dont l'url est passé en argument est ouverte dans IE.
    Si IE est ouvert mais qu'aucune page ouverte dans IE ne correspond à l'url passée en argument la fonction ne ramène rien et ce contrairement à un GetObject classique (cf. les exemples exposées dans mes précédents messages).
    Mais bon c'est juste une remarque. Si l'on s'en sert uniquement pour savoir si telle page est ouverte dans IE pas de problème par contre on ne peut l'utiliser si l'on veut tester si IE est ouvert quelque soit la ou les pages affichées.

    Ceci dit je ne vois pas trop à quoi sert le test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If TypeName(obj.document) = "HTMLDocument" Then 'test si le document est un document HTML
    S'il s'agit de vérifier si la page correspondant à l'url passée en argument est ouverte dans IE
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ForEach obj In objShell.Windows
        If obj.LocationURL = url Then Set Getobjects = obj: Exit Function 
    Next obj
    ne suffit-il pas ?
    A+

  19. #19
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    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 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    bonjour
    je te cite:
    Ceci dit je ne vois pas trop à quoi sert le test Code :
    Sélectionner tout - Visualiser dans une fenêtre à part

    If TypeName(obj.document) = "HTMLDocument" Then 'test si le document est un document HTML
    S'il s'agit de vérifier si la page correspondant à l'url passée en argument est ouverte dans IE
    Code :
    Sélectionner tout - Visualiser dans une fenêtre à part

    1
    2
    3
    ForEach obj In objShell.Windows
    If obj.LocationURL = url Then Set Getobjects = obj: Exit Function
    Next obj

    ne suffit-il pas ?
    A+
    je justement le sujet sur le quel tu épilogue et que visiblement tu comprends pas

    tu dis que ma fonction ne détecte pas si une instance de Ie est enclenchée ou pas sans le test sur l'url

    MAIS PURRE DE PURRE TU MET LE DOIGT DESSUS!!!!!!!!!!!!!!!!!!!!!!!!!

    cette ligne en rouge fait exactement ce que tu dis que ma fonction ne fait pas

    en gros je pourrais supprimer le test de l'url et c'est tout ;pour avoir le getobject du IE

    Pure !!!!je ne dois pas parler Français je vais retourner a l'école

    pure tu es têtu quand même ?ou alors tu me fait croire que tu comprends pas dans ce cas la blague est un peu longue a mon gout
    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

  20. #20
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    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 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut bon pour la derniere fois
    afin que tu puisse comprendre je t'ai arrangé la fonction avec 2 test

    avec ou sans url

    allez test ca et dis moi que sans url ca ne trouve pas l'application internet explorer
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
                       '*******************************************************
                         'pour le test on lance 2 session de internet explorer
                       '*******************************************************
      Sub LANCE_IE_VIDE()
        Dim IE, IE2
        Set IE = CreateObject("internetexplorer.application")
        IE.navigate "http://www.developpez.net/forums/f664/logiciels/microsoft-office/excel/macros-vba-excel/"
        IE.Visible = True
     
     
        Set IE2 = CreateObject("internetexplorer.application")
        IE2.navigate "http://www.google.fr/"
        IE2.Visible = True
       'on quitte la sub donc elle n'a plus rien a voir avec le reste du code
    End Sub
     
    'ON A LANCE 2 SESSIONs DE INTERNET EXPLORER LA DERNIERE LANCEE EST CELLE AVEC GOOGLE C EST DONC LA SESSION ACTIVE  OK
    'MAINTENANT ON TEST LA PRESENCE DE IE!!!!!!!!!!!!!
    Sub test_presence_de_IE()    ' sans url te donne l'onglet actif de l'application internet explorer
        Dim url As String, IE As Object
        Set IE = Getobjects_IE
     
        'LA PREUVE!!!!!!!!!!!
        MsgBox IE.document.body.innertext ' te donne le code source de l'onglet qui est actif dans internet explorer
    End Sub
     
     
    Sub test_presence_de_IE_avec_URL()    ' avec url te donne la bonne session
        Dim url As String, IE As Object
        url = "http://www.developpez.net/forums/f664/logiciels/microsoft-office/excel/macros-vba-excel/"
        Set IE = Getobjects_IE(url)
        'LA PREUVE!!!!!!!!!!!
        MsgBox IE.document.body.innertext    ' te donne le code source sans les balises corespondant a l'url
    End Sub
     
     
    Public Function Getobjects_IE(Optional url As String = "") As Object
        Dim objShell As Shell, obj As Object
        Set objShell = New Shell
        For Each obj In objShell.Windows
            'test de la presence de IE dans les treads
            If TypeName(obj.document) = "HTMLDocument" Then
                Set Getobjects_IE = obj
                'test supplementaire avec l'url au cas ou il y ai plusieur onglets d'ouvert dans internet explorer
                'ou plusieur session (plusieurs fenetres d'internet explorer  )
                If url <> "" And obj.LocationURL = url Then Set Getobjects = obj: Exit For
            End If
        Next obj
    End Function
    peut être que ca va rentrer maintenant
    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.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Option pour Internet Explorer 6.0
    Par tiftay01 dans le forum IE
    Réponses: 4
    Dernier message: 19/08/2006, 09h06
  2. Création d'un Addon pour Internet Explorer ?
    Par swirtel dans le forum Windows
    Réponses: 1
    Dernier message: 18/11/2005, 11h00
  3. Faire un plugin pour internet explorer
    Par snyff dans le forum Windows
    Réponses: 2
    Dernier message: 11/05/2004, 19h18
  4. Créer un plug-in pour Internet Explorer
    Par giaco dans le forum C++Builder
    Réponses: 4
    Dernier message: 25/06/2003, 18h12

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