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 :

Macro accès internet et Late/early binding [XL-2013]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 7
    Par défaut Macro accès internet et Late/early binding
    Bonjour à tous,

    J'ai suivit le tutoriel de Qwazerty sur la manipulation d'internet explorer via VBA sans problèmes particuliers.
    Ci dessous le premier code que j'ai adapté à mon utilisation :
    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
    Sub ABCbourse()
     
        'Déclaration des variables
        Dim IE As New InternetExplorer 'cette instance contiendra la page qui charge en boucle
        Dim IEDoc As HTMLDocument
        Dim Input_Date_debut As HTMLInputElement
        Dim Input_Date_fin As HTMLInputElement
        Dim Input_ISIN_Number As HTMLInputElement
        Dim Input_ISIN_coche As HTMLInputElement
        Dim suivant As HTMLInputElement
     
     
        IE.navigate "http://www.abcbourse.com/download/historiques.aspx?f=ex"
        IE.Visible = True
     
        'appelle la macro WaitIE, qui attend le chargement de la page.
        waitIE IE
     
        'On pointe le membre document
        Set IEDoc = IE.document
     
        'On point la zone de texte IEDoc.all("name", "index si plusieurs noms")
        Set Input_ISIN_Number = IEDoc.all("ctl00$BodyABC$txtOneSico")
     
        'On écrit le texte qu'on veut placer dedans :
        Input_ISIN_Number.Value = "FR0000045072"
     
        waitIE IE
     
        Set Input_ISIN_coche = IEDoc.all("ctl00$BodyABC$oneSico")
        Input_ISIN_coche.Click
     
        Set Input_Date_debut = IEDoc.all("ctl00$BodyABC$strDateDeb")
        Input_Date_debut.Value = "01/01/2014"
        Set Input_Date_fin = IEDoc.all("ctl00$BodyABC$strDateFin")
        Input_Date_fin.Value = "01/09/2014"
     
        Set suivant = IEDoc.all("ctl00$BodyABC$Button1")
        suivant.Click
     
        Set IEDoc = Nothing
    Ce code fonctionne parfaitement.
    L'inconvénient, c'est que ce classeur que je suis en train de faire est destiné à circuler sur plusieurs postes pour plusieurs personnes.
    Je voudrais éviter de devoir activer manuellement ou via une macro les références nécessaires (HTML object library, Microsoft Internet Controls et Microsoft Shell Controls And Automation).

    J'ai donc entrepris de modifier le code en déclarant les variables en Late Binding :
    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
     
    Sub ABCbourse()
     
        'Déclaration des variables
        Dim IE As Object                 
        Set IE = CreateObject("InternetExplorer.application") 'pas de soucis particuliers à ce niveau la.
     
        Dim IEDoc As Object
        Set IEDoc = CreateObject("htmlfile") 'la non plus aucun problèmes
     
     
        ' Paramètres des champs ABC Bourse, tous déclarés en tant qu'objet.
        Dim Input_Date_debut As Object    
        Dim Input_Date_fin As Object    
        Dim Input_ISIN_Number As Object  
        Dim Input_ISIN_coche As Object
        Dim suivant As Object
     
     
     
        IE.navigate "http://www.abcbourse.com/download/historiques.aspx?f=ex"
        IE.Visible = True
     
        'appelle la macro WaitIE, attend le chargement de la page.
        waitIE IE
     
        Set IEDoc = IE.document
     
        'On point la zone de texte IEDoc.all("name", "index si plusieurs noms")
        Set Input_ISIN_Number = IEDoc.all("ctl00$BodyABC$txtOneSico")
     
        'On écrit le texte qu'on veut placer dedans :
        Input_ISIN_Number.Value = "FR0000045072"
     
        waitIE IE
     
        Set Input_ISIN_coche = IEDoc.all("ctl00$BodyABC$oneSico")
        Input_ISIN_coche.Click
     
        Set Input_Date_debut = IEDoc.all("ctl00$BodyABC$strDateDeb")
        Input_Date_debut.Value = "01/01/2014"
        Set Input_Date_fin = IEDoc.all("ctl00$BodyABC$strDateFin")
        Input_Date_fin.Value = "01/09/2014"
     
     
        Set suivant = IEDoc.all("ctl00$BodyABC$Button1")
        suivant.Click
        waitIE IE
     
        'attente de 5 secondes avant de poursuivre
        newHour = Hour(Now())
        newMinute = Minute(Now())
        newSecond = Second(Now()) + 5
        waitTime = TimeSerial(newHour, newMinute, newSecond)
        Application.Wait waitTime
     
        SendKeys "{tab}"
        SendKeys "{enter}"
     
     
        'On libère la variable IEDoc
     
        Set IEDoc = Nothing
     
     
        'Penser à quitter internet :
        IE.Quit
    La ligne 27, Set IEDoc = IE.document renvoie une erreur : "La méthode Document de l'objet IWebBrowser2 a échoué."

    Si je supprime la ligne, le code continue, et la ligne suivante renvoie une erreur également : "Propriété ou méthode non gérée par cet objet."

    Je suis bloqué je n'arrive pas à avancer. L'objectif est vraiment de supprimer l'activation des références.
    Une autre solution à laquelle j'ai pensé, c'est d'activer les références par macro, j'ai bien le bout de code nécessaire, il fonctionne, mais pour cela il faut activer la case "Accès approuvé au modèle d'objet du projet VBA" dans les paramètres de sécurité des macros.
    On peut lire la valeur de la case via une macro, mais je n'ai pas trouvé le moyen de modifier cette valeur via VBA, cela simplifierait énormément la suite de mon travail.


    Un autre point dans mon code qui pose un soucis et qui est pas très beau, ce sont les lignes 59 et 60, ces touches permettent d'ouvrir le fichier via une interaction avec la fenêtre "Téléchargement" d'IE.
    Y a-t-il un autre moyen que ça ? Surtout que ça risque de ne pas fonctionner sur tous les postes.

    Merci d'avance, désolé pour la longueur du message.

  2. #2
    Expert éminent
    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
    Par défaut

    Bonjour,

    commencer par rechercher sur ce forum CreateObject("InternetExplorer.Application")
    et de nombreux cas concrets pourront aider !

    Il est même possible de se passer de variable objet comme dans cette pourtant très récente discussion,
    y consulter aussi le post suivant …

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 7
    Par défaut
    Bonjour,

    J'ai lu cette discussion avant de poster ce message, cependant je n'ai pas su la rapprocher de mon application, qui saisie dans des champs et ne récupère pas les infos des champs en question.

    Il y a également toujours le problème de la boite de dialogue "Enregistrer sous" d'IE que je n'arrive pas à résoudre.

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

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 122
    Par défaut
    Salut

    Si la ligne Set IEDoc = IE.document ne fonctionne pas, inutile d'aller plus loin, la variable IEDoc ne sera pas initialisée et donc elle ne pointera pas sur ton document.

    Cette ligne est inutile puisque tu refais un set après
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set IEDoc = CreateObject("htmlfile") 'la non plus aucun problèmes

    Dasn ces cas la pour trouver où est le problème, place un point d'arrêt sur la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Input_ISIN_Number = IEDoc.all("ctl00$BodyABC$txtOneSico")
    Exécute ton code, lorsqu'il stoppe sur le point d'arrêt, place un espion sur IEDoc pour voir ce qu'il contient.
    Chez moi cette variable est vide, si c'est aussi le cas chez toi (ce qui est fort probable) le problème vient de la.
    Par contre contrairement à toi je n'ai aucun message d'erreur, il semblerait que ton navigateur (IE) décroche, regarde dans les messages partagés dans la discussion du tutoriel, il y a une solution pour rattacher la variable au navigateur avec GetObject je crois.

    J'ai fait quelques essais comparatif early/late binding, le problème (chez moi, IEDoc vide) vient de la déclaration de IEDoc, je me demande si VBA ne fait pas un transtypage incorrect, étrange, ou alors je passe à coté d'un truc énorme .


    Pour la boite de dialogue, la question revient très régulièrement, il n'y a pas de solution pour la manipuler.
    Les solutions proposé sont soit de récupérer l'URL du fichier puis d'utiliser du code pour le télécharger, soit de trouver la requête serveur qui permet de recevoir directement les datas.

    ++
    Qwaz

    Salut

    Tu trouveras de la lecture ici pour le téléchargement de donnée de sites boursier (décidément, j'espère que mon tuto ne sert pas qu'à des fins de boursicotage , bref)

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 7
    Par défaut
    Merci Qwazerty,

    J'ai bien la variable vide également. Ok pour le GetObject, je vais fouiller un peu plus.
    Le lien que tu m'as donné va me simplifier énormément la tache grâce au site web sur lequel est exécuté la recherche.

    Sinon une dernière question, on ne peut pas controler via VBA la valeur de la case relative à l'accès au modèle d'objet VBA ?
    Je peux la lire avec ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Dim vbpName As String
     
        On Error Resume Next
     
        vbpName = ThisWorkbook.VBProject.Name
     
        If vbpName = vbNullString Then
            MsgBox "Pour que le classeur fonctionne, merci d'aller dans : " _
            & vbCrLf & "Options" _
            & vbCrLf & "Centre de gestion de la confidentialité" _
            & vbCrLf & "Paramètres du centre de gestion de la confidentialité, " _
            & vbCrLf & "Puis cocher la case : 'Accès approuvé au modèle objet du projet VBA.'"
     
        End If
    Mais après plusieurs manip, pas moyen de la bouger. C'est peut être normal niveau sécurité...
    S'il existe une astuce je suis preneur.


    Ton tuto ne servira pas à boursicoter pour ma part ! Juste à faire des analyses sur les données passées via Excel !

  6. #6
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 122
    Par défaut
    Salut

    Citation Envoyé par bendu31
    Mais après plusieurs manip, pas moyen de la bouger. C'est peut être normal niveau sécurité...

    Tout juste ça n'est pas possible.

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

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

Discussions similaires

  1. [XL-2007] Macro accès internet qui ne marche pas
    Par pourinfo dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 20/09/2010, 18h40
  2. Pb d'accés à internet
    Par lemotard dans le forum Administration
    Réponses: 17
    Dernier message: 11/01/2006, 18h01
  3. [Flash] Probleme avec serveur Tomcat et accés Internet
    Par mc_chicken dans le forum Flash
    Réponses: 4
    Dernier message: 30/09/2005, 16h09
  4. [TOMCAT / FLASH] Probleme accés Internet
    Par mc_chicken dans le forum Tomcat et TomEE
    Réponses: 13
    Dernier message: 30/09/2005, 10h06

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