Salut,
j'ai essayé ce que tu m'as dis et il me crée la même erreur :(
Je suis passé par des sendkeys pour obtenir ce que je veux, mais c'est pas terrible....
Je ne comprends pas pourquoi ca ne fonctionne pas :cry:
Version imprimable
Salut,
j'ai essayé ce que tu m'as dis et il me crée la même erreur :(
Je suis passé par des sendkeys pour obtenir ce que je veux, mais c'est pas terrible....
Je ne comprends pas pourquoi ca ne fonctionne pas :cry:
Salut
Au risque de paraître lourd et ennuyeux, sans le source, c'est pas facile de savoir ou est l'erreur.
Je vais essayer de vérifier pour le coup de la frame, l'élément n'est peut être pas accessible directement.
[Edit]
Bon je confirme, contrairement a ce que j'ai dis plus haut, le iframe cache les composants qu'il contient (enfin peut cacher, visiblement c'est une option si j'ai bien compris - contentdocument - j'approfondirais en temps utiles :)).
Essai ce code
[/Edit]Code:
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 connexion() Dim IE As InternetExplorer Dim IEdoc As Object Dim DOCelement As Object Set IE = New InternetExplorer IE.Visible = True IE.Navigate ("10.0.0.1/youou/etc3.html") 'attente de fin de chargement Do Until IE.ReadyState = READYSTATE_COMPLETE DoEvents Loop Set IEdoc = IE.document 'On recherche les frames contenues dans le document Set DOCelement = IEdoc.getElementsByTagName("iframe") 'On selectionne la premiere (tu devras chercher la bonne s'il y en a plusieurs Set IEdoc = DOCelement(0) 'Ensuite on charge la page que la frame reference 'Ici j'utilise IE, mais rien ne t'empeche de créer une autre fenetre Ie et de travailler dedans pour garder ta page principale chargé IE.Navigate IEdoc.src 'attente de fin de chargement Do Until IE.ReadyState = READYSTATE_COMPLETE DoEvents Loop 'On pointe maintenant sur le Document de notre nouvelle page Set IEdoc = IE.document 'Ici tu continues le code Set DOCelement = IEdoc.all("MOIS") DOCelement.Value = "02" '.... End Sub
++
Qwaz
hello,
merci pour ton aide Qwazerty, malheureusement je pense que tu as parfaitement raison, il va être difficile de règler le problème sans être positionné devant l'ordinateur.
J'ai testé ton code, au départ une frame après l'autre puis après j'ai fais une boucle (au cas ou). Mais soit l'erreur persiste (1er cas), soit la boucle tourne sans s'arreter. Je t'ai remis le code, que j'ai annoté avec les valeurs des variables pendant que la macro tourne, ce que je trouve bizarre c'est que le IEdoc est toujours égale à nothing.
J'ai tenté en remplaçant cette ligneCode:
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 Sub connexion2() Dim IE As InternetExplorer Dim IEdoc As Object Dim DOCelement As Object Set IE = New InternetExplorer 'IE = Microsoft Internet explorer IE.visible = True IE.Navigate ("http://10.0.0.01/truc/Framegr1.html") 'attente de fin de chargement Do Until IE.ReadyState = READYSTATE_COMPLETE DoEvents Loop Set IEdoc = IE.Document 'IEdoc = Nothing déjà la bizarre nan ? 'On recherche les frames contenues dans le document Set DOCelement = IEdoc.getElementsByTagName("iframe") 'DOCelement = '[object]' 'On selectionne la premiere (tu devras chercher la bonne s'il y en a plusieurs Do 'boucle pour déterminer la bonne frame Set IEdoc = DOCelement(i) i = i + 1 Loop Until Not IEdoc Is Nothing 'Ensuite on charge la page que la frame reference 'Ici j'utilise IE, mais rien ne t'empeche de créer une autre fenetre Ie et de travailler dedans pour garder ta page principale chargé IE.Navigate IEdoc.src 'Ca bloque la "erreur d'execution 91, variable ou bloc de With non definie 'attente de fin de chargement Do Until IE.ReadyState = READYSTATE_COMPLETE DoEvents Loop 'On pointe maintenant sur le Document de notre nouvelle page Set IEdoc = IE.Document 'Ici tu continues le code Set DOCelement = IEdoc.all("MOIS") DOCelement.Value = "02" '.... End Sub
par cette ligneCode:Set DOCelement = IEdoc.getElementsByTagName("iframe")
bon j'essaye hein.Code:Set DOCelement = IEdoc.getElementsByTagName("Frame")
Ca va un peu plus loin si je met DOCelement à 1 mais après ca bug à nouveau (à 0 ca ne fonctionne pas, à plus de 1 ca tourne en boucle.) , mais maintenant c'est le DOCelement qui est égale à nothing...
Comme je le disais hier, je suis passé par des sendKeys, ca fonctionne presque jusqu'au bout, sauf que je dois normalement cliquer sur un bouton executer, et la je n'arrive pas à l'atteindre, probleme identique à auparavant....
Salut
si IEDoc est nothing inutile de chercher a debuger le reste du code. Mets un espion sur la variable IE et regarde dans Document si tu as du contenu.
++
Qwaz
La par contre je ne sais pas trop comment faire
IEdoc avant le passage du iframe = 'object', apres il est égale a nothing puisque DOCelement = nothing
Salut
Ha d'accord, je n'avais pas compris ça, je pensais que c’était des le début qu'IEDoc était vide.
Tu dois chercher dans ton code source de page, tu as trouver la ligne
remonte dans l'arborescence de ta page (toujours dans le code source) pour trouver l'intitulé du supposé "iframe" qui le contient.Code:<INPUT NAME=MOIS TYPE=text SIZE=2 VALUE = >
J'ai essayé de trouver un site ayant une structure se rapprochant de ce que tu explique pour pouvoir faire des essais, mais je n'ai rien trouvé.
A quel endroit? Le fait de mettre 0 ou 1 ou 2... ça représente un élément de la collection contenu dans DocElement.Citation:
Ça va un peu plus loin si je met DOCelement à 1 mais après ca bug à nouveau
En détail:
On dresse une collection d'élément ayant pour tag iframeCode:Set DOCelement = IEdoc.getElementsByTagName("iframe")
x représente l'item de la collection que tu veux utiliser. Si par exemple tu as 3 iframes dans ta page, la collection DocElement contient 3 items numérotés de 0 à 2. Donc si tu mets x=1, tu fais référence au 2ème iframe de la page.Code:Set IEdoc = DOCelement(x)
Ps: Donc ta boucle ne va pas, soit elle s'arrête au premier élément de la collection (0), soit elle boucle à l'infini si la collection est vide (Docelement = nothnig)
Ensuite si IEDoc est nothing inutil d'aller plus loin, il faut que tu pointes la bonne frame.
ici on lance le contenu de la frame comme étant la page principale, permettant ainsi d'avoir accès à son contenu, si tous ce passe bien, le contenu de ton explorateur doit changer et te montrer une partie de la page. Si cette partie de page ne te montre pas ton élément MOIS, il faut chercher dans un autre frame de ta page d'accueil.Code:IE.Navigate IEdoc.src
++
Qwaz
Hello,
bon je teste encore par rapport à ce que tu me dis. Après recherche je retrouve
en en tete
<frameset rows="25%,*">
<frame scrolling="NO" src="/youhou/servlet/truc1Servlet" name="frame1">
si ca aide cette ligne est dans
<tbody>
<tr>
auparavant des <script> apparaissent (avec du javascript)
je precise que IEdoc et DOCelement sont tous les deux égale à 'object' avant ce passage
ou i peut être être égale à 0,1,2,3.... il est toujours égale à 'nothing'Code:Set IEdoc = DOCelement(i)
si je teste
ca passe mais ca bloque apresCode:Set IEdoc = DOCelement
Apres j'ai juste essayé de faire ceciCode:IE.Navigate IEdoc.src
Il continue bien mais il me met une page "impossible d'afficher la page lors du src ("/youhou/servlet/truc1Servlet")Code:Set DOCelement = IEdoc.getElementsByTagName("Frame")
le DOCelement est en 'permission refusée' en 0
le DOCelement est en 'nothing en 1, mais tout fonctionnne et il continue et bloque seulement sur
ou il me met erreur d'exxecution 91Code:DOCelement.Value = "02"
Pour info, j'ai essayé avec frame1, frame2 au lieu de iFrame, mais rien n'y fait...
J'ai clairement l'impression de m'être attaqué à un problème qui touche plus du html que du vba :lol:
Salut
Alors
Visiblement au vu du code HTML, il semblerait que "frame" soit en effet la bonne valeur a rechercher via GetElementByTagName.
Mets un point d’arrêt après cette ligne et place un espion (clique droit ajouter un espion) sur la variable DOCelement pour voir ce qu'elle contient.
Vu qu'on travail avec un objet plutôt qu'avec le type adapté, ce doit être ce qui explique l'erreur avec DOCelement(x), si un seul frame est trouvée (je suppose) au lieu de placer un tableau de frame, il place directement la frame dans la variable DOCelement.Code:Set DOCelement = IEdoc.getElementsByTagName("Frame")
Donc après cette ligne essai de mettre
Si la page se charge avec tes champs Moi Année c'est bon signe, sinon je commence a douter :)Code:
1
2IE.Navigate DOCelement.src '+Boucle d'attente
++
Qwaz
J'ai fait ce que tu m'as dis, la variable DOCelement est bien égale à 'object' (la barriere espion me donne type : Objetct/DispHTMLelementcollection) et maintenant j'ai une erreur 438 propriété ou méthode non gérée par cet objet.
Salut
Alors si c'est un DispHTMLelementcollection, essai de faire
++Code:DOCelement("MOI").value = "2"
Qwaz
Bonjour,
Avant IE 7, il était possible d'écrire une URL comme ceci:
http://user:password@www.developpez.net
Cette fonctionnalité a été supprimée mais...
Dans le document suivant:
http://support.microsoft.com/kb/834489
Il y a des infos pour inclure user et password par programmation.
Bonne lecture.
Salut AlainTech
Je prendrais le temps de lire cette article, il semble intéressant.
Par contre à première vue, je doute qu'il soit applicable en ce qui concerne l'identification user/login, en effet l'accès demandé est un accès "windows" pour confirmer que l'utilisateur a un droit d'accès à internet.
En revanche il serait peut être intéressant, et c'est peut être à ce titre là que tu as fournis ce lien, d'étudier comment se comporte l'adresse internet en fonction des mois et année choisi, afin de savoir comment ces informations sont "codées" dans l'adresse de la page.
++
Qwaz
Hello Qwazerty,
j'ai tenté ce que tu me demandais, mais pas de succès malheureusement (j'ai changé par contre "MOI" par "MOIS")
Docelement est bien object mais il n'inscrit rien et plante toujours au meme endroit
Salut
Essai de faire un screen shot du contenu de l'espion sur DocElement.
Vis à vis du lien d'AlainTech (que je n'ai toujours pas lu), choisi un mois et une années, valide le choix. Une fois la page chargée, regarde le contenu de la barre d'adresse. Essai de comprendre comment celle ci est construite ex: 10.0.0.1/youou/07/2011 pour Juillet 2011. si tu ne vois pas de concordance, met nous une adresse en supprimant le nom de domaine.
++
Qwaz
Le serveur est indisponible pour le moment (je n'accède plus à la page)
Dès que ça se relance je teste le tout avec les espions