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

Contribuez Discussion :

[Article] Manipulation d'Internet Explorer via VBA


Sujet :

Contribuez

  1. #21
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Salut

    Pour le fichier, c'est possible que j'ai fait une erreur en modifiant les emplacement hier je vérifierais.

    Sur IE, pour la copie du code source, il faut (directement sur ta page web) faire un clique droit, afficher la source. Une fenêtre devrait s'ouvrir avec le code complet (il me semble que j'en parle tout au début du tutoriel). Sur cette fenêtre tu peux copier et coller le code, pour l'exploiter, il suffit ensuite d'utiliser un logiciel comme "notepad ++" en sélectionnant le mode d'affichage HTML.

    [Edit] Je viens de tester le téléchargement du fichier se passe bien chez moi...
    Tu es la 2ème personne à avoir un soucis avec, j'essaierai d'un autre poste. De toutes façon le fichier reprend l'ensemble des codes sources présents dans le tutoriel, il y a juste 2/3 bricoles en plus.
    Par contre, il faut être logué pour que ça fonctionne, car des modifications on été apportées au niveau du stockage des fichiers accompagnant les tutoriels.
    [/Edit]

    [Edit2]
    Je viens de modifier la construction du lien de téléchargement, peux-tu réessayer, je n'ai fait la modification que sur le tutoriel en ligne, pas sur le contenu dispo hors connexion (pdf, zip et ebook) je les corrigerais plus tard si ça fonctionne comme ça.
    [/Edit2]
    ++
    Qwaz

  2. #22
    Membre émérite Avatar de curt
    Homme Profil pro
    Ingénieur Etudes
    Inscrit en
    Mars 2006
    Messages
    1 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Etudes
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 575
    Points : 2 550
    Points
    2 550
    Par défaut
    Bonjour Qwazerty,

    1/ Le téléchargement fonctionne parfaitement
    2/ Effectivement, le clic-droit "Afficher la source" permet de copier-coller pour utilisation "hors ligne"

    Bilan du 1/ + 2/ =

    Encore merci.

    Curt

  3. #23
    Membre averti
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2012
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 214
    Points : 367
    Points
    367
    Par défaut Se contecter a Intranet via Excel
    Je voulais utiliser le super tuto de QUAZERTY, mais ie.navigate affichait la page et perdait la connection.
    Apres de longue recherche sur Internet :

    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
    'Activer les références
    '   - Microsoft HTML Objects Library
    '   - Microsoft Internet Controls
    '   - Microsoft shell control et automation
     
    'Dans un module
    Option Explicit
    Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
    '---
    Const StUrl = "C:/Users/Saugedic/Documents/MonSite/CreationPage.html"
    '---
     
    '*********************************************
    ' Se Connecter à une page Html local
    '*********************************************
    Sub connexion()
    On Error GoTo ERR_Sub
     
    'Afficher la page html
    '---------------------
    Dim ie As InternetExplorer
    Set ie = New InternetExplorer
     
    With ie
        .Visible = True
        .navigate StUrl
        'affiche la page et .. perd la connection - ie.readystate vide -> err
        '   Do Until .readyState = 4
        '       DoEvents
        '   Loop
    End With
    ' Attendre la fin du chargement
    Sleep (300)
     
    'Se (re)connecter
    Dim objShell As Object, obj As Object
    Set objShell = New Shell
     
    For Each obj In objShell.Windows
        If TypeName(obj.document) = "HTMLDocument" Then
            If obj.LocationName Like "*CreationPage*" Then
            'Des que l'on trouve l'instance chargée - Reconnecter la page
                Set ie = obj
                Exit For
            End If
        End If
    Next
     
    'Ecrire dans la page
    '---------------------
    ' Dim IEdoc As Object - Set IEdoc = ie.document
     
    ' Formulaire de connexion ...
         ie.document.all("autre").Value = "login"
         ie.document.all("Bouton1").Click
     'F12 sur Google pour connaitre les noms des champs    
     
    GoTo FIN_Sub
    '--------------------
     
    ERR_Sub:
        MsgBox "Erreur : " & Err.Number & " (" & Hex(Err.Number) & ")" & vbCrLf & Err.Description
        On Error GoTo 0
     
    FIN_Sub:
    '--------------------
    ie.Quit
    Set ie = Nothing
    'Set IEdoc = Nothing
     
    '---
    End Sub
     
     
    'Pour tester
    '*********************************************
    ' Créer une page html
    '*********************************************
    Sub test()
    On Error GoTo ERR_Sub
     
    'Creer la page html
    '--------------------
    Dim xFile As Integer
     
    xFile = FreeFile
    Open "C:\Users\Saugedic\Documents\MonSite\CreationPage.html" For Output As xFile
     
    Print #xFile, "<HTML>"
        Print #xFile, "<HEAD>"
        Print #xFile, "<TITLE>Ma page de saisie</TITLE>"
        Print #xFile, "</HEAD>"
     
        Print #xFile, "<BODY>"
        Print #xFile, "<FORM>" & _
            "<input type='text' size='10' name='autre'><br>" & _
            "<Input type=button name='Bouton1' value='Validez'>" & _
            "</FORM>"
        Print #xFile, "</BODY>"
    Print #xFile, "</HTML>"
     
    Close xFile
     
     
    Exit Sub
    '---
    ERR_Sub:
        MsgBox "Erreur : " & Err.Number & vbCrLf & Err.Description
        Error 0
    '---
    End Sub
    ** J etrouve toujours tout sur ce site, alors pour une fois **

  4. #24
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Salut
    Deux internautes ont des problèmes similaires. Voila l'un des posts, j'y apporte une solution similaire à celle que tu proposes.

    Pour information, je ne pense pas que la liaison entre Ie et la variable se déconnecte, je pense plutôt que l'IE que tu ouvre, ouvre lui-même une autre fenêtre, puis se ferme. Pourquoi... ça je n'en sais rien...

    Merci pour le retour, bonne journée

    ++
    Qwaz

  5. #25
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Salut

    ... j'ai oublié le lien vers le sujet en question... le voici

    Et le code en question
    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
    Sub PremierIEGet()
    'Déclaration des variables
    Dim FirstIE As New InternetExplorer 'cette instance contiendra la page qui charge en boucle
     
    Dim IE As InternetExplorer 'Dim IE As New InternetExplorer
    Dim objShell As Shell
    Dim obj As Object
     
    FirstIE.Navigate "www.google.fr"
    FirstIE.Visible = True ' a vous de voir, il est possible de la garder masquée, mais attention a ne pas oublier de la fermer avant de finir la macro
     
    'Ensuite on recherche la nouvelle instance d'IE qui a été ouverte par la 1ère instance...
    'Ici il faudra peut-être mettre une petit Sleep histoire d'être sur que cette 2ème instance se soit chargée
    'Je suis pas fan des sleep, mais bon... des fois...
     
    'On charge la collection des appli lancés
    Set objShell = New Shell
    'On boucle
    For Each obj In objShell.Windows
        'On regarde si l'appli est de type Document internet
        If TypeName(obj.document) = "HTMLDocument" Then
            'On regarde si c'est bien l'instance qui a chargé Google
            If obj.LocationName = "Google" Then
                'On pointe cette instance via la variable IE
                Set IE = obj
                'On quite la boucle
                Exit For
            End If
        End If
    Next
     
    'Ensuite on utilise IE
    '...
    '...
    'IE.Visible = True 'Logiquement celle-ci doit déjà être visible
    IE.Navigate "www.developpez.com"
     
     
    'Fermeture d'IE
    'IE.Quit
     
    'On libère la variable IE (bien que VBA s'en occupe à la fin de la procédure)
    Set IE = Nothing
    End Sub
    ++
    Qwaz

  6. #26
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Salut

    Petite mise à jour, suite à une question sur les positions d'éléments en fonction des numéros d'items.

    Afin de faciliter les recherches d'éléments dans les pages web, j'ai ajouté une page supplémentaire au fichier lié au tutoriel(j'ajouterais une petite info rapide dans le corps du tutoriel dès que possible).

    Vous trouverez sur l'onglet "Arborescence" deux boutons, le première nommé "Web" charge une page IE, un message s'affiche, vous invitant à naviguer jusqu'à la page que vous souhaitez scanner. Une fois cette page atteinte, il vous suffit d'appuyer sur le 2ème bouton, "Scan".
    La liste des éléments contenus dans la page apparaît alors, avec les attributs que vous avez demandé à afficher. Pour obtenir des attributs supplémentaires, il suffit d'ajouter des entêtes de colonne en respectant le nom exact de l'attribut souhaité (la casse n'est pas prise en compte).

    Si vous souhaitez scanner une autre page, il vous suffit de continuer à utiliser la même instance d'IE pour rejoindre la nouvelle page et de cliquer de nouveau sur le bouton "Scan"

    Pour info, dans la colonne type, vous trouverez certainement des "Permission refusée", visiblement c'est le cas lorsque l'élément en question est une frame, je ne peux pas malgré tout garantir que ce ne sera le cas uniquement pour les frames... quoiqu'il en soit, c'est peut-être un bon moyen de les repérer rapidement

    Bon dev' à tous

    ++
    Qwaz

  7. #27
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Salut
    Suite à un MP de bolof qui me proposait d’exploiter ce fichier pour lister également le contenu des frames, j'ai modifier un peu le contenu du fichier.
    Voila une nouvelle évolution, je ne l'ai pas mise en ligne pour l'instant, ça mérite quelques teste avant . Si vous avez l'occasion de tester tenez moi au courant.

    Amélioration
    • Un paramètre permet de choisir de lister le contenu des frames et égallement les frames, des frames, des frames....
    • Des groupes sont placés sur la feuille pour permettre de déployer ou non les sous frames


    ++
    Qwaz

  8. #28
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 29
    Points : 18
    Points
    18
    Par défaut Google Chrome
    Bonjour,
    Est-il possible de créer le même type d'objet que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set IE = CreateObject("InternetExplorer.Application")
    mais avec Google Chrome ? Et par conséquent avoir les mêmes propriétés qui permettraient par exemple de lire la source HTML, d'extraire des données ...

    Merci d'avance !

    PS : J'ai essayé : CreateObject("ChromeTab.ChromeFrame") mais sans succès

  9. #29
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Salut

    A ma connaissance, non.

    Pour que ça fonctionne il faudrait avoir un descriptif et un accès aux bibliothèques qu'utilisent chrome ou avoir au moins un fichier tlb peut-être.
    Enfin je ne suis pas sur à 100% de ce que je te dis la, mais je ne suis pas sur que google offre la possibilité de manipuler sont explorateur, pour IE ont reste dans le même distributeur, il a donc tout interêt a rendre ses produit compatible et/ou interactif.
    Ceci dis, pour le boulot j'ai déjà fait des macro VBA qui manipuler le logiciel conversationnel Extra! d'Attachmate et j'avais à l'époque trouvé un fihcier tlb qui permet d'avoir la descriptif des outils en utilisant l'inspecteur d'objet VBA. Les déclaration par contre étaient forcement en late binding.

    ++
    Qwaz

  10. #30
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur aviation civile
    Inscrit en
    Novembre 2012
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur aviation civile
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2012
    Messages : 52
    Points : 28
    Points
    28
    Par défaut
    Bonsoir,

    merci pour le tuto. Pensez-vous que cela est "adaptable" à safari pour mac?
    Bien à vous,

    xav

  11. #31
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Salut

    Non je ne pense pas mais je ne peux pas le confirmer, par contre le code serait différent, les méthodes ne serait pas les mêmes, il faudrait que Safari mette à dispo une DLL contenant les méthodes pour communiquer avec lui.

    En cherchant vite fait Safari + vba sur google, j'ai vu des codes qui utilisent du script apple mais ça semble limité (?).

    Bon courage

    ++
    Qwaz

  12. #32
    Nouveau Candidat au Club
    Homme Profil pro
    ANGULAR, JAVASCRIPT
    Inscrit en
    Février 2013
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : ANGULAR, JAVASCRIPT
    Secteur : Finance

    Informations forums :
    Inscription : Février 2013
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Tuto qwazerty
    Bonjour,

    Toutes mes félicitations pour ce travail de qualité et généreux.

    Il m'a bien servi pour mon projet. J'ai juste un peu de mal avec les techniques de récupération de texte à partir d'une page web. C'est du probablement à ma très relative maîtrise du sujet. Aurais-tu une référence à me conseiller pour approfondir ce point ?
    Merci d'avance et encore bravo.

    PS : Je sais j'ai découvert un peu tard le tuto !

  13. #33
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Salut

    @nabil44: Non je n'ai pas vraiment de référence précise, il y a pas mal d'infos sur internet. Qu'entends tu pas récupération de texte?

    Bonne journée
    ++
    Qwaz

    PS:
    En parallèle de ça, je souhaite rappeler tous que ce topic est présent pour signaler des problèmes liés au tutoriel, pas pour exposer des demandes d'aide, celles-ci aurait un meilleur place directement dans un nouveau sujet dans le forum adéquate. Les message de remerciement reste les bienvenu .
    Je ne refuse pas d'apporter de l'aide, c'est juste pour un question de lisibilité. Je suis beaucoup moins présent sur DVP, vous pouvez si aucune réponse ne vous est apporté lors de la création d'une demande d'aide sur le forum, m'envoyer un MP avec le lien vers votre sujet, j'essaierais d'y jeter un œil qu'en j'aurais un moment.

    Merci de votre compréhension

  14. #34
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Félicitations
    Bonjour à tous

    Bravo et merci pour ce tutoriel.

    Mais j'ai un peu de mal à l'exploiter à fond car lorsque l'on veut appeler les pages web citées en exemple (http://impots.gouv.fr/ ,Parions Sport ... ), le code source est différent de celui qui est sur le tuto...

    Normal, puisque la page a changée depuis ! Donc du coup il est difficile de "pousser à fond" ses "investigations" pour la compréhension des exemples.

    Mais cela n’enlève rien à la qualité de ce tuto !
    Encore merci...

    Tiens, à propos, la fonction "WaitIE IE" n'est pas valide lorsque je l'utilise dans mon code (avec Excel 2013, IE8,windows7 64bits)??? Je serai curieux de savoir pourquoi...

  15. #35
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Salut

    C'est vrai que j'aurais sans doute du faire une extraction des pages utiliser pour me prémunir des changements de pages...

    Pour ce qui est de Wait IE, aurais tu plus d'information, cela génère une erreur? si oui sur quelle ligne.

    Merci pour ton retour

    ++
    Qwaz

  16. #36
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 7
    Points : 2
    Points
    2
    Par défaut Enigme
    Salut à toi Qwazerty,

    Dans un premier temps je te remercie beaucoup pour ce super Tuto.

    Je me permet de te contacter car j'ai un soucis avec "selectedIndex".
    En effet j'arrive à l'utiliser sur certain site, mais il y en a un qui est tenace!

    Pourrais-tu y jeter un coup d'oeil cela me permettrai de garder mes cheveux.

    Code source de la page internet:
    Code html : 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
    ul class="options" id="optionsList">
    	<li class="singleProOption first loading">
    		<div class="positionContent">
    			<div class="loadingDiv">
    			</div>
     
    			<div class="positionTitle">
    				<input id="type1_input" class="selectboxType" type="text" autocomplete="off" readonly="" tabindex="0"></input>
    				<div id="type1_container" class="selectbox-wrapperType" style="display: none;">
    				<ul></ul>
    				<select id="type1" class="flexcroll hidden">
                                        <option class="title">Currencies</option>
                                                        <option value="2" selected="selected">USD/JPY</option>
                                                        <option value="91" >EUR/USD</option>
                                                        <option value="64" >USD/RUB</option>
                                                        <option value="283" >AUD/JPY</option>
                                                        <option value="259" >GBP/JPY</option>
                                                        <option value="137" >USD/ZAR</option>
                                                        <option value="314" >EUR/AUD</option>
                                                        <option value="69" >EUR/GBP</option>
                                                        <option value="289" >AUD/NZD</option>
                                                        <option value="45" >USD/CAD</option>
                                                        <option value="157" >USD/CHF</option>
                                                        <option value="277" >AUD/CHF</option>
                                                        <option value="35" >AUD/USD</option>
                                                        <option value="95" >GBP/USD</option>
                                                        <option value="315" >GBP/CAD</option>
                                                        <option value="46" >EUR/JPY</option>
                                                        <option value="270" >GBP/CHF</option>
                                                        <option value="44" >USD/TRY</option>
                                                        <option value="333" >CHF/JPY</option>
                                                        <option value="458" >BitCOIN/USD</option>

    Mon Code VBA:
    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 TestgetElementsByClassName()
     
    Dim IE As New InternetExplorer
    Dim IEDoc As HTMLDocument
    Dim htmlTabElement() As IHTMLElement
    Dim GenericElem As HTMLGenericElement
     
    IE.navigate "http://www.optionweb.com/home?lang=fr"
     
       IE.Visible = True
       WaitIE IE
       Set IEDoc = IE.document
     
    Set GenericElem = IEDoc.all("Main")
     
     htmlTabElement = getElementsByClassName(GenericElem, "flexcroll hidden", False)
       Set IEDoc = IE.document
       htmlTabElement(0).selectedIndex = 20
    Je te remercie par avance

    PS1: Ce site ne me permettra de récupérer la valeur de l'action.

    PS2: Je remarque que ce sont les électrotechniciens qui sont les plus curieux en informatique. Pour ma part je m'occupe de la BT

  17. #37
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    777
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 777
    Points : 275
    Points
    275
    Par défaut
    Je suppose que ça ne marche pas parce que la macro ne sait pas que le résultat de getelementsbyclassname est une liste déroulante.
    L'application de la méthode SelectedIndex ne va donc pas de soi.

    Dans le cas présent, puisque tu as l'ID pourquoi n'écris tu pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set htmlSelectElem = IEDoc.all("type1")
       htmlSelectElem.selectedIndex = 20
    ?

    Il faut aussi supprimer le 2ème "Set IEDoc = IE.document"

  18. #38
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    777
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 777
    Points : 275
    Points
    275
    Par défaut
    @ Qwazerty

    J'ai un pb avec le "WaitIE IE"

    Sur un exemple de macro qui enchaîne les actions sur le Web, ma macro plante malgré tout.
    Sur le forum, on m'a indiqué une méthode qui résout à peu près le problème quoique sur le principe assez similaire mais beaucoup moins jolie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub Pause(pausetime As Integer)
    Start = Timer
    Do While Timer < Start + pausetime
    DoEvents
    Loop
    End Sub
    Et en plus elle et beaucoup moins robuste car elle ne tient pas compte de l'état de la page mais uniquement du temps écoulé.
    En général il faut que je mette Pause(3) pour que ça marche, et encore, certaines fois, une page met plus de temps à charger et ça plante.

    Pourtant, la méthode qui consiste à attendre que la page soit complètement chargée, état symbolisé par READYSTATE_COMPLETE, devrait fonctionner à tous les coups ? C'est comme si, sur mon PC, la surveillance de cet état n'était pas révélateur de l'état réel de mon navigateur.

    En plus, si j'ai bien compris, l'état READYSTATE_INTERACTIVE devrait suffire, alors avec READYSTATE_COMPLETE, on devrait être tranquille.

    Merci d'avance pour ta réponse.

  19. #39
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Salut

    Je ne suis pas très solide en terme de connaissance de structure web.
    Par contre certaines structures comme les Form ont un readystate qui leur est propre, il serait donc peut-être intéressant de surveiller celui-ci.

    Je te confirme que l'utilisation d'un boucle Pause tel que tu proposes n'est pas une bonne solution.

    Il m'arrive d'être coincé et dans un tel cas, j'utilise l'API sleep, qui est bien plus "propre". Je couple dans un tel cas son utilisation avec un boucle ou je teste le contenu de ma variable qui est sensée pointer un élément de ma page. Je boucle tant que la variable est Nothing tout en comptant le nombre de boucles effectuées et au bout de x boucle je renvoie un message d'erreur et quitte la procédure.

    Ça ressemble à ça

    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
    Option Explicit
    Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
    Sub Teste()
    'Chargement page...
     
    'Au moment de pointer l'élément qui pose problème
    Do
        'On patiente 250 ms
        Sleep 250
        'On essai de pointer
        Set MaVariable = IEDoc.all("NomOuIdElem")
        'On incrémente une valeur teste
        x = x + 1
        'On verifie que l'on ne boucle pas à l'infini
        If x = 10 Then
            MsgBox "Erreur de chargement de la page"
            Exit Sub
        End If
        'On regarde si on pointe bien quelque chose
    Loop While MaVariable Is Nothing
    End Sub
    Si tu as le problème sur une page en particulier, poste un message dans le forum et fais moi passer un lien vers le sujet en MP.

    ++
    Qwaz

  20. #40
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    777
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 777
    Points : 275
    Points
    275
    Par défaut
    Bonjour Qwaz
    Merci pour ta réponse.
    Je note l'astuce qui est en fait, si j'ai bien compris, une fonction pause un peu plus intelligente puisqu'elle permet de pauser une durée inférieure au seuil qu'on s'est donné si le web le permet.
    Cela dit, ça alourdit quand même sacrément le code, surtout que dans mon cas, je suis astreint à des "WaitIE IE" un bon paquet de fois.
    Dès que j'arrive à reproduire le plantage, j'ouvre un post sur le forum avec le lien en question pour que tu puisses voir ce qui cloche sur le fond.
    Mais pour l'instant, j'ai remplacé tout mes "pause" par de bon vieux "WaitIE IE" et ça marche très bien Sans doute qu'à cette heure-ci le web dépote

Discussions similaires

  1. Manipulation d'Internet Explorer via VBA
    Par pegase33 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 12/04/2018, 09h49
  2. Probleme d'interaction avec Internet Explorer Via VBA
    Par ThaHardy dans le forum Access
    Réponses: 0
    Dernier message: 03/06/2015, 10h52
  3. Manipulation d'Internet Explorer via VBA
    Par jll13 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 04/01/2013, 19h24
  4. probleme Manipulation d'Internet Explorer via VBA
    Par casefayere dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 05/03/2012, 20h36

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