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 :

Manipulation d'Internet Explorer via VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2013
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2013
    Messages : 27
    Par défaut Manipulation d'Internet Explorer via VBA
    Bonjour,

    J'ai lu cette contribution.

    Le tuto est vraiment génial mais environ 1 fois sur 4 ou sur 5 (de manière semble t il complétement alèatoire) lorsque j'execute j'ai un message d'erreur sur cette ligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set htmlGeneric = IEDoc.body.all("event_num")
    Quand je place un espion sur IEDoc.body.all("event_num"), il n'y a aucun probleme, le problème vient de l'affectation vers la variable htmlGeneric.

    Une idée d'ou vient le problème et de sa résolution? C'est d'autant plus currieux qu'il ne bute jamais sur les autres affectations du même type dans le code, mais juste spécifiquement sur celle-ci.

    Merci d'avance pour vos réponses éclairées.

  2. #2
    Membre éclairé
    Inscrit en
    Juillet 2013
    Messages
    777
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 777
    Par défaut
    Il me semble que c'est la manifestation d'un Wait IE qui n'a pas été efficace. Le code continue à se dérouler alors que la page web n'est pas prête.

    Ce sujet a déjà été évoqué plus haut :
    http://www.developpez.net/forums/d11...a/#post7453060

    Je crois que la cause est encore assez obscure et aucune solution propre n'a été trouvée. Mais des parades existent : lire le post sus-indiqué et les suivants.

  3. #3
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2013
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2013
    Messages : 27
    Par défaut
    Là ou c'est étrange c'est que je lui fait afficher le IE.ReadyState et que même dans les cas de plantage il m'affiche toujours ReadyState=4 (Complete)

  4. #4
    Membre éclairé
    Inscrit en
    Juillet 2013
    Messages
    777
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 777
    Par défaut
    C'est ce que je te disais (relire le post): on a constaté que le READYSTATE passe à COMPLETE alors que visiblement les infos ne sont pas encore accessibles.
    Enfin, c'est comme si.
    Si tu te mets juste à côté de ta box (en wifi) ou si tu as un réseau qui débite bien, ton waitIE suffit et je parie que tu ne plantes plus.
    Mais dès que ta page web met du temps à s'afficher (quelle qu'en soit la raison), le code ne sait plus attendre suffisamment et ça plante.
    Enfin... je le dis avec mes mots à moi

  5. #5
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2013
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2013
    Messages : 27
    Par défaut
    Effectivement je suis pas très fan de boucler tant que la variable=nothing et de sortir au bout de x repetitions si ça marche tjs pas, mais comme ça semble la seule solution viable, on va faire comme ça.

    Merci pour ta réactivité. Moins d'une minute sous controle d'huissier.

  6. #6
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2013
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2013
    Messages : 27
    Par défaut
    Finalement, j'ai trouvé la methode qui me convient le mieux:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If IEDoc.body.all("filtres") Is Nothing Then
            IE.Visible = False
            MsgBox "Nous subissons un léger contretemps. Veuillez nous en excuser."
            IE.Visible = True
    End If
    Le temps d'afficher la msgbox, de la lire par l'utilisateur et de cliquer, ma page a fini de se charger complétement (en tout cas ça a été le cas sur chacun de mes essais).

  7. #7
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2013
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2013
    Messages : 27
    Par défaut
    Merci, c'est exactement ce que je cherchais!

  8. #8
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Par défaut
    Bonjour à tous,

    Je l'ai déjà mentionné dans de nombreuses discussion mais il me paraît utile de le dire ici.
    Même quand IE a terminé, il se peut que le Document (le contenu de la page) n'ait pas fini de se charger.

    Après chaque changement de page, il faut répéter la structure suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        WaitIE IE
        Set IEDoc = IE.document
        WaitDoc IEDoc
    avec les 2 procédures d'attente:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub WaitIE(IE As InternetExplorer)
      Do While Not IE.readyState = READYSTATE_COMPLETE
        DoEvents
      Loop
    End Sub
     
    Sub WaitDoc(doc As HTMLDocument)
      Do While Not doc.readyState = "complete"
        DoEvents
      Loop
    End Sub
    Testé et retesté dans de nombreux contextes...
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

Discussions similaires

  1. [Article] Manipulation d'Internet Explorer via VBA
    Par Qwazerty dans le forum Contribuez
    Réponses: 116
    Dernier message: 13/02/2020, 15h47
  2. Manipulation d'Internet Explorer via VBA
    Par pegase33 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 12/04/2018, 09h49
  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