Bonjour Patrick,
testé sur deux ordinateurs différents : aucun résultat ramené.
A priori j'ai l'impression que la combinaison de SendKeys et la temporisation ne semblent pas appropriées.
A+
Bonjour Patrick,
testé sur deux ordinateurs différents : aucun résultat ramené.
A priori j'ai l'impression que la combinaison de SendKeys et la temporisation ne semblent pas appropriées.
A+
a bon!!!!????
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
comment peut on faire pour modifier le nom du fichier a enregistrer dans la fenêtre de IE juste avant le dernier keybd_event VK_RETURN.
je ne trouve pas l'instruction qui permet de le faire.
merci
quelle version tu utilise ? parce que l'on en a fait pas mal
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
la 1ere version
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101 Option Explicit #If Win64 Then Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Declare PtrSafe Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long) Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Declare PtrSafe Function FindWindowEx Lib "user32" Alias "FindWindowExA" _ (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long Declare PtrSafe Function WaitMessage Lib "user32" () As Long #Else Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long) Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" _ (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long Declare Function WaitMessage Lib "user32" () As Long #End If Const VK_TAB As Long = &H9 Const KEYEVENTF_KEYUP As Long = &H2 Const VK_RETURN As Long = &HD Const VK_DOWN As Long = &H28 Public Sub CreerNavigateur() Dim oNav As SHDocVw.InternetExplorer Dim oDoc As MSHTML.HTMLDocument Set oNav = New SHDocVw.InternetExplorer oNav.Visible = True 'oNav.navigate "http://google.fr" oNav.Navigate "http://www.abcbourse.com/download/historiques.aspx" ' Attente avec timeout de 10 s 'If WaitIE(oNav, 10) Then 'If WaitIE(oNav) Then ' ' 10 s écoulées et page non chargée ' MsgBox "Time out!" 'Else Do Until oNav.ReadyState = READYSTATE_COMPLETE DoEvents Loop ' Page chargée, on continue Set oDoc = oNav.Document ' modification de la Valeur date oDoc.getElementsByName("ctl00$BodyABC$strDateDeb")(0).Value = "26/05/2015" 'la variable entre () => afficher la page et faire afficher la source rechercher la variable oDoc.getElementsByName("ctl00$BodyABC$strDateFin")(0).Value = "26/05/2016" 'modification du n° de la valeur oDoc.getElementsByName("ctl00$BodyABC$txtOneSico")(0).Value = "FR0000120222" 'activer la coche oDoc.getElementsByName("ctl00$BodyABC$oneSico")(0).Click ' Clic sur bouton telecharger oDoc.getElementsByName("ctl00$BodyABC$Button1")(0).Click 'End If '---------------- Partie ajoutée ----------------------------- '----- Attendre l'apparition du bandeau de téléchargement (car le délai d'attente peut être variable en fonction du site) pour la valider --- Dim hIEFrame As Long, hWnDbandeau As Long hIEFrame = FindWindow("IEFrame", vbNullString) 'on patiente le temps que le bandeau apparaisse Do WaitMessage hWnDbandeau = FindWindowEx(hIEFrame, 0&, "Frame Notification Bar", vbNullString) DoEvents Loop While hWnDbandeau = 0 Sleep 500 'raccourcis clavier pour ouvrir la boîte de dialogue Enregistrer sous keybd_event VK_TAB, 0, 0, 0& keybd_event VK_TAB, 0&, KEYEVENTF_KEYUP, 0& Sleep 100 keybd_event VK_TAB, 0, 0, 0& keybd_event VK_TAB, 0&, KEYEVENTF_KEYUP, 0& Sleep 100 keybd_event VK_DOWN, 0, 0, 0& keybd_event VK_DOWN, 0&, KEYEVENTF_KEYUP, 0& Sleep 100 keybd_event VK_DOWN, 0, 0, 0& keybd_event VK_DOWN, 0&, KEYEVENTF_KEYUP, 0& Sleep 100 keybd_event VK_RETURN, 0, 0, 0& keybd_event VK_RETURN, 0&, KEYEVENTF_KEYUP, 0& Sleep 100 End Sub
Tiens...revoilà pulco41 !
Les essais avec WebBrowser, Module de classe, etc c'est surtout pour tester les différentes possibilités mais si tu veux quelque chose de fiable on te le dit depuis le début : quand c'est possible passer par une requête.
Tu as un fichier qui utilise une requête au post #60.
Teste-le et tu verras.
A+
j'avais deja vu la requete sur le post 60 qui fonctionne tres bien. C'est trop compliqué pour moi vu mon niveau. Je souhaite poursuivre mon developpement par une macro que je pourrai deboguer seul.
1-Pouvez vous m'indiquer comment remplir le nom du champs dans IE avant d'enregistrer le fichier, comme demandé precedemment.
2- Comment trouver le code pour la creation d'une telle requete ?
merci d'avance
re
trop de pulco tue le pulco !
pour la requête il n'y a rien de compliqué tu prend le code en entier et tu l'applique c'est tout
pour un autre ISIN ou date tu change juste ces valeurs le reste ne change pas je te l'ai déjà dis
maintenant si tu veux avec ie et les api tu peut simplement renommer le fichier dans les téléchargements
un imputbox te demande le nom du fichier comme tu veux qu'il soit
si tu veux le déplacer avec un autre nom il faudra peut être utiliser les boites dialog fichier a la place de l'input
regarde la sub rename comme c'est simple
exemple:
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119 Option Explicit #If Win64 Then Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Declare PtrSafe Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long) Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Declare PtrSafe Function FindWindowEx Lib "user32" Alias "FindWindowExA" _ (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long Declare PtrSafe Function WaitMessage Lib "user32" () As Long #Else Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long) Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" _ (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long Declare Function WaitMessage Lib "user32" () As Long #End If Const VK_TAB As Long = &H9 Const KEYEVENTF_KEYUP As Long = &H2 Const VK_RETURN As Long = &HD Const VK_DOWN As Long = &H28 Public Sub CreerNavigateur() Dim onav As SHDocVw.InternetExplorer Dim oDoc As MSHTML.HTMLDocument Dim date1, date2, oldname As String date1 = "26/05/2015" date2 = "26/05/2016" Set onav = New SHDocVw.InternetExplorer onav.Visible = True onav.Navigate "http://www.abcbourse.com/download/historiques.aspx" ' Attente avec timeout de 10 s 'If WaitIE(oNav, 10) Then 'If WaitIE(oNav) Then ' ' 10 s écoulées et page non chargée ' MsgBox "Time out!" 'Else Do Until onav.ReadyState = 3 'READYSTATE_COMPLETE DoEvents Loop ' Page chargée, on continue Set oDoc = onav.Document ' modification de la Valeur date oDoc.getElementsByName("ctl00$BodyABC$strDateDeb")(0).Value = date1 'la variable entre () => afficher la page et faire afficher la source rechercher la variable oDoc.getElementsByName("ctl00$BodyABC$strDateFin")(0).Value = date2 'modification du n° de la valeur oDoc.getElementsByName("ctl00$BodyABC$txtOneSico")(0).Value = "FR0000120222" 'activer la coche oDoc.getElementsByName("ctl00$BodyABC$oneSico")(0).Click ' Clic sur bouton telecharger oDoc.getElementsByName("ctl00$BodyABC$Button1")(0).Click 'End If '---------------- Partie ajoutée ----------------------------- '----- Attendre l'apparition du bandeau de téléchargement (car le délai d'attente peut être variable en fonction du site) pour la valider --- Dim hIEFrame As Long, hWnDbandeau As Long hIEFrame = FindWindow("IEFrame", vbNullString) 'on patiente le temps que le bandeau apparaisse Do WaitMessage hWnDbandeau = FindWindowEx(hIEFrame, 0&, "Frame Notification Bar", vbNullString) DoEvents Loop While hWnDbandeau = 0 Sleep 500 'raccourcis clavier pour ouvrir la boîte de dialogue Enregistrer sous keybd_event VK_TAB, 0, 0, 0& keybd_event VK_TAB, 0&, KEYEVENTF_KEYUP, 0& Sleep 100 keybd_event VK_TAB, 0, 0, 0& keybd_event VK_TAB, 0&, KEYEVENTF_KEYUP, 0& Sleep 100 'keybd_event VK_DOWN, 0, 0, 0& 'keybd_event VK_DOWN, 0&, KEYEVENTF_KEYUP, 0& 'Sleep 100 'keybd_event VK_DOWN, 0, 0, 0& 'keybd_event VK_DOWN, 0&, KEYEVENTF_KEYUP, 0& 'Sleep 100 keybd_event VK_RETURN, 0, 0, 0& keybd_event VK_RETURN, 0&, KEYEVENTF_KEYUP, 0& Sleep 100 oldname = "Cotations" & Format(date1, "yyyymmdd") & ".txt" rename oldname, onav End Sub Sub rename(d, onav) Dim newname As Variant, chemin As String, ext As String, i As Long chemin = "C:\Users\" & Environ("UserName") & "\Downloads\" ext = Right(d, 4) Do DoEvents i = i + 1 If Dir(chemin & d) <> "" Then Exit Do Loop Until i = 100000 onav.Quit newname = Application.InputBox(prompt:="Modifier le nom du fichier sans extention", Type:=2) Application.Wait (Now + TimeValue("0:00:02")) Name chemin & d As chemin & newname & ext End Sub
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
merci; C'est ce que je fais deja de renommer une fois le fichier telecharger.
Y a t il moyen de le faire directement dans la fenetre de lIE juste avant de faire Telecharger sous ?
comment peut on apprendre à realiser de telle requete ?
• Oui il y a moyen pour IE et c'est simple : il suffit de réitérer ce qui est manuellement effectué !
Choix de la bonne option puis entrer le nom (voir le chemin complet) du fichier …
• Quant à la requête si mon lien indiqué au début de cette discussion avait été lu ‼
Dans le post de la troisième étape il y a un lien vers la discussion d'origine montrant l'outil d'inspection d'IE
(en fait peut importe le navigateur). Sans compter les tutoriels du Web …
_________________________________________________________________________________________________________
L'avenir n'appartient pas qu'à ceux se levant tôt mais surtout à ceux se donnant la peine de lire …
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)
bonjour marc
tu veux dire entrer le nom avec senkeys???• Oui il y a moyen pour IE et c'est simple : il suffit de réitérer ce qui est manuellement effectué !
Choix de la bonne option puis entrer le nom (voir le chemin complet) du fichier …
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
Je sais comment effectuer manuellement l'operation. J'ai simplement pas le code vba qui indique le champ a renseigner malgré toutes mes recherches
Salut patricktoulon,
Peux tu nous expliquer comment fonctionne ton fichier que tu as posté en #60 ?
As tu des sources ?
Afin de pouvoir comprendre comment cela fonctionne afin de pouvoir se dépanner seul le cas échéant.
Merci ;-)
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)
a oui !! je te crois moi aussi j'en ai des vieux codes comme ca
mais l'homme de Cro-Magnon n'a pas été la dernière évolution de l'homme tu sais !....
tu imagine un nom avec des caractères particulier et des nombres
perso!!
a utiliser la solutions des apis comme il le fait j'utiliserait les api findwindowex pour trouver le handle du textbox de la fenêtre
peut être avec enumchild aussi
d'autant plus que je trouve cela completement absurde d'essayer de manipuler encore une fenêtre même si la trajectoire "download" devrait être changée alors qu'il suffi de :
1 déterminer le nouveau nom en début de macro dans une variable
2 un do/loop sur dir et nom du fichier téléchargé
3 soit name oldnom as newnom
soit la fonction move
enfin pour moi ce serait plus propre qui a faire un input ou un getfolder pour avoir un dossier particulier
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
patricktoulon a proposé différents fichiers mais pas celui du post #60...ceci dit il peut t'expliquer la procédure à suivre.Salut patricktoulon,
Peux tu nous expliquer comment fonctionne ton fichier que tu as posté en #60 ?
As tu des sources ?
Afin de pouvoir comprendre comment cela fonctionne afin de pouvoir se dépanner seul le cas échéant.
Merci ;-)
Pour construire une requête il te faut commencer par comprendre :
- comment utiliser l'objet XMLHttpRequest : voir ici
- comment utiliser l'outil de développement de ton navigateur : concernant IE 11 voir ici pour l'outil et là pour l'analyse du trafic réseau.
Si tu utilises un autre navigateur le principe est le même (fais une recherche sur le Web).
L'onglet "Réseau" de l'outil de développement va te permettre de récupérer les entêtes, la méthode (Get ou Post) et éventuellement le corps de message utilisés par la requête pour l'affichage de la page Web.
Tu pourras ensuite les utiliser dans la construction de ta requête via l'objet XMLHttpRequest.
Une fois ces informations générales comprises pose des questions précises sur ce qui te manque pour pouvoir construire ta requête.
A+
re
bonne lecture !!
pour ma part comme beaucoup d'autre participants sur ce sujet et dieu sait combien de fois il a été déterré
il y aura toujours a étudier au cas par cas
ca fait quand même 3 ans que marc et moi traitons souvent ce problème et même aujourd'hui on a pas encore une fonction véritablement universel
il semblerait tout de même que pour IE on ai enfin quelque chose d'assez compatible avec all version (Window/IE) pour la gestions d'attente du bandeau de téléchargement
la voici
dans la fonction les deux variables sont injectées vierges
pour le8
si hwndIE8 c'est 3 touche tab puis entrer' enregistrement
sinon c'est 2 touche tab puis entrer 'enregistrement
1 tab en moins pour ouvrir
davido le show window je le met a 9 ca active le bandeau lui même et l'affiche a sa taille et propriété initial
pas de rupture chez moi c'est du 200%
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 Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long Function WaitDownloadWindowIE(hwndIE8, hwndIEedge) As Boolean Dim HieFrame As Long, res As Long res = 0 HieFrame = FindWindow("IEFrame", vbNullString) Do DoEvents i = i + 1 hwndIE8 = FindWindow(vbNullString, "Téléchargement de fichiers") 'recherche du handle de la fenetre de telechargement IE 8 et celle avec le webbrowser hwndIEedge = FindWindowEx(HieFrame, 0&, "Frame Notification Bar", vbNullString) 'recherche du handle de la fenetre de telechargement IE edge res = hwndIEedge + hwndIE8 Loop While res = 0 Or i = 10000 ShowWindow hwndIEedge, 9 If res = 0 And i = 1000 Then WaitDownloadWindowIE = False ElseIf res <> 0 Then WaitDownloadWindowIE = True End If End Function
que ce soit avec IE et PLUS ou un Web browser dans un userform
pour être plus précis pour l'argument de showwindow
Constante Valeur Définition SW_HIDE 0 Cache la fenêtre et en active une autre. SW_MAXIMIZE 3 Agrandit la fenêtre. SW_MINIMIZE 6 Réduit la fenêtre et active la prochaine (dans l'ordre des tâches windows). SW_RESTORE 9 Active et affiche la fenêtre à sa taille et position initiales. SW_SHOW 5 Active et affiche la fenêtre. SW_SHOWMAXIMIZED 3 Active et agrandit la fenêtre. SW_SHOWMINIMIZED 2 Active et réduit la fenêtre. SW_SHOWNA 8 Identique à SW_SHOW sauf que la fenêtre n'est pas activée.
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
salut marc
test ca et ensuite met IE .visible =false
et relance le
j'ai bloqué la touche enter pour que tu puisse voir
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99 Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long Private Declare Function SWL Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long Private Declare Function GetDesktopWindow Lib "user32" () As Long Private Declare Function BringWindowToTop Lib "user32" (ByVal hwnd As Long) As Long Function WaitDownloadWindowIE(reg, IE) Dim HieFrame As Long, res As Long, hwndIE8, hwndIEedge, sttr2 sttr2 = Space$(120) Dim sttr As String * 255 res = 0 HieFrame = FindWindow("IEFrame", vbNullString) Do DoEvents i = i + 1 hwndIE8 = FindWindow(vbNullString, "Téléchargement de fichiers") 'recherche du handle de la fenetre de telechargement IE 8 et celle avec le webbrowser hwndIEedge = FindWindowEx(HieFrame, 0&, "Frame Notification Bar", vbNullString) 'recherche du handle de la fenetre de telechargement IE edge res = hwndIEedge + hwndIE8 Loop While res = 0 Or i = 10000 'transformer le bandeau en fenetre windows avec tout ses attributs If IE.Visible = False Then SWL hwndIEedge, -16, &H94CF0080 ' on ajoute tout les attribut (bouton(min,max),elasticité) ShowWindow hwndIEedge, 3: ShowWindow hwndIEedge, 9 'il faut deplacer de 1 mili pour que l'effet des attributs soit efectué alors on l'agrandi et remet a l'initiale SetWindowPos hwndIEedge, 1, 100, 100, 800, 150, 0 ' on possitionne la fenetre SetParent hwndIEedge, GetDesktopWindow ' on change le parent pour le desktop ' resultat la fenetre est maintenant completement formée (attributs) et en dehors de la fenetre IE 'ce qui peut nous permettre de tourner avec IE non visible 'SetForegroundWindow hwndIEedge ShowWindow hwndIEedge, 9 End If If res = 0 And i = 1000 Then WaitDownloadWindowIE = False ElseIf res <> 0 Then BringWindowToTop hwndIEedge: ShowWindow hwndIEedge, 9 Sleep 200 Set wshShell = CreateObject("WScript.Shell") With wshShell Sleep 100: .SendKeys "{tab}" ' un tab pour selectionner "ouvrir"(ie9 et W.xP.sp3 et plus ) If IE.Visible = False Then Sleep 100: .SendKeys "{tab}" ' le premier tab donnant juste le focus a la fenetre on en ajoute 1 If hwndIE8 <> 0 Then: .SendKeys "{tab}" 'il y a un TAB de plus pour la fenetre de telechargement IE 8 If reg = True Then: Sleep 100: .SendKeys "{tab}" ' on ajoute un TAB pour le mode telecharger 'Sleep 500: .SendKeys "{enter}" ' on valide End With End If 'Sleep 1000: IE.Quit End Function Sub test6() tim = Time Dim odoc As Object, URL As String, date1, date2, reg As Boolean, fName As String Dim hwndIEedge As Long, hwndIE8 As Long date1 = "26/05/2015" date2 = "26/05/2016" reg = True fName = "Cotations" & Format(date1, "yyyymmdd") & ".csv" URL = "http://www.abcbourse.com/download/historiques.aspx" Set IE = CreateObject("internetexplorer.application") IE.Visible = True IE.Navigate URL Do: DoEvents: Loop While IE.ReadyState < 3 'Or ie.busy Do: Loop Until IE.Document.ReadyState = "complete" ' Page chargée, on continue Set odoc = IE.Document ' modification de la Valeur date odoc.getElementsByName("ctl00$BodyABC$strDateDeb")(0).Value = date1 'la variable entre () => afficher la page et faire afficher la source rechercher la variable odoc.getElementsByName("ctl00$BodyABC$strDateFin")(0).Value = date2 'modification du n° de la valeur odoc.getElementsByName("ctl00$BodyABC$txtOneSico")(0).Value = "FR0000120222" 'activer la coche odoc.getElementsByName("ctl00$BodyABC$oneSico")(0).Click 'combobox du choix de format de sortie odoc.getElementsByName("ctl00$BodyABC$dlFormat")(0).selectedIndex = 4 ' Clic sur bouton telecharger odoc.getElementsByName("ctl00$BodyABC$Button1")(0).Click WaitDownloadWindowIE False, IE '***************************************************************** Exit Sub ' on fait une boucle d'attente du fichier dans le dossier des télechargments pour pouvoir fermer IE If reg = True Then Sleep 300 Do F = F + 1 DoEvents fermetureIE8 = Dir("C:\Users\" & Environ("UserName") & " \Documents\" & fName) = "" ' pour Ie 8 ou webbroser fermetureIE = Dir("C:\Users\" & Environ("UserName") & " \Downloads\" & fName) = "" ' pour ie edge Loop Until fermetureIE = True Or fermetureIE8 = True Or F = 100000 'Sleep 100 If fermetureIE = True Then IE.Quit ' on ferme ie quand le fichier est repéré dans le dossier Set IE = Nothing ' on vide la variable IE response = MsgBox(" ouvrir le Dossier des téléchargement ", vbYesNo, "Ouverture du fichier") ' proposition d'ouverture du dossier des telechargements If response = vbYes Then Shell Environ("WINDIR") & "\explorer.exe " & "C:\Users\" & Environ("UserName") & "\Downloads", vbNormalFocus Else Sleep 10000 If Not IE Is Nothing Then IE.Quit ' si reg = false on pause le temps de laisser le fichier s'ouvrir et on ferme IE End If End Sub
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
1er essai : rien ne se passe dans la page, au bout de 30 secondes je ferme IE, message d'erreur sur la boucle
Do: Loop Until IE.Document.ReadyState = "complete" … Là j'aurais placé un DoEvents.
2ème essai (sans rien modifier) : tout se passe bien jusqu'au bandeau mais jamais le bouton Ouvrir est cliqué …
Mais côté VBE le code a terminé son exécution …
Dans le doute, je ferme Excel, nettoie les fichiers temporaires puis copie ton code dans un nouveau classeur :
soit il ne se passe rien, soit la procédure s'arrête sur l'affichage du bandeau, passant à travers la fonction …
Je testerais sur une deuxième configuration - mon code fonctionnant toujours avec cette page - mais il faudrait d'abord mieux
tenter de t'accorder avec David car vous êtes certainement plus proche du côté de vos configurations.
Sinon pour un autre besoin avec un site au demeurant plutôt "space", le WebBrowser fonctionne bien
mais certes sans avoir le besoin de simuler des touches …
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)
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager