VBA pour importer des données boursières
C'est rudimentaire mais efficace. Je t'en redonne une encore plus allégée. L'ouverture du site est à faire manuellement
monsieur Steelson, je vous remercie encore une fois pour tout votre dévouement que vous avez fait pour m'aider à résoudre mon sujet .
J'ai remarqué que vous aidez à résoudre un problème identique dans ce sujet ici .
Faisons ce qui suit : Je vais chercher sur Internet une autre page de bourse qui contient les mêmes données, mais cette fois, je vais chercher une page qui n'a pas de liste dropdown . Je vais essayer de trouver une page de bourse qui affiche toutes les données sans avoir à sélectionner une liste dropdown .
Si je peux le trouver sur internet, je reviendrai ici et vous présenterai la nouvelle page bourse qui contient toutes les données . un gros câlin .
Je continue à réfléchir et je reviens dès que j'ai trouvé quelque chose.
Le dropdown est en fait bloqué par le menu déroulant quand on envoie par sendkeys des tabulations. Bon c'est un peu complexe mais il suffit de se mettre dans la barre d'adresse et faire des tabulations pour s'en apercevoir.
Peux-tu lancer ceci et me faire une copie d'écran ? attends bien 15 secondes sans bouger la souris. Je voudrais voir ce qu'il y a dans l'ovale rouge du bas si tu es sous chrome
J'ai pris une capture d'écran pendant 3 (trois) moments : trois images sont jointes: 15 secondes, 30 secondes et 40 secondes .
J'ai peut-être une solution (pointue)
pour moi aucune donnée n'a été transférée vers Excel, aucune donnée n'a été importée .
C'est normal, c'était un test.pour moi aucune donnée n'a été transférée vers Excel, aucune donnée n'a été importée .
J'effectue une remontée par tabulation inverse (comme quand tu tapes majsucule+tab) jusque vers le "dropdown". Cela me permet ensuite de choisir "todas as ações". Je voulais donc juste savoir si en remontant par 152 tabulations inverses j'arrivais bien sur "Ambev-pn", ensuite il suffit de 5 tabulations pour arriver au "dropdown".
Or je constate avec plusieurs essais que le nombre de lignes est variable, donc le 152 n'est pas stable !
Avec le site France j'ai une parfaite stabilité pour le moment.
Est-ce que je peux demander si tu as bien laissé la souris en place avant de copier l'écran. Car normalement on aurait dû avoir en bas d'écran une information commençant par https://br-investing etc.
Sinon, peux-tu changer la valeur dans la macro et mettre moins, 145 par exemple au lieu de 152 ?
SendKeys "+{TAB 152}" ' en haut des listes = AmbevEn fait, voici où j'en suis mais je ne suis pas sûr que ce soit très stable !
Essaie une seconde fois le cas échéant.
Chez moi, c'était ok (à condition que la liste des valeurs reste la même)
Question subsidiaire : as-tu un pavé numérique sur ton ordinateur ?
En parallèle j'explore des voies permettant de piloter la souris à partir d'excel pour pointer sur le menu déroulant ("dropdown") ... exemple : https://forum.excel-pratique.com/viewtopic.php?f=34&t=77769
Est-ce que je peux demander si tu as bien laissé la souris en place avant de copier l'écran.
Oui, j'ai laissé la souris dans la position de départ .
Essaie une seconde fois le cas échéant.
J'ai essayé plusieurs fois, et la plupart du temps, les événements suivants se sont produits :
la page de bourse s'ouvre comme le montre l'image ci-jointe 1 . peu de temps après la fermeture de toutes les pages ouvertes sur Internet, puis dans Excel il y a un message comme indiqué dans l'image jointe 2 .
Nota : parmi les multiples fois où j'ai exécuté la macro, il y a eu un moment où Excel a pu charger les données, comme le montre l'image ci-jointe 3 , si vous observez qu'un message s'est produit sur le côté droit des données chargées par Excel .
Question subsidiaire : as-tu un pavé numérique sur ton ordinateur ?
Non, je n'ai pas de clavier numérique privé sur mon ordinateur, j'utilise les chiffres en haut du clavier .
Cette voie semble très prometteuse ... à voir demain matin.
Je suis patient dans la recherche d'une excellente solution et j'attends avec impatience toutes les nouvelles que vous aurez à vous présenter, un gros câlin .
Nouvelle version : Elle exploite le positionnement de la souris par excel.
ATTENTION : il ne faut surtout pas toucher à la souris et laisser le process se dérouler jusqu'au bout (~20 secondes)
NOTA : il faut d'abord calibrer la position à atteindre,en faisant une copie d'écran du site et une exploitation de la position du menu déroulant ("dropdown") par paint par exemple.
Sub telecharger()
Dim nav As Long, url$, ligne%, posX%, posY%, Img As Object, fenetre As String
fenetre = ThisWorkbook.Name & " - Excel"
posX = Sheets("url").Cells(1, 2)
posY = Sheets("url").Cells(2, 2)
ligne = Selection.Row
If Left(Sheets("url").Cells(ligne, 1), 4) <> "http" Then
MsgBox "Sélectionner une url !"
Exit Sub
End If
Sheets.Add After:=Worksheets(Worksheets.Count)
MsgBox "Ne pas toucher à la souris ou au pad, le curseur va se positionner à l'endroit du menu déroulant de la page web !"
Call SetCursorPos(posX, posY)
url = Sheets("url").Cells(ligne, 1)
nav = ShellExecute(0, "open", url, 0, 0, 1)
Application.Wait (Now + TimeValue("00:00:05"))
Call SetCursorPos(posX, posY)
mouse_event MOUSEEVENTF_LEFTDOWN + MOUSEEVENTF_LEFTUP, posX, posY, 0, 0
SendKeys "{UP}"
SendKeys "{ENTER}"
Application.Wait (Now + TimeValue("00:00:10"))
SendKeys "^a"
Application.Wait (Now + TimeValue("00:00:01"))
SendKeys "^c"
Application.Wait (Now + TimeValue("00:00:03"))
'SendKeys "%{F4}"
AppActivate fenetre
Application.Wait (Now + TimeValue("00:00:01"))
ActiveSheet.Cells(1, 1).Select
ActiveSheet.Paste
For ligne = Range("A" & Rows.Count).End(xlUp).Row To 1 Step -1
If Cells(ligne, 6) = "" Then Rows(ligne).Delete Shift:=xlUp
Next
For Each Img In ActiveSheet.Pictures
Img.Delete
Next
With Cells.Font
.Name = "Calibri"
.Size = 11
End With
Cells(1, 1).Select
End SubCela est plus fiable, mais pas garanti 100%, car dépend d beaucoup de facteurs, notamment la vitesse de connexion internet, la rapidité des processeurs, etc.
il ne faut surtout pas toucher à la souris et laisser le process se dérouler jusqu'au bout (~20 secondes)
J'ai suivi tes instructions .
Cela est plus fiable, mais pas garanti 100%, car dépend d beaucoup de facteurs, notamment la vitesse de connexion internet, la rapidité des processeurs, etc
J'ai Internet du 15 MB et un processeur du 1,6 GHz
Nota :
après avoir appuyé sur le bouton pour exécuter la macro, cela a pris environ 15 secondes et une erreur s'est produite pour moi .
l'erreur qui s'est produite pour moi est indiquée dans les deux images que j'ai jointes . dans le code VBA, l'erreur s'est produite avec un fond jaune .
- 1ère solution :
change
en
ou
ou manuellement
car il apparaît d'après tes copies d'écran que le nom de la fenêtre est différente de chez moi
Il faut reprendre exactement ce que cet outil te montrera
J'avais ajouté ceci pour éviter de fermer totalement le navigateur.
- 2ème solution :
mets une apostrophe devant cette ligne (ou supprime la) et enlève l'apostrophe devant la ligne précédente ... das ce cas le navigateur va se fermer, mais ce serait dommage !
Au passage, j'espère quand même que tu as pu constater que le "dropdown" a bien fonctionné ?
Malheureusement, l'erreur continue de se produire, comme le montrent les deux images jointes .
1ère solution : change
J'ai fait le changement dans le code VBA, pouvez-vous l'analyser dans le projet VBA du fichier joint pour vérifier si j'ai fait le bon changement?
Il faut reprendre exactement ce que cet outil te montrera
en lisant votre explication dans ce sujet ici, je crois que je l'ai fait correctement . lors de l'exécution de "liste_fenetres.zip", puis Listé pour le fichier contenant la Macro les informations suivantes :
Titre : Microsoft Excel - investing v2 mouse chrome2ème solution : mets une apostrophe devant cette ligne (ou supprime la) et enlève l'apostrophe devant la ligne précédente ... das ce cas le navigateur va se fermer, mais ce serait dommage !
Je n'ai pas compris cette demande, je n'ai pas compris de quelle ligne vous parlez, si vous pouvez postuler dans le dossier, je vous en suis reconnaissant .
Essaie la seconde solution comme ceci ...
Attention, il faut bien calibrer la position du "dropdown" pour que la souris se pose automatiquement dessus.
On reviendra plus tard sur la première solution
Essaie la seconde solution comme ceci ...
cette fois, cela a fonctionné, Macro a réussi à récupérer les données de la page Web pour exceller .
Nota :
1) J'ai remarqué que la macro n'a récupéré que les données présentées dans la liste qui sont visibles .
2) J'ai également remarqué que l'ordre des actions sur la page Web ne correspond pas à l'ordre de récupération dans excel, c'est-à-dire qu'il y a eu un changement de position des lignes pendant du transfert pour excel .
3) il serait très important de pouvoir (avec VBA) récupérer toutes les données de toutes les actions .
4) J'ai joint une image avec la liste dropdown avec la sélection nécessaire pour afficher toutes les actions .
5 ) J'ai joint le fichier contenant les données récupérées par la macro. et j'ai inséré manuellement sur le côté droit du tableau les données de toutes les actions que je veux importer avec la macro vba .
J'ai bien toutes les données dans le bon ordre ...
Je l'ai fait plusieurs fois avec un taux d'échec très faible.
- 1-
Je pense qu'il s'agit d'une question de réglage des temporisations. Il faut sans doute augmenter les valeurs comme le 10 ci-dessous.
En effet, le pilotage d'une application par sendkeys est tributaire de la vitesse du flux internet et des processeurs du micro.
Fais donc plusieurs essais avec des réglages différents.
Peux-tu lancer 5 fois et dire en combien de secondes tu as obtenu la page complète les 5 fois et surtout la première fois (il n'y a pas de copie dans excel dans cet essai, l'application navigateur reste ouvert). Chez moi 12 secondes la première fois, puis 7 secondes pour la totalité du déroulement et pour le Brésil.
- 2-
peux-tu lancer cet outil (inoffensif ... je peux donner le code source très simple) quand ton application excel est ouverte et donner le résultat du fichier texte généré ?
le but est d'éviter de fermer le navigateur à la fin de l'interrogation
et ...
- 3-
Autre version (plus besoin de calibrer la souris)
On inter-agit ici avec le sélecteur en écrivant dans la barre d'adresse
puis
Nota 1: J'ai fait plusieurs tests, la configuration qui a fonctionné le mieux pour moi est dans l'image jointe, est également dans le projet vba du fichier joint .
Nota 2: La configuration dans l'image fonctionne dans la première tentative pour moi, cette fois aussi macro a réussi à maintenir le même ordre des lignes qui est sur la page web (~ 30 secondes) .
Nota 3: J'ai également essayé d'autres paramètres, mais aucun autre paramètre n'a réussi à importer toutes les actions, donc seule la configuration de l'image est réussie .
Nota 4: il est très important pour moi de pouvoir récupérer (avec VBA) toutes les données de toutes les actions .
peux-tu lancer cet outil ..... le but est d'éviter de fermer le navigateur à la fin de l'interrogation
pour le moment il est bon pour moi que le navigateur se ferme à la fin de la consultation, peut-être qu'à l'avenir je reviendrai dans ce détail .
Autre version (plus besoin de calibrer la souris)
Je n'ai pas encore eu le temps de tester votre nouvelle version, bientôt je testerai votre nouvelle version , alors je vous informerai .
bientôt je testerai votre nouvelle version , alors je vous informerai
J'ai fait le test avec la nouvelle version, j'ai fait plusieurs et plusieurs combinaisons de tempos, mais je n'ai pas réussi importer les données .
La combinaison de tempos qui peut charger toutes les actions sur la page web est dans l'image jointe .
Nota : La page web peut charger toutes les actions, mais rien n'est transféré vers excel. regardé le processus du macro et je fais presque toujours la même exécution :
La page web est ouverte, puis toutes les actions sont chargées, puis toutes les actions sont sélectionnées, mais lors du transfert de données vers excel, aucune information n'est collée dans excel, c'est-à-dire que les données ne sont pas transférées vers excel .
Le fichier avec la configuration des tempos qui ont le mieux chargé toutes les actions sur la page web est joint .
Tu dois avoir un vrai problème de connexion internet car ... https://forum.excel-pratique.com/viewtopic.php?p=858011#p858011
Fais un essai avec
... quelle est la valeur ?
Je pense aussi que ta configuration micro est un peu limitée pour ce que tu veux faire (processeur, taille de RAM). Et pourtant chez moi je n'ai pas une configuration très performante ! Quel est ton processeur, la fréquence d'horloge et la taille de RAM ?
In fine, il y a maintenant plusieurs possibilités, choisis celle qui te convient le mieux !
- simple copier/coller https://forum.excel-pratique.com/viewtopic.php?p=857245#p857245 > la plus simple surtout si le débit internet est irrégulier
- pilotage de la souris https://forum.excel-pratique.com/viewtopic.php?p=857480#p857480
- pilotage de la page web via javascript https://forum.excel-pratique.com/viewtopic.php?p=857883#p857883 > la plus intéressante et stable pour moi
