Interrogation Web Partielle

Bonjour,

J'ai repris le fichier de ces sujets Automatiser la recherche d'information sur boursorama (excel-pratique.com) et Récupération Données Boursorama (excel-pratique.com). Lorsque j'exécute la macro, je devrais recueillir toutes les tables disponibles de la page web. Cependant, la macro n'en fait qu'a sa tête et ne charge pas toutes les tables correctement. Il y a 4 tables sur la page Web et pourtant il m'arrive de me retrouver avec un onglet qui n'a pu en récupérer aucune.

Quelle est la façon de récupérer correctement les données? Faut-il que je développe une macro spécifique à chaque table? Ou faut-il mettre des pauses afin qu'Excel ait le temps de récupérer et de copier les données?

Le fichier en PJ

Je précise qu'en mode Pas à pas, la macro marche très bien. J'imagine donc que la vitesse d'exécution est peut-être top rapide pour Excel. N'y a-t-il aucun moyen de la ralentir?

Encore une précision supplémentaire: En enlevant le "On Error Resume Next", la macro se bloque à la ligne "ActiveSheet.Paste". Pourtant une fois sortie de la macro, un simple CTRL+V marche correctement.

J'ai donc eu l'idée de faire une boucle du style :

For i = 1 To UBound(Split(.responseText, "<table"))
restart:
                On Error GoTo restart
                Range("A" & Rows.Count).End(xlUp).Offset(2, 0).Select
                txt = "<table" & Split(Split(.responseText, "<table")(i), "</table>")(0) & "</table>"
                obj.SetText txt
                obj.PutInClipboard
                ActiveSheet.Paste

Mais aucun succès, même avec cette boucle "restart", la macro se bloque toujours au ActiveSheet.Paste.

Une idée de l'origine de mon problème?

Hello,

Activesheet.Paste fonctionne pas forcément bien, je dois passer par un truc du style :

Activesheet.Range("TaCellule").Select

Selection.Paste

Essaie ça :)

Bonjour,

Malheureusement, cela ne marche pas, de mon coté du moins.

Bonjour,

aucun soucis avec la macro maj, aucune donnée avec test !

pourquoi ne pas reprendre la macro qui fonctionne ?

le nombre de tables récupérées ne dépend que de boursorama, pas de perte a priori

si le micro est lent ou la connexion internet lente, on peut ajouter des temporisations

Merci pour votre aide Steelson,

J'aurai du effectivement préciser que ma demande portait sur la Macro "Maj". La macro "test" est à ignorer.

Il y a 4 table à récupérer par onglet. Quand je lance la macro "Maj", je n'en récupère pas la totalité. Ces tables sont bien présentes sur les liens boursorama indiqués.

De votre coté, récupérer vous ces 4 tables par onglet?

Si c'est le cas, je rejoins votre remarque sur la lenteur de ma connexion ou du processeur. J'avais essayé de temporiser la macro avec la fonction Sleep comme indiqué ci dessous mais rien n'y fait

'Fonction Sleep
#If VBA7 Then ' Excel 2010 or later
Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal Milliseconds As LongPtr)
#Else ' Excel 2007 or earlier
Public Declare Sub Sleep Lib "kernel32" (ByVal Milliseconds As Long)
#End If
If .Status = 200 Then
            For i = 1 To UBound(Split(.responseText, "<table"))
                Range("A" & Rows.Count).End(xlUp).Offset(2, 0).Select
                txt = "<table" & Split(Split(.responseText, "<table")(i), "</table>")(0) & "</table>"
                obj.SetText txt
                obj.PutInClipboard
                ActiveSheet.Paste
                Sleep (200)                '200 millisecondes de pause avant le Next
            Next
        End If

Quelle est la bonne démarche à suivre?

Pour le moment, après plusieurs essais avec le fichier posté, j'ai toujours récupéré 4 tables.

Je vais réfléchir à une solution, soit bien sûr le faire un par un, soit mettre une tempo au bon endroit !

Oublie sleep

Mets plutôt (pour 1 secondes)

Application.Wait Time + TimeSerial(0, 0, 1)

à des endroits judicieux, notamment avec le next

les select et activate sont très chronophages, du coup, je n'ai pas testé, mais il y a aussi une piste complémentaire car je vois que tu fais beaucoup de mise en forme. Est-ce que le programme tel qu'il était initialement avec uniquement le rapatriement des 4 tableaux fonctionne seul ?

Autre piste, au début de la macro, mets toi en calcul manuel, puis revient en auto à la fin, car il se peut que les calculs générés par l'import des données plus les ajouts que tu fais ralentissent fortement.

Application.Calculation = xlCalculationManual
................
Application.Calculation = xlCalculationAutomatic

J'obtiens les mêmes résultats avec le programme original trouvé sur ce forum.

J'ai mis dans le code

Application.Calculation = xlCalculationManual
................
Application.Calculation = xlCalculationAutomatic
'&
Application.Wait Time + TimeSerial(0, 0, 1)       'Avant le Next

Mais aucun changement... J'ai essayé avec Application.ScreenUpdating aussi mais j'ai l'impression de moins en récupérer.

Pourtant je n'ai pas un vieux processeur... L'ordinateur a 3 mois et j'ai un Intel i5 11eme gen à 2.4GHz... A n'y rien comprendre.

J'ai essayé la macro Maj sur un ordi de compétition et effectivement elle marche bien. Il faut que j'examine de plus près les performances de mon PC et s'il existe des programmes pouvant interférer.

C'est bien la première fois que je me retrouve bloqué sur Excel à cause des performances d'un processeur...

Je fais encore quelques tests de mon coté et si jamais rien n'avance je fermerais le sujet.

Et je peux te dire que mon PC a 8 ans ! Surface première génération ... donc pas un foudre de guerre. Mais je nettoye régulièrement, y compris fichiers temp pas faciles à trouver, si cela peut t'aider

C:\Users\Michel\AppData\Local\Temp

Et bien bravo, vous avez réussi à trouver la solution à mon problème. Suite au nettoyage du dossier temp, la macro fonctionne. Je n'aurai jamais imaginé qu'il y avait un impact aussi gros de ces fichiers sur le VBA.

Dorénavant, je prendrais l'habitude de nettoyer tout cela et je vous en remercie :)

Bon weekend à vous!

Même CCleaner ne nettoie pas ce bazar !

Rechercher des sujets similaires à "interrogation web partielle"