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
|
Public comptechangement
Public NBPAGES As Long
Public debut
Public schplage As Boolean
Public oldtarget
Sub EURONEXT_ALL_EQUITIES()
'cette sub va interroger le serveur pour récupérer toutes les données du jour
'Il faut activer la bibliothèque Microsoft WinHTTP Service
Dim i As Long, ARGTS_send As String, Fso As Object
schplage = False 'voir code Feuil1
NBPAGES = 0
pageblanche 'appel sub pageblanche pour blanchir Feuil1, la sub pageblanche lance la private sub Worsheet_change comptechangement = 0
Application.ScreenUpdating = False
Dim DemandeFichier As Object, URL As String
Dim FSys As Object, MonFic
Dim texte As String
Set DemandeFichier = CreateObject("Microsoft.XMLHTTP") 'instancie l'object
URL = "https://euronext.com/pd/stocks/data?formKey=nyx_pd_filter_values:1006ef55d4998cc0fad71db6a6f38530"
'On génère la 1 ere requête afin d'obtenir les 20 1ere ligne ainsi que le nombre de page
DemandeFichier.Open "POST", URL, False
DemandeFichier.setRequestHeader "x-requested-with", "XMLHttpRequest"
DemandeFichier.setRequestHeader "Accept-Language", "fr"
DemandeFichier.setRequestHeader "Referer", "https://europeanequities.nyx.com/fr/equities-directory"
DemandeFichier.setRequestHeader "Accept", "application/json, text/javascript, */*"
DemandeFichier.setRequestHeader "Content-Type", "application/x-www-form-urlencoded; charset=UTF-8" 'Ajouté
DemandeFichier.setRequestHeader "Accept-Encoding", "gzip, deflate"
DemandeFichier.setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 6.0; rv:29.0) Gecko/20100101 Firefox/29.0"
DemandeFichier.setRequestHeader "Host", "europeanequities.nyx.com"
DemandeFichier.setRequestHeader "Content-Length", "231" 'Ajouté
DemandeFichier.setRequestHeader "DNT", "1"
DemandeFichier.setRequestHeader "Connection", "Keep - Alive"
DemandeFichier.setRequestHeader "Cache-Control", "no-cache"
'on envoie la requete avec un idisplaystart= a 0
DemandeFichier.send "sEcho=5&iColumns=7&sColumns=&iDisplayStart=0&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"
' on détermine le nombre de page a télécharger en récupérant le iTotalRecords dans la première page et en divisant par 20
NBPAGES = Round(Val(Split(Split(DemandeFichier.responseText, "iTotalRecords"":")(1), ",")(0)) / 20)
'on a executer une requette presque pour rien me dira tu
'mais il n'en est rien ,en fait la premiere requete est excecutée pour determiner le nombre de page
'par contre ici toujours
'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 'appelle la sub creationvbs2...c'est celle qui crée le ficheir vbs
requetevbs = ThisWorkbook.Path & "\requeteallequities.vbs"
debut = Time
SC = """" & requetevbs & """ "
schplage = True 'pour enclencher si schplage = True le théme de la présentation des datas sur la feuille excel
'le True n'existe qu'ici avant la récupération des datas par la requête
For i = 0 To NBPAGES
ARGsending = i * 20 '=WScript.Arguments(1)
firstcel = i * 20 + 2 'il n'y a pas de saut de ligne sur l'affichage excel, =WScript.Arguments(2)
'+2 pour débuter en 2° ligne car la 1° sert pour le command_button
With CreateObject("WScript.Shell")
.Run SC & URL & " " & ARGsending & " " & firstcel
End With
Next
End Sub
'///////////////////////////////////////////////////////////////////////////////////////////////////////////
' CREATION DU VBS UNIQUE
'///////////////////////////////////////////////////////////////////////////////////////////////////////////
Sub creationvbs2()
'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
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(""C:\Users\...\response\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