Extraire des données web depuis un site qui utilise javascript
Résolu/Fermé
captoine
stef - 26 févr. 2016 à 20:31
- Messages postés
- 15
- Date d'inscription
- lundi 28 juillet 2014
- Statut
- Membre
- Dernière intervention
- 29 juillet 2014
stef - 26 févr. 2016 à 20:31
A voir également:
- Extraire des donnée d'une page web avec javascript
- Javascript récupérer les données d'une page web - Meilleures réponses
- Récupérer le contenu d'une page web en javascript - Meilleures réponses
- [javascript] recuperer contenu d'une page ✓ - Forum - Javascript
- Récupérer une partie des données d'une page WEB - Forum - PHP
- Extraire des données web depuis un site qui utilise javascript ✓ - Forum - VB / VBA
- Récupérer des données d'une page internet - Forum - Javascript
- Utilisation données d'une table dans page web - Forum - Bases de données
7 réponses
pijaku
Modifié par pijaku le 29/07/2014 à 12:12
- Messages postés
- 12259
- Date d'inscription
- jeudi 15 mai 2008
- Statut
- Modérateur
- Dernière intervention
- 9 août 2022
Modifié par pijaku le 29/07/2014 à 12:12
On se contente donc d'un copié/collé?
Si oui, voici le code complet :
Et le classeur exemple : https://www.cjoint.com/c/DGDmkDrvlzU
Cordialement,
Franck
Si oui, voici le code complet :
Option Explicit 'SOURCES : 'Manipuler IE depuis VBA : 'http://qwazerty.developpez.com/tutoriels/vba/ie-et-vba-excel/ 'Sendkeys & Vider_Presse_Papier : MichDenis 'http://www.generation-nt.com/reponses/pb-avec-sendkeys-ctrl-plusa-ctrl-plusc-ctrl-plusv-entraide-3545931.html 'REFERENCES : 'Pour manipuler IE, il nous faudra activer deux références : '« Microsoft Internet Controls » '« Microsoft HTML Object Library ». 'Pour accéder aux références dans VBA, menu Outils -> Références. Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Private Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As Long Private Declare Function EmptyClipboard Lib "user32" () As Long Private Declare Function CloseClipboard Lib "user32" () As Long Dim Trouve As Boolean Sub VaChercherSurInternet(Site As String, Ville As String, Annee As String) Dim IE As New InternetExplorer Dim IEDoc As HTMLDocument Dim htmlTagCol As IHTMLElementCollection Dim Lien As String, MsgErreur As String Vider_Presse_Papier 'Ouvre Internet Explorer à la page référencée en B1 et B2 IE.navigate Site IE.Visible = True WaitIE IE Set IEDoc = IE.document Set htmlTagCol = IEDoc.getElementsByTagName("a") 'Boucle sur tous les liens et clic sur celui de la première lettre de la ville référencée en B3 Lien = Left(Ville, 1) Trouve = False Clic_Sur_Lien htmlTagCol, Lien, IE 'Traitement si la première lettre n'est pas trouvée dans les liens If Trouve = False Then MsgErreur = Left(Ville, 1) & " non trouvée dans les liens du site : " & Site GoTo ErreurUrl End If Set IEDoc = IE.document Set htmlTagCol = IEDoc.getElementsByTagName("a") 'Boucle sur tous les liens et clic sur celui de la ville référencée en B3 Lien = "*" & Ville & "*" Trouve = False Clic_Sur_Lien htmlTagCol, Lien, IE 'Traitement si la ville n'est pas trouvée dans les liens If Trouve = False Then MsgErreur = "Ville " & Ville & " non trouvée." GoTo ErreurUrl End If Set IEDoc = IE.document Set htmlTagCol = IEDoc.getElementsByTagName("a") 'Boucle sur tous les liens et clic sur celui de la ville référencée en B3 + "Budget principal" Lien = "*" & Ville & "*" & "(Budget principal" & "*" Trouve = False Clic_Sur_Lien htmlTagCol, Lien, IE 'Traitement si budget prinicpal n'est pas trouvée dans les liens If Trouve = False Then MsgErreur = "Le lien budget principal de la ville " & Ville & " n'a pas été trouvé." GoTo ErreurUrl End If Set IEDoc = IE.document Set htmlTagCol = IEDoc.getElementsByTagName("a") 'Boucle sur tous les liens et clic sur celui de l'année référencée en B4 Lien = Annee Trouve = False Clic_Sur_Lien htmlTagCol, Lien, IE 'Traitement si l'année n'est pas trouvée dans les liens If Trouve = False Then MsgErreur = "Le lien budget principal de la ville " & Ville & " pour l'année : " & Annee & " n'a pas été trouvé." GoTo ErreurUrl End If Set IEDoc = IE.document Set htmlTagCol = IEDoc.getElementsByTagName("a") 'Boucle sur tous les liens et clic sur "Fiche détaillée" Lien = "Fiche détaillée" Trouve = False Clic_Sur_Lien htmlTagCol, Lien, IE 'Traitement si la fiche n'est pas trouvée dans les liens If Trouve = False Then MsgErreur = "La fiche détaillée du budget de la ville " & Ville & " pour l'année : " & Annee & " n'a pas été trouvé." GoTo ErreurUrl End If Application.SendKeys "^a" Application.Wait Now + TimeValue("00:00:01") Application.SendKeys "^c" Application.Wait Now + TimeValue("00:00:01") With Sheets("Feuil2") .Select .Cells.Delete 'suppression de toutes les lignes de la feuille!!!!! .Range("A1").Select .Paste End With IE.Quit Set IE = Nothing Set IEDoc = Nothing Set htmlTagCol = Nothing Vider_Presse_Papier MsgBox "Importation terminée avec succès.", vbInformation Exit Sub ErreurUrl: MsgBox MsgErreur End Sub Function Clic_Sur_Lien(CollectionLiens As IHTMLElementCollection, Lien As String, IE As InternetExplorer) Dim mesLiens As IHTMLElement, Attente As Long If Sheets("Feuil1").Range("B5").Value = "" Then Sheets("Feuil1").Range("B5").Value = 2 Attente = CLng(Sheets("Feuil1").Range("B5").Value) * 1000 For Each mesLiens In CollectionLiens If mesLiens.innerText Like Lien Then mesLiens.Click Trouve = True End If If Trouve Then Exit For Next Sleep Attente WaitIE IE End Function Sub WaitIE(IE As InternetExplorer) 'On boucle tant que la page n'est pas totalement chargée Do Until IE.readyState = READYSTATE_COMPLETE DoEvents Loop End Sub Sub Vider_Presse_Papier() OpenClipboard 0 EmptyClipboard CloseClipboard End Sub
Et le classeur exemple : https://www.cjoint.com/c/DGDmkDrvlzU
Cordialement,
Franck
pijaku
28 juil. 2014 à 12:00
- Messages postés
- 12259
- Date d'inscription
- jeudi 15 mai 2008
- Statut
- Modérateur
- Dernière intervention
- 9 août 2022
28 juil. 2014 à 12:00
Bonjour,
J'ai redirigé car je penses que pour réaliser ce que tu souhaites, il nous faudra un petit "programme" en VBA.
Si tu veux bien, nous pouvons débuter cela.
Tu disposes d'Internet Explorer sur le(s) pc(s) ou est censé fonctionner ton classeur Excel?
J'ai redirigé car je penses que pour réaliser ce que tu souhaites, il nous faudra un petit "programme" en VBA.
Si tu veux bien, nous pouvons débuter cela.
Tu disposes d'Internet Explorer sur le(s) pc(s) ou est censé fonctionner ton classeur Excel?
pijaku
28 juil. 2014 à 12:08
- Messages postés
- 12259
- Date d'inscription
- jeudi 15 mai 2008
- Statut
- Modérateur
- Dernière intervention
- 9 août 2022
28 juil. 2014 à 12:08
Ps : je penses utiliser la méthode décrite dans ton 4- :
une macro qui ouvre http://alize2.finances.gouv.fr/communes/eneuro/RDep.php?type=BPS&dep=001 et ouvre successivement tous les bons liens jusqu'à arriver a la feuille que je souhaite ??
une macro qui ouvre http://alize2.finances.gouv.fr/communes/eneuro/RDep.php?type=BPS&dep=001 et ouvre successivement tous les bons liens jusqu'à arriver a la feuille que je souhaite ??
captoine
28 juil. 2014 à 12:33
- Messages postés
- 15
- Date d'inscription
- lundi 28 juillet 2014
- Statut
- Membre
- Dernière intervention
- 29 juillet 2014
28 juil. 2014 à 12:33
oui, j'ai IE 11 et firefox.
Merci pour ta reponse rapide!!!
Merci pour ta reponse rapide!!!
captoine
28 juil. 2014 à 12:37
- Messages postés
- 15
- Date d'inscription
- lundi 28 juillet 2014
- Statut
- Membre
- Dernière intervention
- 29 juillet 2014
28 juil. 2014 à 12:37
pour le chemin jusqu'a la page des données comptable c'est:
http://alize2.finances.gouv.fr/communes/eneuro/RDep.php?type=BPS&dep=001
puis la commune en question
puis le lien "budget principal"
puis l'onglet de l'année
puis le lien "fiche detaillée"
mais je pourrai peut etre extrapoler si deja tu me montres comment ouvrir un lien avec vba et importer les données :)
http://alize2.finances.gouv.fr/communes/eneuro/RDep.php?type=BPS&dep=001
puis la commune en question
puis le lien "budget principal"
puis l'onglet de l'année
puis le lien "fiche detaillée"
mais je pourrai peut etre extrapoler si deja tu me montres comment ouvrir un lien avec vba et importer les données :)
pijaku
28 juil. 2014 à 12:45
- Messages postés
- 12259
- Date d'inscription
- jeudi 15 mai 2008
- Statut
- Modérateur
- Dernière intervention
- 9 août 2022
28 juil. 2014 à 12:45
Bon.
Voici un début de réponse :
- ouvre le site
- clic sur le lien "B"
Voici un début de réponse :
- ouvre le site
- clic sur le lien "B"
Option Explicit
Sub VaChercherSurInternet()
Dim IEDoc As HTMLDocument
Dim htmlTagCol As IHTMLElementCollection
Dim Lien As IHTMLElement
IE.navigate "http://alize2.finances.gouv.fr/communes/eneuro/RDep.php?type=BPS&dep=001"
IE.Visible = True
Do Until IE.readyState = READYSTATE_COMPLETE
DoEvents
Loop
Set IEDoc = IE.document
Set htmlTagCol = IEDoc.getElementsByTagName("a")
For Each Lien In htmlTagCol
If Lien.innerText = "B" Then Lien.Click
Next
Set IE = Nothing
Set IEDoc = Nothing
Set htmlTagCol = Nothing
End Sub
captoine
28 juil. 2014 à 12:59
- Messages postés
- 15
- Date d'inscription
- lundi 28 juillet 2014
- Statut
- Membre
- Dernière intervention
- 29 juillet 2014
28 juil. 2014 à 12:59
le debogueur me dit:
Sub VaChercherSurInternet()
Dim IEDoc As HTMLDocument
type defini par l'utilisateur non defini...
Sub VaChercherSurInternet()
Dim IEDoc As HTMLDocument
type defini par l'utilisateur non defini...
pijaku
28 juil. 2014 à 13:22
- Messages postés
- 12259
- Date d'inscription
- jeudi 15 mai 2008
- Statut
- Modérateur
- Dernière intervention
- 9 août 2022
28 juil. 2014 à 13:22
Oubli de ma part ...
Pour manipuler IE, il faut activer deux références : Microsoft Internet Controls et Microsoft HTML Object Library.
Pour accéder aux références dans VBA, menu Outils / Références.
Pour manipuler IE, il faut activer deux références : Microsoft Internet Controls et Microsoft HTML Object Library.
Pour accéder aux références dans VBA, menu Outils / Références.
stef
>
pijaku
26 févr. 2016 à 20:31
- Messages postés
- 12259
- Date d'inscription
- jeudi 15 mai 2008
- Statut
- Modérateur
- Dernière intervention
- 9 août 2022
26 févr. 2016 à 20:31
Merci Pikaju, tu viens de résoudre mon problème ;)
captoine
28 juil. 2014 à 13:06
- Messages postés
- 15
- Date d'inscription
- lundi 28 juillet 2014
- Statut
- Membre
- Dernière intervention
- 29 juillet 2014
28 juil. 2014 à 13:06
lien.innerText = "B" ça recherche les liens tels qu'ils sont affichés sur la page ou ça recherche dans le lien hypertexte?
dans le premier cas je comprends donc que je dois remplacer B par le nom de la commune.
puis une fois sur cette nouvelle page je relance une boucle pour chercher "Budget principal"
puis je copie les données
dans le premier cas je comprends donc que je dois remplacer B par le nom de la commune.
puis une fois sur cette nouvelle page je relance une boucle pour chercher "Budget principal"
puis je copie les données
pijaku
28 juil. 2014 à 13:24
- Messages postés
- 12259
- Date d'inscription
- jeudi 15 mai 2008
- Statut
- Modérateur
- Dernière intervention
- 9 août 2022
28 juil. 2014 à 13:24
Un fichier exemple, à la "va-vite".
Rien n'est optimisé. Pour l'instant je n'en suis qu'à l'accès à la page "budget principal"...
Rien n'est optimisé. Pour l'instant je n'en suis qu'à l'accès à la page "budget principal"...
captoine
28 juil. 2014 à 13:37
- Messages postés
- 15
- Date d'inscription
- lundi 28 juillet 2014
- Statut
- Membre
- Dernière intervention
- 29 juillet 2014
28 juil. 2014 à 13:37
enorme!
je viens de regarder le code et je suis un peu largué mais je vais creuser.
pour l'instant je dois modifier les instructions Declare et les marquer avec PtrSafe pour que le code puisse etre utilisé sur les syteme 64bit..
je viens de regarder le code et je suis un peu largué mais je vais creuser.
pour l'instant je dois modifier les instructions Declare et les marquer avec PtrSafe pour que le code puisse etre utilisé sur les syteme 64bit..
captoine
28 juil. 2014 à 13:37
- Messages postés
- 15
- Date d'inscription
- lundi 28 juillet 2014
- Statut
- Membre
- Dernière intervention
- 29 juillet 2014
28 juil. 2014 à 13:37
merci beaucoup.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
pijaku
28 juil. 2014 à 14:16
- Messages postés
- 12259
- Date d'inscription
- jeudi 15 mai 2008
- Statut
- Modérateur
- Dernière intervention
- 9 août 2022
28 juil. 2014 à 14:16
Deux choses à bien comprendre :
Après le code n'est que boucles et traitement d'erreur...
Si :
Voici le fichier qui va au bout.
Fais des tests sur les traitements d'erreur en changeant les cellules B1 à B4 une par une...
Le code pour celles et ceux qui passeraient par ici :
Avec saisie, dans la feuille active :
Set IEDoc = IE.documentPlace le document Html ouvert dans une variable
Set htmlTagCol = IEDoc.getElementsByTagName("a")Place tous les liens du document html (IEDoc) dans une "variable" de type Collection.
Après le code n'est que boucles et traitement d'erreur...
Si :
monLien.innerTextretourne le texte affiché du lien...
Voici le fichier qui va au bout.
Fais des tests sur les traitements d'erreur en changeant les cellules B1 à B4 une par une...
Le code pour celles et ceux qui passeraient par ici :
Option Explicit
'SOURCES :
'http://qwazerty.developpez.com/tutoriels/vba/ie-et-vba-excel/
'Pour manipuler IE, il nous faudra activer deux références :
'« Microsoft Internet Controls »
'« Microsoft HTML Object Library ».
'Pour accéder aux références dans VBA, menu Outils -> Références.
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Dim Trouve As Boolean
Sub VaChercherSurInternet(Site As String, Ville As String, Annee As String)
Dim IE As New InternetExplorer
Dim IEDoc As HTMLDocument
Dim htmlTagCol As IHTMLElementCollection
Dim Lien As String, MsgErreur As String
'Ouvre Internet Explorer à la page référencée en B1 et B2
IE.navigate Site
IE.Visible = True
WaitIE IE
Set IEDoc = IE.document
Set htmlTagCol = IEDoc.getElementsByTagName("a")
'Boucle sur tous les liens et clic sur celui de la première lettre de la ville référencée en B3
Lien = Left(Ville, 1)
Trouve = False
Clic_Sur_Lien htmlTagCol, Lien, IE
'Traitement si la première lettre n'est pas trouvée dans les liens
If Trouve = False Then
MsgErreur = Left(Ville, 1) & " non trouvée dans les liens du site : " & Site
GoTo ErreurUrl
End If
Set IEDoc = IE.document
Set htmlTagCol = IEDoc.getElementsByTagName("a")
'Boucle sur tous les liens et clic sur celui de la ville référencée en B3
Lien = "*" & Ville & "*"
Trouve = False
Clic_Sur_Lien htmlTagCol, Lien, IE
'Traitement si la ville n'est pas trouvée dans les liens
If Trouve = False Then
MsgErreur = "Ville " & Ville & " non trouvée."
GoTo ErreurUrl
End If
Set IEDoc = IE.document
Set htmlTagCol = IEDoc.getElementsByTagName("a")
'Boucle sur tous les liens et clic sur celui de la ville référencée en B3 + "Budget principal"
Lien = "*" & Ville & "*" & "(Budget principal" & "*"
Trouve = False
Clic_Sur_Lien htmlTagCol, Lien, IE
'Traitement si budget prinicpal n'est pas trouvée dans les liens
If Trouve = False Then
MsgErreur = "Le lien budget principal de la ville " & Ville & " n'a pas été trouvé."
GoTo ErreurUrl
End If
Set IEDoc = IE.document
Set htmlTagCol = IEDoc.getElementsByTagName("a")
'Boucle sur tous les liens et clic sur celui de l'année référencée en B4
Lien = Annee
Trouve = False
Clic_Sur_Lien htmlTagCol, Lien, IE
'Traitement si l'année n'est pas trouvée dans les liens
If Trouve = False Then
MsgErreur = "Le lien budget principal de la ville " & Ville & " pour l'année : " & Annee & " n'a pas été trouvé."
GoTo ErreurUrl
End If
Set IEDoc = IE.document
Set htmlTagCol = IEDoc.getElementsByTagName("a")
'Boucle sur tous les liens et clic sur "Fiche détaillée"
Lien = "Fiche détaillée"
Trouve = False
Clic_Sur_Lien htmlTagCol, Lien, IE
'Traitement si la fiche n'est pas trouvée dans les liens
If Trouve = False Then
MsgErreur = "La fiche détaillée du budget de la ville " & Ville & " pour l'année : " & Annee & " n'a pas été trouvé."
GoTo ErreurUrl
End If
Set IE = Nothing
Set IEDoc = Nothing
Set htmlTagCol = Nothing
Exit Sub
ErreurUrl:
MsgBox MsgErreur
End Sub
Function Clic_Sur_Lien(CollectionLiens As IHTMLElementCollection, Lien As String, IE As InternetExplorer)
Dim mesLiens As IHTMLElement
For Each mesLiens In CollectionLiens
If mesLiens.innerText Like Lien Then
mesLiens.Click
Trouve = True
End If
If Trouve Then Exit For
Next
Sleep 2000
WaitIE IE
End Function
Sub WaitIE(IE As InternetExplorer)
'On boucle tant que la page n'est pas totalement chargée
Do Until IE.readyState = READYSTATE_COMPLETE
DoEvents
Loop
End Sub
Avec saisie, dans la feuille active :
B1 : http://alize2.finances.gouv.fr/communes/eneuro/RDep.php?type=BPS&dep=
B2 : 001
B3 : NEUVILLE-LES-DAMES
B4 : 2011
captoine
28 juil. 2014 à 14:27
- Messages postés
- 15
- Date d'inscription
- lundi 28 juillet 2014
- Statut
- Membre
- Dernière intervention
- 29 juillet 2014
28 juil. 2014 à 14:27
whaou, ça va très vite pour moi, mais je commence a comprendre !!
Je dois préalablement essayer de reinstaller office en 64 bits pour ne plus avoir de probleme de declaration.
merci énormement pour ton temps,
je continue a apprivoiser le fichier d'exemple mais il va me falloir un peu de temps.
Je dois préalablement essayer de reinstaller office en 64 bits pour ne plus avoir de probleme de declaration.
merci énormement pour ton temps,
je continue a apprivoiser le fichier d'exemple mais il va me falloir un peu de temps.
pijaku
28 juil. 2014 à 14:43
- Messages postés
- 12259
- Date d'inscription
- jeudi 15 mai 2008
- Statut
- Modérateur
- Dernière intervention
- 9 août 2022
28 juil. 2014 à 14:43
Je ne connais pas ce problème...
Peut être suffit-il de supprimer la ligne Option Explicit tout en haut du module...
Je ne sais pas...
Peut être suffit-il de supprimer la ligne Option Explicit tout en haut du module...
Je ne sais pas...
captoine
28 juil. 2014 à 19:56
- Messages postés
- 15
- Date d'inscription
- lundi 28 juillet 2014
- Statut
- Membre
- Dernière intervention
- 29 juillet 2014
28 juil. 2014 à 19:56
Pas de soucis pour le probleme des 32 vs 64 bits c'est un pb bien documenté.
Le code marche parfaitement c'est genial.
J'essaie simplement de recuperer du coup la derniere page affichée.
J'ai ajouté cette ligne:
Sheets("feuil2").Range("a1") = IEDoc.documentElement.innerText
mais je me retrouve avec toutes les données dans une seule cellule alors que je voudrais un tableau comme sur le site... any idea pour finaliser l'opération?
Set IEDoc = IE.document
Set htmlTagCol = IEDoc.getElementsByTagName("a")
'Boucle sur tous les liens et clic sur "Fiche détaillée"
Lien = "Fiche détaillée"
Trouve = False
Clic_Sur_Lien htmlTagCol, Lien, IE
Sheets("feuil2").Range("a1") = IEDoc.documentElement.innerText
Le code marche parfaitement c'est genial.
J'essaie simplement de recuperer du coup la derniere page affichée.
J'ai ajouté cette ligne:
Sheets("feuil2").Range("a1") = IEDoc.documentElement.innerText
mais je me retrouve avec toutes les données dans une seule cellule alors que je voudrais un tableau comme sur le site... any idea pour finaliser l'opération?
Set IEDoc = IE.document
Set htmlTagCol = IEDoc.getElementsByTagName("a")
'Boucle sur tous les liens et clic sur "Fiche détaillée"
Lien = "Fiche détaillée"
Trouve = False
Clic_Sur_Lien htmlTagCol, Lien, IE
Sheets("feuil2").Range("a1") = IEDoc.documentElement.innerText
pijaku
29 juil. 2014 à 07:58
- Messages postés
- 12259
- Date d'inscription
- jeudi 15 mai 2008
- Statut
- Modérateur
- Dernière intervention
- 9 août 2022
29 juil. 2014 à 07:58
Bonjour,
J'essaie simplement de recuperer du coup la derniere page affichée.
Je ne me suis encore jamais posé la question à vrai dire... Un simple copié/collé suffisait jusqu'alors...
Je regardes ça ce matin...
J'essaie simplement de recuperer du coup la derniere page affichée.
Je ne me suis encore jamais posé la question à vrai dire... Un simple copié/collé suffisait jusqu'alors...
Je regardes ça ce matin...
captoine
29 juil. 2014 à 08:40
- Messages postés
- 15
- Date d'inscription
- lundi 28 juillet 2014
- Statut
- Membre
- Dernière intervention
- 29 juillet 2014
29 juil. 2014 à 08:40
apres un si beau code pour arriver jusqu'a cette fameuse "fiche détaillée" ce serait dommage de finir par un copié collé :) j'ai essayé de trouver la reponse sur le tutoriels de qwazerty.developpez.com (d'ou le "IEDoc.documentElement.innerText") mais malgré la clarté du tuto, je pars vraiment de trop loin pour en faire quelque chose...
merci mille fois
merci mille fois
pijaku
29 juil. 2014 à 11:01
- Messages postés
- 12259
- Date d'inscription
- jeudi 15 mai 2008
- Statut
- Modérateur
- Dernière intervention
- 9 août 2022
29 juil. 2014 à 11:01
Le problème de
Bon, j'explore d'autres solutions que le copié/collé.
Par exemple, l'utilisation de Querytables d'Excel. Malheureusement impossible à réaliser pour tes raisons de départ. L'adresse url obtenue, en fin de parcours est du type http://blabla/.../detail.php ce qui ne donne aucun résultat lors de "l'extraction" d'une table... Grrr!
J'arrive à récupérer les infos grâce à un Senkeys "^a", Senkeys "^c" (sélectionner tout CTRL+A, copier CTRL+C) mais ne parvient pas encore à coller dans la feuille, Senkeys "^v" (coller CTRL+V) m'envoyant mes informations dans le cosmos de Windows au lieu de les transférer dans ma feuille...
La méthode
Si je détaille ici les essais que je fais, c'est au cas ou toi ou un autre lecteur aurait une solution autre et surtout efficace...
Maintenant je vais me pencher sur l'extraction du code source de la page... Voir s'il est possible de reconstituer un tableau à partir des balises <table>, <tr> et <td> de la page html...
Pas si évident que cela.........
.documentElement.innerTextest le traitement des informations à postériori. Il nous balance toutes les infos dans une seule variable de type
String...
Bon, j'explore d'autres solutions que le copié/collé.
Par exemple, l'utilisation de Querytables d'Excel. Malheureusement impossible à réaliser pour tes raisons de départ. L'adresse url obtenue, en fin de parcours est du type http://blabla/.../detail.php ce qui ne donne aucun résultat lors de "l'extraction" d'une table... Grrr!
J'arrive à récupérer les infos grâce à un Senkeys "^a", Senkeys "^c" (sélectionner tout CTRL+A, copier CTRL+C) mais ne parvient pas encore à coller dans la feuille, Senkeys "^v" (coller CTRL+V) m'envoyant mes informations dans le cosmos de Windows au lieu de les transférer dans ma feuille...
La méthode
GetFromClipboardassociée à
GetText(1)nous donne le même résultat que
.documentElement.innerText...
Si je détaille ici les essais que je fais, c'est au cas ou toi ou un autre lecteur aurait une solution autre et surtout efficace...
Maintenant je vais me pencher sur l'extraction du code source de la page... Voir s'il est possible de reconstituer un tableau à partir des balises <table>, <tr> et <td> de la page html...
Pas si évident que cela.........
captoine
29 juil. 2014 à 11:10
- Messages postés
- 15
- Date d'inscription
- lundi 28 juillet 2014
- Statut
- Membre
- Dernière intervention
- 29 juillet 2014
29 juil. 2014 à 11:10
oui, j'essaie de trouver une autre solution mais c'est moi qui ne suis pas efficace :)
dans tout ce que j'ai lu ce matin voici quelque chose qui semble marcher et que j'essaie d'integrer dans le code ...
With Page.Document
Application.SendKeys "^a"
Application.Wait Now + TimeValue("00:00:1")
Application.SendKeys "^c"
End With
Page.Quit
Workbooks("Code bare.xls").Activate
Range("a1").Select
ActiveSheet.PasteSpecial Format:="Texte", Link:=False, DisplayAsIcon:= _
False
extrait de:
https://forums.commentcamarche.net/forum/affich-20262304-vba-copier-le-contenu-d-une-page-web-php
dans tout ce que j'ai lu ce matin voici quelque chose qui semble marcher et que j'essaie d'integrer dans le code ...
With Page.Document
Application.SendKeys "^a"
Application.Wait Now + TimeValue("00:00:1")
Application.SendKeys "^c"
End With
Page.Quit
Workbooks("Code bare.xls").Activate
Range("a1").Select
ActiveSheet.PasteSpecial Format:="Texte", Link:=False, DisplayAsIcon:= _
False
extrait de:
https://forums.commentcamarche.net/forum/affich-20262304-vba-copier-le-contenu-d-une-page-web-php
captoine
29 juil. 2014 à 11:21
- Messages postés
- 15
- Date d'inscription
- lundi 28 juillet 2014
- Statut
- Membre
- Dernière intervention
- 29 juillet 2014
29 juil. 2014 à 11:21
Yesssss!!! avec ca j'arrive a avoir un copier collé ligne à ligne!!!! on s'approche.
Reste plus qu'a avoir les colonnes :) je pense que ca se passe dans l'instruction du collage special..?
Set IEDoc = IE.document
Set htmlTagCol = IEDoc.getElementsByTagName("a")
'Boucle sur tous les liens et clic sur "Fiche détaillée"
Lien = "Fiche détaillée"
Trouve = False
Clic_Sur_Lien htmlTagCol, Lien, IE
With IEDoc
Application.SendKeys "^a"
Application.Wait Now + TimeValue("00:00:1")
Application.SendKeys "^c"
End With
Sheets("feuil2").Select
Range("a1").Select
ActiveSheet.PasteSpecial Format:="Texte", link:=False, DisplayAsIcon:= _
False
Reste plus qu'a avoir les colonnes :) je pense que ca se passe dans l'instruction du collage special..?
Set IEDoc = IE.document
Set htmlTagCol = IEDoc.getElementsByTagName("a")
'Boucle sur tous les liens et clic sur "Fiche détaillée"
Lien = "Fiche détaillée"
Trouve = False
Clic_Sur_Lien htmlTagCol, Lien, IE
With IEDoc
Application.SendKeys "^a"
Application.Wait Now + TimeValue("00:00:1")
Application.SendKeys "^c"
End With
Sheets("feuil2").Select
Range("a1").Select
ActiveSheet.PasteSpecial Format:="Texte", link:=False, DisplayAsIcon:= _
False
29 juil. 2014 à 12:40
c'est parfait, merci pijaku, merci la belgique!!
RESOLU!
29 juil. 2014 à 12:42
A+