Recherche et click lien IE

Résolu/Fermé
sormick - Modifié par Whismeril le 10/12/2014 à 18:03
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 23 déc. 2014 à 18:32
Bonjour,

j'ai un code comme ceci qui m'active une fenêtre déjà ouverte d'internet explorer:

Set IE = CreateObject("InternetExplorer.Application")
Dim hwnd&, Style&, Title$, i&
hwnd = GetWindow(GetDesktopWindow(), 5)
Do While hwnd
Title = GetCaption(hwnd)
If Len(Title) Then
' Enum visible windows only
If GetWindowLong(hwnd, -16) And &H10000000 Then
If InStr(1, Title, "@rchi", 1) Then
AppActivate Title
End If
hwnd = GetWindow(hwnd, 2)
Loop
MsgBox "Aucune fenêtre ie trouvée !", 64


mais le problème c'est que je ne sais pas comment faire pour trouver et cliquer sur un lien précis sur cette fenêtre.
je précise que ce lien n'est pas un lien HTML mais un lien javascript donc il me faudrait si c'est possible qu'il me recherche le texte du lien puis une fois trouvé il me clique dessus.
je suis débutant en VBA je risque de vous demander de l'aide si je comprends pas

EDIT: Ajout de la coloration syntaxique.

3 réponses

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
11 déc. 2014 à 08:17
Bonjour,

Sans avoir accès au code-source du site en question il va nous être très difficile de te répondre.
Néanmoins, la fonction javascript que tu lances habituellement par le clic peut être lancée par VBA.

Un exemple :
- dans le code source, le lien javascript sur lequel cliquer :
<td width="300px"><a class="boutonAction" href="javascript:fcDoAction('BADGER_ES')">Badger une entrée / sortie</a></td>

- le code VBA serait :
IEDoc.parentWindow.execScript "fcDoAction('BADGER_ES');", "javascript"


Comme tu peut le voir, on exécute (execScript) la fonction javascript fcDoAction en lui passant le paramètre : ('BADGER_ES')...


0
Bonjour,

Voici le code javascript que j'ai trouvé:

javascript:fcDetailC('8232719310','11/12/14','12/12/14');

je n'ai pas tous les détails du code source.
Est ce qu'avec ce code on peut exploiter quelque chose?
et ce code que vous m'avez fourni:
IEDoc.parentWindow.execScript "fcDoAction('BADGER_ES');", "javascript"
peut être que je peux le trouver mais je ne sais même pas par ou commencer.
j'ai quand même accès au code source de la page ouverte une fois le lien clické
fonctionnerait t'il le click avec celui la?
et quel serait la variable vba la mieux adaptée pour IEDOC?
j'ai essayé dim IEDOC as htmldcoument mais ça ne marche pas.
j'ai excel 2010
0
Pa_gon Messages postés 1 Date d'inscription mardi 23 décembre 2014 Statut Membre Dernière intervention 23 décembre 2014
23 déc. 2014 à 17:22
Bonjour pijaku
je suis actuellement à la recherche d'une solution pour un VBScript qui est basé sur le code de source exactement le même que vous utilisez dans votre exemple (fcdoAction(BADGER_ES)
Je ai essayé beaucoup d'heures mais je n' arrive pas le script à exécuter le (BADGER_ES)
Il' y a toujours l'erreur "could not complete the operation due to error 80020101.
avez-vous par hasard une solution qui fonctionne?
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751 > Pa_gon Messages postés 1 Date d'inscription mardi 23 décembre 2014 Statut Membre Dernière intervention 23 décembre 2014
23 déc. 2014 à 18:32
Bonjour,

Désolé, je ne connais rien au VbScript...
0
Bonjour!!

Quelque chose de nouveau pour la question ci-dessus?

cordialement,
sormick
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
16 déc. 2014 à 19:55
Bonjour,

Effectivement je t'ai oublié...
Fais moi un rappel à ce sujet demain si je n'y pense pas.
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
Modifié par pijaku le 17/12/2014 à 10:42
Bonjour,

Je reprend tes questions une par une :

Voici le code javascript que j'ai trouvé:

javascript:fcDetailC('8232719310','11/12/14','12/12/14');

je n'ai pas tous les détails du code source.
Est ce qu'avec ce code on peut exploiter quelque chose?
et ce code que vous m'avez fourni:
IEDoc.parentWindow.execScript "fcDoAction('BADGER_ES');", "javascript"
peut être que je peux le trouver mais je ne sais même pas par ou commencer.

Le code que je t'ai donné :
IEDoc.parentWindow.execScript "fcDoAction('BADGER_ES');", "javascript"
est fonction du Code source de la page qui m'intéressait. Tu dois pouvoir adapter ce code avec le code source de ta page à toi.

à essayer :
IEDoc.parentWindow.execScript "fcDetailC('8232719310','11/12/14','12/12/14');", "javascript"


j'ai quand même accès au code source de la page ouverte une fois le lien clické
fonctionnerait t'il le click avec celui la?

Euh... Logiquement non. Le code source de la page, une fois ton bouton javascript cliqué est différent du code source de la page avant le clic. Il te faut celui de la page avant le clic...

