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 :

Problème de click sur lien dans un webbrowser ! [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 16
    Points : 7
    Points
    7
    Par défaut Problème de click sur lien dans un webbrowser !
    Bonjour à tous !

    J'ai beau chercher tous les moyens possibles, je n'arrive pas à solutionner le problème suivant :
    J'ai lancé un site web dans un webbrowser, puis je veux cliquer sur un lien contenu dans celui-ci. J'ai donc utilisé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim myLink As HtmlElement
    For Each myLink In WebBrowser1.Document.Links
        If myLink.innertext.Contains("Recap DM") Then
            WebBrowser1.Navigate (myLink.GetAttribute("href"))
        End If
    Next
    ... Dans un Private Sub. Ce code a l'air de bien fonctionner, mais j'ai le "HTMLElement" n'est pas du tout reconnu ("type définit par l'utilisateur non définit").

    => Savez-vous s'il faut déclarer quelque chose de spécial au préalable pour utiliser ce "HTMLElement" ?
    Je ne sais pas s'il y a un lien, mais dans la même macro, j'ai des "getElementById" qui fonctionnent nickel ! Une idée ?

  2. #2
    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,

    activer Microsoft HTML Object Library …

    _________________________________________________________________________________________________________
    Je suis Paris, Nice, Bruxelles, Charlie, …
    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)

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 16
    Points : 7
    Points
    7
    Par défaut
    J'avais bien activé cette librairie auparavant, mais il semble qu'elle avait disparu de la liste !
    J'ai dû la réinstaller, fermer Excel, puis réessayer, mais ça ne fonctionne toujours pas...Pourtant cette librairie et celle de Microsoft Internet controls sont bien affichees et selectionnees a present !

  4. #4
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim myLink
     For Each myLink In WebBrowser1.Document.Links
        If myLink.innertext.like "*" & "Recap DM" &"*"  Then  WebBrowser1.Navigate myLink.href
        End If
     Next
    ou bien encore

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    dim mesA
    with webbrowser1
    set mesA=.document.getelementsbytagname("a")
    for i= 0 to mesA.length
    if mesA(i).innertext like "*" & "Recap DM" &"*"  Then .navigate mesA(i).Href:exit for 
    next
    end  with
    ou bien encore

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    dim elem
    with webbrowser1
    for each elem in .document.all
    if elem.innertext like "*" & "Recap DM" &"*"  Then .navigate elem.Href:exit for
    next
    end with
    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

  5. #5
    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
    Citation Envoyé par Atomix85 Voir le message
    Pourtant cette librairie et celle de Microsoft Internet controls sont bien affichees et selectionnees a present !
    C'est donc une erreur dans la déclaration de la variable !

    La déclarer en Object dans un premier temps puis vérifier son type exact durant l'exécution via la fenêtre des Variables locales.

    Sinon tester sur un autre ordinateur …
    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)

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 16
    Points : 7
    Points
    7
    Par défaut
    Bon, déjà merci beaucoup à vous deux !
    Ensuite voici le résultat de l'application de tes différents codes dans ma macro, Patrick :
    - Le 1er me renvoie "Erreur de syntaxe" sur la 2eme ligne
    - Le 2eme FONCTIONNE NICKEL !!!
    - Le 3eme me renvoie l'erreur : "erreur 438 : Propriété ou méthode non gérée par cet objet" sur la 4eme ligne (sur ".navigate elem.href").

    Ce qu'il faut retenir, c'est que la solution est trouvée !! Merci encore, sujet résolu

  7. #7
    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 et oui le 3 eme je sais pourquoi il plante
    sui-je bete hein!!!

    en effet c'est un peu traitre la methode innertext

    exemple si tu a dans une page web
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <P><a Href="http....">toto</a></p>
    et que je fait
    msgbox .getelementsbytagname("p")(0).innertext
    il va me donner "toto" forcement
    donc pour la 3 eme ceci devrait marcher
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    dim elem
    with webbrowser1
    for each elem in .document.all
    if  elem.tagname="a" and elem.innertext like "*" & "Recap DM" &"*"  Then .navigate elem.Href:exit for
    next
    end with
    voila voila vraiment des fois j'ai le cerveau en marmelade

    re
    et pour l'erreur du premier c'est de ma faute j'ai eu une crise de vache folle sur la touche"." il faut supprimer le point devant "like"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If myLink.innertext like "*" & "Recap DM" &"*"  Then  WebBrowser1.Navigate myLink.href
    et voila c'est fini
    tiens ca me rappelle une chanson ca !!!
    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

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 16
    Points : 7
    Points
    7
    Par défaut
    Patrick, Marc, je reviens sur ce sujet car les différentes solutions fonctionnent très bien, mais je ne peux utiliser l'une d'entre elles qu'une fois dans ma macro.

    Je m'explique :
    Lorsque j'essaie de remettre ce bout de code plus bas, ou de faire une boucle comme celle-ci :

    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
     
    '############# LANCEMENT + EXPORT DES 2 RECHERCHES PRE-ENREGISTREES #########################
    Dim x As String, y As Integer
    x = "OM"
    y = 1
     
    Do Until x = "sortir"
        'fait patienter la macro le temps que la page s'ouvre
        seconds = 5
        now = Timer()
        Do: DoEvents
        Loop While (Timer < now + seconds)
        now = Empty
        seconds = Empty
     
        'recherche et active le lien qui m'interesse
        Label1.Caption = "LANCEMENT DE LA RECHERCHE DES " & x & "..."
        Dim myLink
        For Each myLink In WebBrowser1.document.links
        If myLink.innerText Like "*" & "Recap_" & x & "*" Then
        WebBrowser1.navigate myLink.href
        End If
        Next
     
        'fait patienter la macro le temps que la page s'ouvre
        seconds = 5
        now = Timer()
        Do: DoEvents
        Loop While (Timer < now + seconds)
        now = Empty
        seconds = Empty
     
        'pour lancer le téléchargement automatique de l'exportation de la recherche
        Label1.Caption = "EXPORTATION des " & x & ", veuillez enregistrer le fichier svp..."
        WebBrowser1.document.parentWindow.execScript "AGILE.util.ExportSearch({opcode:'exportQuery', xtraArgs:'&reportExportType=3'})", "JavaScript"
     
        'fait patienter la macro le temps que la page s'ouvre
        seconds = 5
        now = Timer()
        Do: DoEvents
        Loop While (Timer < now + seconds)
        now = Empty
        seconds = Empty
     
        If y = 1 Then x = "DM" Else: x = "sortir"
        y = y + 1
     
        myLink = Empty
        document = Empty
    Loop
    ... le lien pour "recap_OM" s'active tres bien, sans problème.
    Par contre, lors de la 2eme passe, pour activer le lien "recap_DM", le lien est bien trouvé et stocké dans le "myLink", mais la macro plante sur la ligne : "WebBrowser1.navigate myLink.href", avec l'erreur "impossible de telecharger erreur non specifiée" ! Vous avez une idée ?

  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
    "impossible de télécharger erreur non spécifiée
    tu ne peux plus lancer un téléchargement de fichier depuis un webbroser depuis IE 11 le bandeau est refusé par l'e composant

    edit:
    apres si c'est simplement un changement de page ton erreur est grosse comme une maison

    dans ta boucle il n'y a aucune gestion d'atente entre les page il est evident que pour la 2,3,4,etc... ca plante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    If myLink.innerText Like "*" & "Recap_" & x & "*" Then
       do:doevents:loop until  WebBrowser1.readystate=4 'or WebBrowser1.busy
     WebBrowser1.navigate myLink.href
        End If
    il y a des chose évidentes quand même non tu crois pas ?
    si tu en a une pour le depart pour les autres pages c'est pareil
    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
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 16
    Points : 7
    Points
    7
    Par défaut
    C'est bien pour cette raison que j'avais mis les bouts de codes d'attente suivants :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    'fait patienter la macro le temps que la page s'ouvre
        seconds = 5
        now = Timer()
        Do: DoEvents
        Loop While (Timer < now + seconds)
    De plus, le message d'erreur s'affiche lorsque je tente de cliquer sur un lien, et pas quand je veux telecharger un document !

    Ca ne doit pas être grand chose, car ça fonctionnait avant...

  11. #11
    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
    les boucles avec un timer peuvent fonctionner sur un pc mais pas sur un autre
    c'est du au pc et au débit de ton FAI
    don le wait readystate est lui un valeur sure
    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

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 16
    Points : 7
    Points
    7
    Par défaut
    Merci Patrick pour cette info, il faudra que j'approfondisse cela.
    Par contre, l'erreur intervient même quand je passe la macro en pas à pas (F8), c'est pourquoi je ne pense pas que ce soit lié aux délais d'attente...

    Après avoir fait l'essai avec le code fourni plus haut (la boucle d'attente de Patrick dans la recherche de lien), je me retrouve avec la macro bloquée sur le "Do: DoEvents" de la recherche de lien, qui tourne en boucle...

    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
    '############# LANCEMENT + EXPORT DES 2 RECHERCHES PRE-ENREGISTREES #########################
    Dim x As String, y As Integer
    x = "OM"
    y = 1
     
    Do Until x = "sortir"
        'fait patienter la macro le temps que la page s'ouvre
        seconds = 5
        now = Timer()
        Do: DoEvents
        Loop While (Timer < now + seconds)
        now = Empty
        seconds = Empty
     
        'recherche le lien qui m'interesse
        Label1.Caption = "LANCEMENT DE LA RECHERCHE DES " & x & "..."
        Dim myLink
        For Each myLink In WebBrowser1.document.links
        If myLink.innerText Like "*" & "Recap_" & x & "*" Then
           Do: DoEvents
           Loop Until WebBrowser1.readyState = 4 'Or WebBrowser1.Busy
        WebBrowser1.navigate myLink.href
        End If
        Next
     
        'fait patienter la macro le temps que la page s'ouvre
        seconds = 5
        now = Timer()
        Do: DoEvents
        Loop While (Timer < now + seconds)
        now = Empty
        seconds = Empty
     
        'pour lancer le téléchargement automatique de l'exportation de la recherche
        Label1.Caption = "EXPORTATION des " & x & ", veuillez enregistrer le fichier svp..."
        WebBrowser1.document.parentWindow.execScript "AGILE.util.ExportSearch({opcode:'exportQuery', xtraArgs:'&reportExportType=3'})", "JavaScript"
     
        'fait patienter la macro le temps que la page s'ouvre
        seconds = 5
        now = Timer()
        Do: DoEvents
        Loop While (Timer < now + seconds)
        now = Empty
        seconds = Empty
     
        If y = 1 Then x = "DM" Else: x = "sortir"
        y = y + 1
     
        myLink = Empty
    Loop
    Le lien est bien trouvé, puisqu'Excel rentre dans la boucle "If myLink.innerText Like "*" & "Recap_" & x & "*" Then", mais après pas moyen de lui faire lancer le lien...

  13. #13
    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
    Non!!!
    la boucle do loop doit non seulement remplacer ton while timer et aussi dans le if
    en gros il ne doit plus y avoir de timer dans ton code
    la ton while sert a rien puisque la première c'est évident qu'il est trouvé
    avant de te lancer la dedans reprends les base du tuto de quazerty qui s'applique aussi au webbrowser
    la c'est du n'importe quoi ca fonctionne quand ca veut bien et c'est normal en fonction du débit (bande passante) au moment ou tu lance ta macro
    bref sur ce chemin c'est sans moi j'ai pas envie de galérer encore pendant des jours comme c'est arrivé avec d'autre demandeurs

    prend le tuto et digère le :après tu fera ta macro
    en l'état vu le style de code j'y mettrais même pas les mains
    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

  14. #14
    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
    Cette discussion étant marquée comme résolue, peu s'y arrêteront …

    Ensuite un If est une structure conditionnelle et n'a aucun rapport avec une boucle !
    Et qui plus est la condition de ce If n'est pas retrouvée dans la condition de sortie de la boucle Do Loop,
    où est donc le rapport ?! Du genre : si la voiture est rouge, alors j'attends le beau temps

    Ne pas oublier la fenêtre des Variables locales, cela peut aider à comprendre.

    Astuce : avant d'utiliser l'objet Webbrowser, piloter IE normalement comme dans le tutoriel.
        Une fois le code fonctionnel, tenter l'adaptation vers le Webbrowser
        Edit : en fait tout comme Patrick !
    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)

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

Discussions similaires

  1. Problème de click sur un lien hypertexte
    Par hachimuto dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 05/02/2014, 13h06
  2. Problème EventHandler Click sur LinkButton
    Par brazilia28 dans le forum ASP.NET
    Réponses: 14
    Dernier message: 28/04/2008, 12h32
  3. Problème de click sur la Form.
    Par Sixdeux dans le forum Windows Forms
    Réponses: 6
    Dernier message: 23/05/2007, 18h00
  4. Click sur lien et redirection [noob]
    Par Trystan dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 20/04/2006, 11h26

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