Importer des données du web - parcourir une liste d'URL
Bonjour,
Je souhaite récupérer à partir du site "
" les fiches techniques de certains téléphones mobiles.
En m'inspirant du très bon post + vidéo intitulée "créer une macro pour Importer des données d'un site web", j'ai donc écrit le code ci-dessous, qui me permet de récupérer sur 3 colonnes: la marque, le nom du mobile et le lien hyper texte de la fiche technique.
Je bloque pour l'étape d'après, qui consisterait à l'aide d'une nouvelle macro à parcourir la colonne 3 des liens hyper texte récupérés précédemment et d'importer chacune de ces fiches techniques. Je souhaiterai automatiser ce processus et pas le faire manuellement.
Ps: c'est ma 1ère macro excel!!!
Ps2: c'est mon 1er post sur ce forum!!!
Merci pour votre aide,
Bonne fin de journée,
Sub Importer2()
Sheets("Temp").Cells.Clear
With Sheets("temp").QueryTables.Add(Connection:= _
"URL;http://www.tudocelular.com/celulares/fichas-tecnicas.html", Destination _
:=Sheets("temp").Range("$A$1"))
.Name = "fichas-tecnicas"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = False
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.WebSelectionType = xlEntirePage
.WebFormatting = xlWebFormattingAll
.WebPreFormattedTextToColumns = True
.WebConsecutiveDelimitersAsOne = True
.WebSingleBlockTextImport = False
.WebDisableDateRecognition = False
.WebDisableRedirections = False
.Refresh BackgroundQuery:=False
End With
compteur = 0
For ligne = 1 To 1000
If Right(Sheets("temp").Cells(ligne, 1), 2) = "ço" Or Right(Sheets("temp").Cells(ligne, 1), 2) = "R$" Or Right(Sheets("temp").Cells(ligne, 1), 3) = "dos" Then
compteur = compteur + 1
Sheets("accueil").Cells(compteur, 1) = Sheets("temp").Cells(ligne - 3, 1)
Sheets("accueil").Cells(compteur, 2) = Sheets("temp").Cells(ligne - 2, 1)
Sheets("accueil").Cells(compteur, 3) = Sheets("temp").Cells(ligne - 3, 1).Hyperlinks(1).Address
If compteur = 24 Then Exit For
End If
Next
bonsoir,
voici un exemple qui consulte les pages mentionnées en colonne C. à toi d'adapter le code pour copier les cellules qui t'intéressent.
Sub Importer2()
Sheets("Temp").Cells.Clear
With Sheets("temp").QueryTables.Add(Connection:= _
"URL;http://www.tudocelular.com/celulares/fichas-tecnicas.html", Destination _
:=Sheets("temp").Range("$A$1"))
.Name = "fichas-tecnicas"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = False
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.WebSelectionType = xlEntirePage
.WebFormatting = xlWebFormattingAll
.WebPreFormattedTextToColumns = True
.WebConsecutiveDelimitersAsOne = True
.WebSingleBlockTextImport = False
.WebDisableDateRecognition = False
.WebDisableRedirections = False
.Refresh BackgroundQuery:=False
End With
compteur = 0
For ligne = 1 To 1000
If Right(Sheets("temp").Cells(ligne, 1), 2) = "ço" Or Right(Sheets("temp").Cells(ligne, 1), 2) = "R$" Or Right(Sheets("temp").Cells(ligne, 1), 3) = "dos" Then
compteur = compteur + 1
Sheets("accueil").Cells(compteur, 1) = Sheets("temp").Cells(ligne - 3, 1)
Sheets("accueil").Cells(compteur, 2) = Sheets("temp").Cells(ligne - 2, 1)
Sheets("accueil").Cells(compteur, 3) = Sheets("temp").Cells(ligne - 3, 1).Hyperlinks(1).Address
If compteur = 24 Then Exit For
End If
Next
Set wsa = Worksheets("Accueil")
Set ws = Worksheets("querydetails")
For i = 1 To 24
For Each qt In ws.QueryTables
qt.Delete
Next qt
With ws.QueryTables.Add(Connection:= _
"URL;" & Worksheets("Accueil").Cells(i, 3) _
, Destination:=ws.Range("$A$1"))
.Name = "RIM-BlackBerry-Z30"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.WebSelectionType = xlEntirePage
.WebFormatting = xlWebFormattingNone
.WebPreFormattedTextToColumns = True
.WebConsecutiveDelimitersAsOne = True
.WebSingleBlockTextImport = False
.WebDisableDateRecognition = False
.WebDisableRedirections = False
.Refresh BackgroundQuery:=False
End With
' copie les infos qui t'intéresses
wsa.Cells(i, 4) = ws.Cells(29, 1)
Next i
End SubMerci beaucoup, ça marche!
Si je comprends bien le processus pour pouvoir le refaire moi même.
Tu enregistre une nouvelle macro sur un des liens, puis tu automatises d'une part en créant une boucle "i" et d'autre part en remplaçant l'adresse URL par "URL;" & Worksheets("Accueil").Cells(i, 3).
Néanmoins, étant totalement néophyte, que signifie qt?
Merci encore,
bonsoir,
qt est le nom d'une variable destinée à contenir une QueryTable (qt).
pour éviter des problèmes de mémoire et stabilité d'excel, je nettoie les queries dont on n'a plus besoin.
OK merci de ton aide.
Bonne soirée
Bonsoir, suite à l'aide de H2SO4, j'ai pu construire la macro qui me permet de récupérer les prix (colonne D) pour chaque téléphone sur le site tudocelular.com.br. Ci-dessous le code.
Je souhaiterai pouvoir conserver l'historique de ces prix en fonction de la mise à jour de la macro. Par exemple, si je relance la macro dans une semaine, je voudrai conserver les prix d'aujourd'hui et ainsi constituer un historique de prix.
Débutant je ne sais pas comment faire,
Merci pour votre aide,
Sub Importer2()
Sheets("Temp").Cells.Clear
Sheets("querydetails").Cells.Clear
With Sheets("temp").QueryTables.Add(Connection:= _
"URL;http://www.tudocelular.com/celulares/fichas-tecnicas.html", Destination _
:=Sheets("temp").Range("$A$1"))
.Name = "fichas-tecnicas"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = False
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.WebSelectionType = xlEntirePage
.WebFormatting = xlWebFormattingAll
.WebPreFormattedTextToColumns = True
.WebConsecutiveDelimitersAsOne = True
.WebSingleBlockTextImport = False
.WebDisableDateRecognition = False
.WebDisableRedirections = False
.Refresh BackgroundQuery:=False
End With
compteur = 0
For ligne = 1 To 1000
If Right(Sheets("temp").Cells(ligne, 1), 2) = "ço" Or Right(Sheets("temp").Cells(ligne, 1), 2) = "R$" Or Right(Sheets("temp").Cells(ligne, 1), 3) = "dos" Then
compteur = compteur + 1
Sheets("accueil").Cells(compteur, 1) = Sheets("temp").Cells(ligne - 3, 1)
Sheets("accueil").Cells(compteur, 2) = Sheets("temp").Cells(ligne - 2, 1)
Sheets("accueil").Cells(compteur, 3) = Sheets("temp").Cells(ligne - 3, 1).Hyperlinks(1).Address
If compteur = 24 Then Exit For
End If
Next
Set wsa = Worksheets("Accueil")
Set ws = Worksheets("querydetails")
For i = 1 To 24
For Each qt In ws.QueryTables
qt.Delete
Next qt
With ws.QueryTables.Add(Connection:= _
"URL;" & Worksheets("Accueil").Cells(i, 3) _
, Destination:=ws.Range("$A$1"))
.Name = "RIM-BlackBerry-Z30"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.WebSelectionType = xlEntirePage
.WebFormatting = xlWebFormattingAll
.WebPreFormattedTextToColumns = True
.WebConsecutiveDelimitersAsOne = True
.WebSingleBlockTextImport = False
.WebDisableDateRecognition = False
.WebDisableRedirections = False
.Refresh BackgroundQuery:=False
End With
For ligneA = 1 To 1000
If Left(ws.Cells(ligneA, 1), 7) = "Especif" Then
wsa.Cells(i, 4) = ws.Cells(ligneA + 11, 1)
Exit For
End If
Next
Next i
End Sub