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 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190
| Option Explicit
Sub EURONEXT_ALL_EQUITIES()
'cette sub va interroger le serveur pour récupérer toutes les données du jour à l'instant t
'Il faut activer la bibliothèque Microsoft WinHTTP Service
'il faut tout d'abord récupérer le NBPAGES en envoyant une 1° requête pour cela
Dim i As Long, ARGTS_send As String, Fso As Object
Dim NBPAGES As Integer, RequeteVBS As String, SC As String, ARGsending As Integer, Sh As Object
Dim DemandeFichier As Object, URL As String
Dim FSys As Object, MonFic
Dim texte As String
NBPAGES = 0
Set DemandeFichier = CreateObject("Microsoft.XMLHTTP")
URL = "https://www.euronext.com/pd/stocks/data?formKey=nyx_pd_filter_values:b9301b0a52857fbdc601dbd15864fdff"
'On génère la 1 ere requête afin d'obtenir les 20 1ere lignes ainsi que le nombre de page
DemandeFichier.Open "POST", URL, False
DemandeFichier.setRequestHeader "Accept", "application/json, text/javascript, */*"
DemandeFichier.setRequestHeader "Referer", ":https://www.euronext.com/en/equities/directory"
DemandeFichier.setRequestHeader "Host", "www.euronext.com"
DemandeFichier.send "sEcho=null&iColumns=7&sColumns=&iDisplayStart=0&iDisplayLength=20&iSortingCols=1&iSortCol_0=0&sSortDir_0=asc&bSortable_0=true&bSortable_1=true&bSortable_2=true&bSortable_3=true&bSortable_4=true&bSortable_5=true&bSortable_6=true"
NBPAGES = Round(Val(Split(Split(DemandeFichier.responseText, "iTotalRecords"":")(1), ",")(0)) / 20)
'MsgBox ("Nombre de pages " & NBPAGES)
'suppression\création du répertoire response pour les fichiers DemandeFichier.responseText
On Error Resume Next
'Kill ThisWorkbook.Path & "\response\*.*"
'RmDir ThisWorkbook.Path & "\response"
'MkDir ThisWorkbook.Path & "\response"
On Error GoTo 0
creationvbs2
'CreationVBS1
RequeteVBS = ThisWorkbook.Path & "\requeteallequities.vbs"
SC = """" & RequeteVBS & """ "
For i = 0 To NBPAGES
ARGsending = i * 20 '=WScript.Arguments(1)
Set Sh = CreateObject("WScript.Shell")
Sh.Run SC & URL & " " & ARGsending
Next
End Sub
Sub creationvbs2()
Dim code As String, sending As String, Parser As String, FSys As Object, MonFic As Object
Dim ARGTS_send As String
code = code & vbCrLf & "Set DemandeFichier = CreateObject(""Microsoft.XMLHTTP"")"
code = code & vbCrLf & "DemandeFichier.Open ""POST" & """, WScript.Arguments(0), False" & vbCrLf
code = code & vbCrLf & "DemandeFichier.setRequestHeader ""Accept"", ""application/json, text/javascript, */*""" & vbCrLf & _
"DemandeFichier.setRequestHeader ""Host"", ""euronext.com""" & vbCrLf & _
"DemandeFichier.setRequestHeader ""Referer"", ""https://www.euronext.com/fr/equities-directory"""
ARGTS_send = """sEcho=null&iColumns=7&sColumns=&iDisplayStart=""" & "& WScript.Arguments(1) & " & """&iDisplayLength=20&iSortingCols=1&iSortCol_0=0&sSortDir_0=asc&bSortable_0=true&bSortable_1=false&bSortable_2=false&bSortable_3=false&bSortable_4=false&bSortable_5=false&bSortable_6=false"""
code = code & vbCrLf & "DemandeFichier.send " & ARGTS_send
code = code & vbCrLf & "str_demande_fich = DemandeFichier.responseText"
code = code & vbCrLf & "MsgBox(""iDisplayStart= "" & WScript.Arguments(1))" 'pour visualiser iDisplayStart oui monte de 20 en 20
code = code & vbCrLf & "MsgBox(""DemandeFichier.responseText = "" & str_demande_fich)" 'pour visualiser le fichier html de réponse du
'serveur => problème c'est toujours le même, soit la 1° page
'Le with suivant est inutile
With ThisWorkbook
'On copie le code dans un fichier
Set FSys = CreateObject("Scripting.FileSystemObject")
Set MonFic = FSys.CreateTextFile(ThisWorkbook.Path & "\requeteallequities" & ".vbs")
With MonFic 'Pour écrire dans le fichier texte
.write code
End With
End With
End Sub
'///////////////////////////////////////////////////////////////////////////////////////////////////////////
' CREATION DU VBS UNIQUE
'///////////////////////////////////////////////////////////////////////////////////////////////////////////
Sub CreationVBS1()
'cette sub va écrire le texte des requêtes vbs (en fait toutes les requêtes sont écrites dans un seul fichier *.vbs
Dim code As String, sending As String, Parser As String, FSys As Object, MonFic As Object
Dim ARGTS_send As String, Enreg As String
code = "dim tablo,tablo2(20,7)" & vbCrLf
code = code & "do" & vbCrLf
code = code & "b=b+1" 'en place du rupteur b qui quitte si b=10
code = code & vbCrLf & "Set DemandeFichier = CreateObject(""Microsoft.XMLHTTP"")"
code = code & vbCrLf & "DemandeFichier.Open ""POST" & """, WScript.Arguments(0), False" & vbCrLf
code = code & vbCrLf & "DemandeFichier.setRequestHeader ""Accept"", ""application/json, text/javascript, */*""" & vbCrLf & _
"DemandeFichier.setRequestHeader ""Accept-Encoding"", ""gzip , deflate""" & vbCrLf & _
"DemandeFichier.setRequestHeader ""Content-Type"", ""application/x-www-form-urlencoded; charset=UTF-8""" & vbCrLf & _
"DemandeFichier.setRequestHeader ""Content-Length"", ""231""" & vbCrLf & _
"DemandeFichier.setRequestHeader ""Cache-Control"", ""no-cache""" & vbCrLf & _
"DemandeFichier.setRequestHeader ""Accept-Language"", ""fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3""" & vbCrLf & _
"DemandeFichier.setRequestHeader ""Connection"", ""keep-alive""" & vbCrLf & _
"DemandeFichier.setRequestHeader ""Host"", ""europeanequities.nyx.com""" & vbCrLf & _
"DemandeFichier.setRequestHeader ""Pragma"", ""no-cache""" & vbCrLf & _
"DemandeFichier.setRequestHeader ""Referer"", ""https://europeanequities.nyx.com/fr/equities-directory""" & vbCrLf & _
"DemandeFichier.setRequestHeader ""User-Agent"", ""Mozilla/5.0 (Windows NT 6.0; rv:29.0) Gecko/20100101 Firefox/29.0""" & vbCrLf
ARGTS_send = """sEcho=5&iColumns=7&sColumns=&iDisplayStart=""" & "& WScript.Arguments(1) & " & """&iDisplayLength=20&iSortingCols=1&iSortCol_0=0&sSortDir_0=asc&bSortable_0=true&bSortable_1=false&bSortable_2=false&bSortable_3=false&bSortable_4=false&bSortable_5=false&bSortable_6=false"""
code = code & vbCrLf & "DemandeFichier.send " & ARGTS_send
'ici ajout de if status = 200 pour être sûr que le script revient bien
code = code & vbCrLf & "If DemandeFichier.status <>200 then MsgBox(""Pas de retour de connexion""):z =100 : MsgBox(""Quit n° "" & z):WScript.Quit 100"
code = code & vbCrLf & "str_demande_fich = DemandeFichier.responseText"
'test pour le dernier response vide
'si la réponse à cette forme il s'agit du fichier de queue qui est vide...donc inutile de le garder oui mais
'seulement dans ce cas il y a la perte du timer car dans Feuil1 il faut If comptechangement = NBPAGES + 1 Then
code = code & vbCrLf & "if str_demande_fich= ""{""""sEcho"""":""""5"""",""""iTotalRecords"""":0,""""iTotalDisplayRecords"""":0,""""aaData"""":[],""""error"""":false}"" then "
code = code & vbCrLf & "GetObject(, ""Excel.Application"").Workbooks(""" & ThisWorkbook.Name & """).Worksheets(1).Range(""B"" & WScript.Arguments(2)) = """""
'ici mise en retour d'un GetObject pour déclencher le compteur et donc le Timer, seulement cela va déclencher plage qui va déclencher cadre
'donc affichage d'une cellule violette vide...mais pour éviter cela inscription en colonne B (=colonne 2) et mise en
'code Feuil1 if Target.Column <>2 pour déclencehr le plage comme cela il n'y a plus de fond violet intempestif
code = code & vbCrLf & "Ag= true"
code = code & vbCrLf & "End If"
'par précaution mettre un rupteur pour b par exemple 10
code = code & vbCrLf & "If b>9 then"
'si erreur elle est signalée par un rapport d'erreur en colonne i
code = code & vbCrLf & "GetObject(, ""Excel.Application"").Workbooks(""" & ThisWorkbook.Name & """).Worksheets(1).Range(""I""&(WScript.Arguments(1)/20)+6 ).Value=""page "" & (WScript.Arguments(1)/20)+1 &"" = "" & b & "" essai"""
code = code & vbCrLf & "GetObject(, ""Excel.Application"").Workbooks(""" & ThisWorkbook.Name & """).Worksheets(1).Range(""A"" & WScript.Arguments(2)).Value = WScript.Arguments(1)/20"
'pour afficher le n° du script défectueux dans la cellule en colonne A
'Par contre lors de la sortie par WScript.Quit le théme du fond d'écran n'est pas perdu puisqu'il y a bien GetObject qui va déclencher le plage dans la Feuil1
code = code & vbCrLf & "WScript.Quit 1" 'WScript.Quit 1 marche mais 1 n'apaprait pas
code = code & vbCrLf & "Exit Do" 'le WScript.Quit étant actif exit do ne sert plus à rien
code = code & vbCrLf & "End If"
'ici vérification avec la condition sur code
code = code & vbCrLf & "Eg = instr(str_demande_fich, """"""error"""":true"")>0" '=> ""error"":true
'code = code & vbCrLf & "Eg = instr(str_demande_fich, ""error"""":true}"")>0" '=> error"":true} version Pat
code = code & vbCrLf & "Loop While instr(str_demande_fich, """"""error"""":true"")>0"
'ici les syntaxes pour echo:true différent mais cela dit elle ne sont pas contradictoire il va falloir vérifier si elles
'sont justes en regardant si dans les cellules du tableau de rapport il y a eu parfois des relances => valeur de b <> 1 'dans le tableau mais pas possible pour le moment car plus d'erreur de relance de retours des scripts!!!
'ici ce message ne s'affiche plus si b=10 le Wscript.Quit a fait quitter le script=>
code = code & vbCrLf & "If b=10 then MsgBox(""Script non quitté WScript.Quit 1 défectueux car pourtant instr= "" & Eg)"
code = code & vbCrLf & "resultat = Replace(DemandeFichier.responseText, ""["", vbCrLf)" & vbCrLf & _
"tablo = Split(resultat, vbCrLf)" & vbCrLf & "Z = 0" & vbCrLf & _
"For i = 2 To UBound(tablo)" & vbCrLf & _
"tablo2(Z, 0) = Split(Split(tablo(i), ""\u003e"")(1), ""\"")(0)" & vbCrLf & _
"reponse = reponse & tablo2(Z, 0)" & vbCrLf & _
"tablo(i) = Split(Split(tablo(i), ""/div\u003e"""","""""")(1), ""]"")(0)" & vbCrLf & _
"tablo2(Z, 1) = Split(tablo(i), """""","""""")(0)" & vbCrLf & _
"reponse = reponse & chr(9) & tablo2(Z, 1)" & vbCrLf & _
"tablo2(Z, 2) = Split(tablo(i), """""","""""")(1)" & vbCrLf & _
"reponse = reponse & chr(9) & tablo2(Z, 2)" & vbCrLf & _
"tablo2(Z, 3) = Split(tablo(i), """""","""""")(2)" & vbCrLf & _
"reponse = reponse & chr(9) & tablo2(Z, 3)" & vbCrLf & _
"tablo2(Z, 4) = Replace(Split(tablo(i), """""","""""")(3),"","",""."")" & vbCrLf & _
"reponse = reponse & chr(9) & tablo2(Z, 4)" & vbCrLf & _
"tablo2(Z, 6) = Replace(Split(tablo(i), """""","""""")(5), Chr(34),"""")" & vbCrLf & _
"reponse = reponse & chr(9) & tablo2(Z, 6)" & vbCrLf & _
"On Error Resume Next" & vbCrLf & _
"tablo2(Z, 5) = Split(Split(tablo(i), ""\u003e"")(1), ""\"")(0)" & vbCrLf & _
"reponse = reponse & chr(9) & tablo2(Z, 5) & vbcrlf" & vbCrLf & _
"Err.Clear" & vbCrLf & _
"Z = Z + 1" & vbCrLf & _
"Next"
code = code & vbCrLf & "reponse = reponse & vbcrlf & str_demande_fich" 'ici reponse à toutes les datas de tablo2
'+ demandefichier.responsetext
code = code & vbCrLf & "GetObject(, ""Excel.Application"").Workbooks(""" & ThisWorkbook.Name & """).Worksheets(1).Range(""I""&(WScript.Arguments(1)/20)+6 ).Value=""page "" & (WScript.Arguments(1)/20)+1 &"" = "" & b & "" essai"""
'pour l'affichage du tableau de rapport du nombre de relance
'ici introduction de la condition Ag=False (pour ne pas afficher si il existe le fichier de queue des data
code = code & vbCrLf & "If Ag = False Then"
code = code & vbCrLf & "GetObject(, ""Excel.Application"").Workbooks(""" & ThisWorkbook.Name & """).Worksheets(1).Range(""A"" & WScript.Arguments(2)).Resize(UBound(tablo2), 7) = tablo2"
'pour l'affichage des datas suite au retour des scripts
code = code & vbCrLf & "End If"
'pour enregistrer sous fichier response au format texte le retour des datas
Enreg = "Set FSys = CreateObject(""Scripting.FileSystemObject"")"
Enreg = Enreg & vbCrLf & "Set MonFic = FSys.CreateTextFile("".\response"" & WScript.Arguments(1)/20 & "".txt"")"
Enreg = Enreg & vbCrLf & "With MonFic" & vbCrLf & ".write reponse" & vbCrLf & "End With"
code = code & vbCrLf & Enreg
With ThisWorkbook
'On copie le code dans un fichier
Set FSys = CreateObject("Scripting.FileSystemObject")
Set MonFic = FSys.CreateTextFile(.Path & "\requeteallequities" & ".vbs")
With MonFic 'Pour écrire dans le fichier texte
.write code
End With
End With
End Sub |
Partager