et quel serait la variable vba la mieux adaptée pour IEDOC?
j'ai essayé dim IEDOC as htmldcoument mais ça ne marche pas.

Dim IEDoc As HTMLDocument
est le type le mieux adapté. Après, tu dis "ça ne marche pas", ça ne m'aide pas à savoir ce qui se passe...
As tu un message d'erreur? que se passe t'il concrètement?
Si cela ne fonctionne pas, peut être que ta page IE n'est pas chargée complètement. Pour cela, il te faut en attendre le chargement complet, grâce à une boucle.
Exemple :
Sub testAvecAttente()
'cocher les références :
    'Microsoft HTML Object Library
    'et
    'Microsoft Internet Controls
    
Dim maPage As New InternetExplorer
Dim maPage_Doc As HTMLDocument

maPage.navigate "http://www.commentcamarche.net/"
maPage.Visible = True
'***Boucle d'attente***
Do Until maPage.ReadyState = READYSTATE_COMPLETE: DoEvents: Loop
'A partir d'ici ta page est chargée
Set maPage_Doc = maPage.document

Dim Ident As HTMLInputElement
Dim Pass_word As HTMLInputElement
Dim Soumettre As HTMLInputElement

Set Ident = maPage_Doc.all("login")
Set Pass_word = maPage_Doc.all("pass")

'évite une erreur si déjà connecté
On Error Resume Next
Ident.Value = "toto"
Pass_word.Value = "motdepassedetoto"
Set Soumettre = maPage_Doc.all("log_in")
Soumettre.Click
On Error GoTo 0
End Sub


Tu devrais obtenir une page IE pointant sur CCM avec ce message :
Erreur

L'authentification a échoué !
Pour recevoir par courrier électronique vos données d'identification, cliquez ici!
Pour devenir membre cliquez ici!

Normal puisque le membre toto n'a pas motdepassedetoto comme mot de passe...

Par contre, sans la boucle d'attente, tu te retrouves avec une erreur VBA d'automation blabla...

Sub testSansAttente()
'cocher les références :
    'Microsoft HTML Object Library
    'et
    'Microsoft Internet Controls
    
Dim maPage As New InternetExplorer
Dim maPage_Doc As HTMLDocument

maPage.navigate "http://www.commentcamarche.net/"
maPage.Visible = True
'Do Until maPage.ReadyState = READYSTATE_COMPLETE: DoEvents: Loop
Set maPage_Doc = maPage.document

Dim Ident As HTMLInputElement
Dim Pass_word As HTMLInputElement
Dim Soumettre As HTMLInputElement

Set Ident = maPage_Doc.all("login")
Set Pass_word = maPage_Doc.all("pass")

'évite une erreur si déjà connecté
On Error Resume Next
Ident.Value = "toto"
Pass_word.Value = "motdepassedetoto"
Set Soumettre = maPage_Doc.all("log_in")
Soumettre.Click
On Error GoTo 0
End Sub


🎼 Cordialement,
Franck 🎶
0
par contre le problème c'est que je ne veux pas aller à une adresse web précise.
je dois prendre le contrôle d'une fenêtre internet explorer déjà ouverte.
car il n'y a pas de lien direct ou j'ai accès à ces liens!
voici le code que j'ai:
Dim hwnd&, Style&, Title$, i&
hwnd = GetWindow(GetDesktopWindow(), 5)
Do While hwnd
Title = GetCaption(hwnd)
If Len(Title) Then
' Enum visible windows only
If GetWindowLong(hwnd, -16) And &H10000000 Then
If InStr(1, Title, "webrecherche", 1) Then
AppActivate Title
iedoc.parentWindow.execScript "fcDoAction('BADGER_ES');", "javascript"
Exit Sub
End If
End If
End If
hwnd = GetWindow(hwnd, 2)
Loop
MsgBox "Aucune fenêtre Firefox trouvée !", 64


voilà peut être pourquoi le dim maPage_Doc As HTMLDocument
ne fonctionne pas!
(type défini par l'utilisateur non défini)
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751 > sormick
18 déc. 2014 à 07:52
Bonjour,

je dois prendre le contrôle d'une fenêtre internet explorer déjà ouverte.
Cette page Internet, même s'il s'agit d'un Intranet ou d'autre chose, possède forcément une URL, une adresse. Du style http://monsite.
Du coup, l'astuce n'est pas de contrôler la fenêtre qui est déjà ouverte, mais d'en ouvrir une nouvelle dans un objet Internet Explorer.

En faisant selon ta méthode, le code ne pourra jamais fonctionner. La seule manière d'arriver à tes fins en suivant ta méthode est d'utiliser des SendKeys (simulation de touches). Mais ça n'est pas propre.

Peut être pourrais tu me passer l'adresse du site?
0
sormick > pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024
19 déc. 2014 à 14:35
Bonjour
malheureusement je ne peux pas vous fournir l'adresse car elle est en réseau local.

En tout cas merci beaucoup à vous tous.
j'essayerais de savoir si une autre piste est possible ou non.
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751 > sormick
19 déc. 2014 à 14:44
Bonjour,
En tout cas merci beaucoup à vous tous.
Tu crois que je suis plusieurs?
En tout cas, de rien
0