Récupérer des Données sur un site web
Bonjour,
Je cherche actuellement à créer un fichier excel contenant une liste de matériel dans une colonne et je souhaite que dans la colonne en face, excel puisse afficher un prix indiqué dans une page web.
Par exemple, dans une colonne j'ai : Prix Processeur Intel E8400 chez GrosBill
Dans la Colonne d'après sur la même ligne excel doit aller ici :
et extraire le prix de l'article chez grosbill.
Comment faire ???
Merci d'avance.
Salut le forum
Mandrakor
Un bout de fichier avec ta mise en page, une macro devrait régler ton problème.
Tu n'as qu'à cliquer sur ce lien : Joindre un fichier pour que l'on puisse t'aider, et recopier l'adresse sur ta ficelle.
Sinon un début de solution regarde le lien suivant
Mytå
Alors voilà mon fichier excel.
Les premiers onglets représentent diverses listes de matériel avec des infos non variables sauf les prix disponible dans l'URL à coté de chaque composant. A chaque fois, je prend le prix le plus bas entre LDLC et GrosBill ( mais si il est possible de récupérer les 2 prix il m'est facile de faire une fonction pour n'afficher que celle désirée )
Plutôt de faire toute les mise à jour du fichier à la main, je souhaite le moyen de l'automatiser sachant que je ne sais pas faire de macro .....
Merci beaucoup de bien vouloir m'aider
Salut le forum
Mandrakor, regarde j'ai divisé ta colonne prix en deux.
(J'ai juste inclus la page Processeur.)
Fichier Excel 2007 : https://www.excel-pratique.com/~files/doc/Requete_Prix_Essai.xlsm
Fichier Excel97-2003 : https://www.excel-pratique.com/~files/doc/Requete_Prix_Excel97_2003.xls
A te relire
Mytå
Super c'est exactement ça ^^
Mais peut tu me détailler un peu le contenu de la macro STP ?
Genre la décomposer avec des explications ?
Le but étant que je puisse l'adapter aux autres onglets.
En tout cas déjà merci pour ce super travail !
Re le forum
Mandrakor, la macro avec quelques détails
Sub Req_Prix()
Dim I As Byte
Dim J As Byte
Dim Ligne As Byte
Dim Source As Worksheet
Dim Requete As Worksheet
Dim Repertoire As String
Dim RangeObj As Object
'On note le répertoire courant
Repertoire = ThisWorkbook.Path & "\"
'La feuille de départ
Set Source = Sheets(ActiveSheet.Name)
'La feuille pour la requete
Set Requete = Sheets("NePasEffacer")
'On efface les montants déjà récupérer
Range("B5:C" & Range("C65536").End(3).Row + 1).ClearContents
'On désactive le rafraichissement d'écran
Application.ScreenUpdating = False
'On boucle avec la longueur de colonne D
For J = 4 To Range("D65536").End(3).Row + 1
'Vérification si une adresse avec http
If Left(Source.Cells(J, 4), 4) = "http" Then
'Creation du Fichier Pour La Requete
If Dir(Repertoire & "hr_6.iqy") = "hr_6.iqy" Then Kill (Repertoire & "hr_6.iqy")
Open Repertoire & "hr_6.iqy" For Append As #1
Print #1, "WEB"
Print #1, "1"
Print #1, Source.Cells(J, 4)
Print #1, ""
Print #1, "Selection = EntirePage"
Print #1, "Formatting = None"
Print #1, "PreFormattedTextToColumns = True"
Print #1, "ConsecutiveDelimitersAsOne = True"
Print #1, "SingleBlockTextImport = False"
Print #1, "DisableDateRecognition = False"
Close #1
'On lance la requete sur le Web pour récupérer les données
With Requete
.Activate
With ActiveSheet.QueryTables.Add(Connection:= _
"FINDER;" & Repertoire & "hr_6.iqy", Destination _
:=Requete.Range("A1"))
.Name = "Requete"
.FieldNames = False
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = False
.AdjustColumnWidth = True
.RefreshPeriod = 0
.WebSelectionType = xlEntirePage
.WebFormatting = xlWebFormattingNone
.WebPreFormattedTextToColumns = True
.WebConsecutiveDelimitersAsOne = True
.WebSingleBlockTextImport = False
.WebDisableDateRecognition = False
.Refresh BackgroundQuery:=False
End With
'Copy data de la requête, suivant les vendeurs en B4 et C4
For I = 2 To 3 '2=Colonne B et 3=Colonne C
.Range("A1").Activate
Set RangeObj = Cells.Find(What:=Source.Cells(4, I).Value, After:=ActiveCell, _
LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:=False)
If Not RangeObj Is Nothing Then
'Résultat trouvé on copie
Ligne = RangeObj.Row
Source.Cells(J, I) = Format(Val(.Range("B" & Ligne)), "#,##0.00")
Source.Cells(J, I).HorizontalAlignment = xlCenter
Else
'Résultat non-trouvé on affiche #n/a
Source.Cells(J, I) = "#N/A"
End If
Next I
'On efface la requete
With .Cells
.Delete
End With
End With
End If
'On boucle avec la nouvelle valeur
Next J
'On reviens sur la feuiile de départ et on remet le raffraichissement d'écran
Source.Activate
Application.ScreenUpdating = True
End SubMytå
Merci pour les explication j'ai à peu près compris comment ça fonctionne mais il reste un dernier point. La macro enregistre les prix sous forme de texte ce qui empêche toute formule ( par exemple ne conserver que le prix le plus bas dans les devis ).
Il n'est pas possible de faire en sorte d'enregistrer sous forme de nombre ?
Re le forum
Mandrakor, modifie la ligne dans le fichier
Source.Cells(J, I) = Format(Val(.Range("B" & Ligne)), "#,##0.00")Mytå
Re le forum
Mandrakor, ton fichier en version Excel 2007 (modifié)
https://www.excel-pratique.com/~files/doc/Requete_Prix_V2.0.xlsm
Mytå
Bonjour Mita, tu seras mon grand sauveteur si tu vois une solution a mon probleme qui est parait que celui là.
En faite j'ai un fichier excel (voir en PJ) que je dois remplir aux colonnes E F G H, les autres colones sont déja renseignées et le but c'est d'aller au site http://lentreprise.lexpress.fr/palmares-entreprises, taper le nom de l'entreprise, une fois trouvé je termine ces infos. Malheureusement avec ce grand volume (des milliers de contacts) il me faudra une éternité à le faire, peux tu me donner un coup de pousse avec une macro pour automatiser la sasie de ces infos STP....