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 :

Comment associer un objet VBA à une fenetre POP UP en .jsp ouvert avec IE


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Octobre 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur sécurité

    Informations forums :
    Inscription : Octobre 2015
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Comment associer un objet VBA à une fenetre POP UP en .jsp ouvert avec IE
    Bonjour,
    Je suis sur une petit projet qui consiste à automatiser de la saisi sur un site web.
    Grace au tutoriel de Qwazerty, J'arrive a interagir avec la page web ( Merci super travail )

    Une des actions m'ouvre une nouvelle page en .jsp
    une sorte de pop up IE sans barre d'adresse. ( ==> barre d'adresse visible quand je réalise l'opération en manuelle avec CHROME, c'est là que j'ai récupéré l'URL)
    Je souhaite accéder a cette page mais je n'y arrive pas :

    J'utilise la fonction suivante avec l'URL de la page en question. mais aucun résultat. En cherchant un peu j'ai remarque que cette page n'apparaissait pas dans "objShell.Windows"

    Ci dessous la fonction utiliser et une capture d'ecran de la page en question.

    Merci d'avance a ceux qui prendront le temps de se pencher sur ce problème.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Function GetobIEOBject(URL As String) As Object
        Dim objShell As Object
        Dim obj As Object
        Set objShell = CreateObject("shell.application")
        For Each obj In objShell.Windows
            If TypeName(obj.document) = "HTMLDocument" Then
                If obj.LocationURL = URL Then Set GetobIEOBject = obj
            End If
        Next obj
    End Function
    Images attachées Images attachées  

  2. #2
    Membre chevronné Avatar de mfoxy
    Homme Profil pro
    Automation VBA
    Inscrit en
    Février 2018
    Messages
    752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Automation VBA
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2018
    Messages : 752
    Points : 1 971
    Points
    1 971
    Par défaut
    Bonjour

    Le popup n'est peux etre qu'un "DIV" dynamique, il pourrait donc se manipuler comme le reste de ta page Web.

    Essaie avec le F12 dans IE, de faire la manipulation à la main et voir ce qui change dans l'explorateur,
    ou fait un inspect élément sur le popup up directement ( clic droit Inspect Élément)

    Bat
    Michaël

    Si mon aide/avis vous a été profitable , n'hésitez pas à cliquer sur , ça fait toujours plaisir...
    _________________________________________________________________________________________________________________

    "Tout le monde est un génie. Mais si on juge un poisson sur sa capacité à grimper à un arbre, il passera sa vie à croire qu'il est stupide..."
    Albert Einstein

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Octobre 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur sécurité

    Informations forums :
    Inscription : Octobre 2015
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Salut mfoxy,

    Merci pour la piste !
    HTML et Java, je ne suis vraiment pas à l'aise avec tout ca !!
    mais je vais faire de mon mieux !!!

    Bon voici les résultats après quelques essais en manuelle.
    1- La fenêtre POP UP est ouverte après un clic sur une balise Anchors.
    2- console afficher ( F12 ), après un clic , le popup apparait mais je n'ai rein vu de particulier sur le code! (un DIV dynamique provoque quels réactions dans le code ???)
    3- Enfin clic droit et inspect élément sur le popup directement ==> je voie le code HTML propre a cette page.
    C'est sur ce code que j'aimerais pourvoir agir !

  4. #4
    Membre chevronné Avatar de mfoxy
    Homme Profil pro
    Automation VBA
    Inscrit en
    Février 2018
    Messages
    752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Automation VBA
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2018
    Messages : 752
    Points : 1 971
    Points
    1 971
    Par défaut
    Re,

    Ce popup pourrait simplement être une "extension" de la page html en cours.

    Si tu mets une pause dans ton code, point arrêt, en attendant que le popup soit ouvert, et que tu essaies en suite d'interagir avc celui-ci ça pourrait fonctionner.

    Si ce n'est pas un site intranet, tu pourrais aussi peut être nous donner ton code actuel, avc le lien du site, pour que nous puissions tester ?

    Bat,
    MFoxy
    Michaël

    Si mon aide/avis vous a été profitable , n'hésitez pas à cliquer sur , ça fait toujours plaisir...
    _________________________________________________________________________________________________________________

    "Tout le monde est un génie. Mais si on juge un poisson sur sa capacité à grimper à un arbre, il passera sa vie à croire qu'il est stupide..."
    Albert Einstein

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Octobre 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur sécurité

    Informations forums :
    Inscription : Octobre 2015
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Re,

    Malheureusement c'est un intranet. L'accès nécessite une connexion avec ID et MDP. C'est pour cette raison que j'utilise du Late Blinding afin d'assurer la portabilité vers d'autres utilisateurs.
    Concernant les pauses, j'ai tester avec des "Sleep" pour temporiser le déroulement du programme mais ce n'est pas mieux !
    J'ai le même résultat lorsque j'avance étape par étape avec le F8!
    Peux être un problème sur code ??
    Ci dessous le Code (Enfin c'est le début). Tant que je n'ai pas trouvé le moyen d’accéder a ce popup, programmer la routine est inutile.

    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
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    Option Explicit
    Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal Milliseconds As LongPtr)
    Function GetobIEOBject(URL As String) As Object
        Dim objShell As Object
        Dim obj As Object
        Set objShell = CreateObject("shell.application")
        For Each obj In objShell.Windows
            'If TypeName(obj.document) = "HTMLDocument" Then
                If obj.LocationURL = URL Then Set GetobIEOBject = obj
            'End If
        Next obj
    End Function
     
    Sub WaitIE(objIE As InternetExplorer)
            'On boucle tant que la page n'est pas totalement chargée
    Do While objIE.Busy: DoEvents: Loop
    Do Until objIE.readyState = READYSTATE_COMPLETE: DoEvents: Loop
    End Sub
     
    Sub Essai()
     
    Dim IE1 As InternetExplorer
    Dim IE2 As InternetExplorer
     
    Dim IE1Doc As HTMLDocument
    Dim IE2Doc As HTMLDocument
    Dim Frame1_Doc As HTMLDocument
    Dim htmltable As htmltable
    Dim Generic As HTMLGenericElement
    Dim B_Aff_Banque_Horraire As HTMLGenericElement
     
    Dim URL As String
    Dim URL2 As String
    Dim tag As String
    Dim CP As String
    Dim index As Integer
     
     
    ' Affedction des variable adresse site internet"
     
    URL = "http://www.psgt.infra.sncf.fr/servlets/ServCilvAction"
    URL2 = "http://www.psgt.infra.sncf.fr/Tap/Gerer/TapGrHoraire.jsp"
     
    ' affectation du site sur URL à la l'objet EI2
     
    Set IE1 = GetobIEOBject(URL)
    Set IE1Doc = IE1.document
    IE1.Visible = True
     
    'dans le document HTML (de IE1) un nouveau dcument est attaché a une balise frame
    'Affectation variable pour document balise frame 1
     
    Set Frame1_Doc = IE1Doc.frames("contenu").document.frames.Item(1).document
     
    ' recherche du formulaire HTML
     
    For index = 0 To 200
        Set Generic = Frame1_Doc.getElementsByTagName("form")(index)
        On Error GoTo saut1
        If Generic.Name = "Formulaire" Then
            Exit For
        End If
    Next
     
    ' Recherche de la table générale identifié par la class "nn"
     
    For index = 0 To 200
        Set htmltable = Generic.getElementsByTagName("table")(index)
        On Error GoTo saut1
        If htmltable.ClassName = "nn" Then
            Exit For
        End If
    Next
     
    ' Recherche de la table contenu - pas de name, id, ou class etc...
     
    Set htmltable = htmltable.Children(0).Children(1).Children(0).Children(1)
     
    ' Rechercher Afficher banque horraire pas de name, id, ou class etc...
     
    Set B_Aff_Banque_Horraire = htmltable.Children(1).Children(0).Children(0).Children(0)
     
    ' Commande de clic sur le boutton "Afficher banque horaire"
    B_Aff_Banque_Horraire.Click
     
    '==> a ce niveau du programme la fenetre popup d'ouvre.
    'code pour associer la page popup a l'objet IE2
    '==> IE2 is nothiong
     
        URL2 = "http://www.psgt.infra.sncf.fr/Tap/Gerer/TapGrHoraire.jsp"
        Sleep (2000)
        Set IE2 = GetobIEOBject(URL2)
        Sleep (2000)
        Set IE2Doc = IE1.document
     
     
    '//////////////////////////////////////////////////////////////////////
    'Routine de remplissage a réaliser
    '//////////////////////////////////////////////////////////////////////
     
    'boucle pour trouver la case du tableau de la du mois et entree le code horraire
    ' il gau = "AJ_" & Jou_du_mois & "_AG_" & CP & "_"
     
            For index = 0 To 200
            Set Generic = Frame1_Doc.all.Item(index)
            If Generic.ID = "AJ_5_AG_6801083G_" Then
            Generic.Click
            Exit For
            End If
            Next
     
    saut1:
     
    MsgBox "fin"
     
    End Sub
     
    Sub Fenetres_IE()
        'Nécessite d'activer la référence
        '"Microsoft Internet Controls"
        'et
        '"Microsotf HTML Object Library"
     
        Dim IE As New InternetExplorer
        Dim winShell As New ShellWindows
        Dim maPageHtml As HTMLDocument
     
        On Error Resume Next
     
        For Each IE In winShell
            If IE.LocationURL <> "" Then
                Set maPageHtml = IE.document
                MsgBox maPageHtml.DocumentElement.innerText
     
                Set maPageHtml = Nothing
            End If
        Next IE
    End Sub

  6. #6
    Membre chevronné Avatar de mfoxy
    Homme Profil pro
    Automation VBA
    Inscrit en
    Février 2018
    Messages
    752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Automation VBA
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2018
    Messages : 752
    Points : 1 971
    Points
    1 971
    Par défaut
    Re,

    Il y a un stuuut dans la partie de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    URL2 = "http://www.psgt.infra.sncf.fr/Tap/Gerer/TapGrHoraire.jsp"
    Sleep (2000)
    Set IE2 = GetobIEOBject(URL2)
    Sleep (2000)
    Set IE2Doc = IE1.document
    Dans Set IE2Doc tu attribués IE1.document ?

    C est assez compliqué de t'aider sans savoir avoir accès au site. Dsl donc de ne pas pouvoir tu donner la solution miracle, avec les interactions IE s'est vraiment du cas par cas...
    Michaël

    Si mon aide/avis vous a été profitable , n'hésitez pas à cliquer sur , ça fait toujours plaisir...
    _________________________________________________________________________________________________________________

    "Tout le monde est un génie. Mais si on juge un poisson sur sa capacité à grimper à un arbre, il passera sa vie à croire qu'il est stupide..."
    Albert Einstein

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Octobre 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur sécurité

    Informations forums :
    Inscription : Octobre 2015
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Merci mfoxy, et bien vu pour le stuuut !!!
    Je connaissais pas le terme, mais j'aime bien

    Oui sans le code HTML et surtout sans pourvoir faire de test , ça deviens très compliqué.
    Je vais poursuivre sur les pistes que tu m'a données :
    - mieux comprendre le code HTML
    - réaliser des commandes via la page principale et tenté de trouver un moyen d'atteindre les données du popup.

    Je pensais aussi à 2 pistes supplémentaires:
    1 - le code HTML utilise des scripts JAVA, il me semble que ce popup pourrait être généré par un script (je suis pas sûr mais ça y ressemble beaucoup)
    de plus les données contenu sur ce popup proviennent surement d'un serveur ( Données évolutifs, liées à mon secteur d'activité)

    2- Sinon connais tu une autre fonction que celle utilisée dans ce code pour trouver les fenêtres ouvertes sur Windows?

  8. #8
    Membre chevronné Avatar de mfoxy
    Homme Profil pro
    Automation VBA
    Inscrit en
    Février 2018
    Messages
    752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Automation VBA
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2018
    Messages : 752
    Points : 1 971
    Points
    1 971
    Par défaut
    Re,

    J'ai ceci en stock qui liste sur une feuille nommée browsers, l ensemble des pages ie ouvertes.

    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
     
    Sub getALLBrowsers()
        Dim mainWorkBook As Workbook
        i = 2
     
        Set objShell = CreateObject("Shell.Application")
        Set objAllWindows = objShell.Windows
        Set mainWorkBook = ActiveWorkbook
     
        For Each ow In objAllWindows
            If (InStr(1, ow, "Internet Explorer", vbTextCompare)) Then
                mainWorkBook.Sheets("browsers").Range("A" & i) = ow
                mainWorkBook.Sheets("browsers").Range("B" & i) = ow.Hwnd
                mainWorkBook.Sheets("browsers").Range("C" & i) = ow.Document.Title
                mainWorkBook.Sheets("browsers").Range("D" & i) = ow.locationURL
                i = i + 1
                'MsgBox ow.Hwnd & "  " & ow & "   " & ow.locationURL & "  " & ow.Document.Title
            End If
        Next
    End Sub
    Michaël

    Si mon aide/avis vous a été profitable , n'hésitez pas à cliquer sur , ça fait toujours plaisir...
    _________________________________________________________________________________________________________________

    "Tout le monde est un génie. Mais si on juge un poisson sur sa capacité à grimper à un arbre, il passera sa vie à croire qu'il est stupide..."
    Albert Einstein

  9. #9
    Nouveau Candidat au Club
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Octobre 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur sécurité

    Informations forums :
    Inscription : Octobre 2015
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    mfoxy,

    J'ai tenté avec ce code. Sur la feuille browser, j'obtiens le même résultat ( avec popup ou pas )
    Donc je pense que ce n'est pas une fenêtre.

    En faisant des recherches je crois avoir compris ce qui génère ce popoup.

    La balise est un anchors contient en href une fonction(). Un sript evenmentiel, qui est lancé a chaque clic.
    Dans ce cas précis c'est la fonction : "javascript:afficherBanqueHoraire()" (voir : http://philippe.medan.pagesperso-ora...jvs/jshref.htm )

    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <a href="javascript:afficherBanqueHoraire();" onclick="nePasAvertirEnQuittant=true;" onmouseover="return overlib('Pour afficher la banque horaire', CAPTION, 'Cliquez ici ...');" onmouseout="return nd();" class="orangegras">Afficher la
    								banque horaire</a>

    Pour l'instant je ne sait pas ou trouver et lire le cor
    Merci pour tes conseils , ça m'a permis de mieux cerner le sujet ! Maintenant il ne me reste plus qu'a chercher ...

Discussions similaires

  1. Réponses: 3
    Dernier message: 19/06/2019, 21h23
  2. comment rendre impossible de resizer une fenetre?
    Par HiT dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 02/04/2006, 17h08
  3. Réponses: 13
    Dernier message: 09/03/2006, 18h17
  4. comment modifier les widgets dans une fenètre??
    Par afrikha dans le forum GTK+ avec C & C++
    Réponses: 6
    Dernier message: 14/10/2005, 14h48

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