Récupération de données sur le web
#1
Débutant XLPages

Inscription: 01/11/2011

Messages: 9

Système d'exploitation:
PC
Version Excel utilisée:
2007
Posté le : 01-11-2011 19h16
Bonjour à tous,

Tout nouveau sur votre site, j'espère y trouver l'aide que je recherche.

J'ai créé un fichier excel recencant les séries de BDs que je suis. Mon tableau est assez simple (cf. PJ). On y trouve le nom de la série, le nombre de tome parus, les tomes qu'il me manque, le lien web de la fiche série sur le site www.BDThèque.com .

Ce que je souhaiterai faire, c'est pointer automatiquement depuis la page web associée le nombre de tome parues (cases jaunes dans le fichier) et actualiser automatiquement la colonne à chaque ouverture du fichier, de façon à voir quelles sont les séries dont un nouveau tome est sorti.

Par exemple, pour la série "La Licorne", aller récupérer à partir du lien de la page suivante: http://www.bdtheque.com/main.php?bdid=5348

l'information "Nb. tomes parus :", qui est ici "3" (au 1er nov 2011) et reporter cette info dans la case correspondante du fichier excel (ici la case C5). Cette info étant automatiquement vérifiée et mise à jour à chaque ouverture du fichier.

Une fois cette info récupéré, je pourrai facilement vérifier quelles sont les nouveautés.

J'ai essayé d'utiliser les requêtes web excel mais celle ci me donnent bcp trop d'infos (je peux récupérer un ensemble d'info depuis le lien web mais pas uniquement le nbre de tome). Et je ne sais pas comment faire via une autre méthode (peut être via le code source de la page mais je ne m'y connais pas assez).

Existe-t-il une macro ou fonction simple et dupliquable aux autres séries permettant de faire cela, via les liens des pages web associées, pour chaque série (le fichier joint n'étant pas complet encore) ??

J'espère que vous pourrez m'apporter une solution à mon problème, en espérant avoir été suffisamment clair dans sa description.
Vous remerciant par avance pour votre aide, bonne semaine à tous

Fx
Pièce jointe:
xlsx Listing BDs.xlsx   [ Taille: 12.20 Ko - Téléchargements: 595 ]
Hors Ligne
Rapport   Haut 

Re: Récupération de données sur le web
#2
Webmestre

Inscription: 18/05/2006
De Saône-et-Loire (71)

Messages: 1539

Système d'exploitation:
PC
Version Excel utilisée:
97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365
Posté le : 01-11-2011 21h15
Bonsoir fixsurfer, bienvenue sur XLpages.com

Peut-être une réponse possible à ton problème dans la pièce jointe...

J'ai utilisé ce code VBA :
Option Explicit
'------------------------------------------------------------------------
' Auteur    : Didier FOURGEOT (myDearFriend!)  -  www.mdf-xlpages.com
' Date      : 01/11/2011
' Sujet     : RecupWeb Listing BD
'------------------------------------------------------------------------
Sub RecupNbTomes()
Dim IE As InternetExplorer
Dim vUrl As String, T As String
Dim L As Long, Lmax As Long
    Application.ScreenUpdating = False
    Set IE = CreateObject("internetExplorer.Application")
    IE.Visible = False
    With Sheets("www.mdf-xlpages.com")
        Lmax = .Cells(.Rows.Count, 6).End(xlUp).Row
        For L = 5 To Lmax
            Application.StatusBar = (L - 4) * 100 \ (Lmax - 4) & "%... " & .Cells(L, 2).Text
            'URL
            vUrl = .Cells(L, 6).Text
            'Ouvre la page web dans IE de façon invisible
            IE.Navigate vUrl
            Do Until IE.ReadyState = READYSTATE_COMPLETE
                DoEvents
            Loop
            T = IE.Document.body.innerText
            .Cells(L, 3).Value = Val(Mid(T, InStr(1, T, "Nb. tomes parus :") + 17))
        Next L
    End With
    'Quitter IE
    IE.Quit
    Set IE = Nothing
    Application.StatusBar = False
    Application.ScreenUpdating = True
    MsgBox "Mise à jour nombre de Tomes réalisée !", vbInformation + vbOKOnly, "myDearFriend!  -  www.mdf-xlpages.com"
End Sub
Et comme l'exécution d'une telle procédure au lancement d'un classeur ne me semble pas être une bonne idée, j'ai préféré t'ajouter un bouton pour lancer la mise-à-jour (un clic sur le bouton et un peu de patience restent nécessaires...)

En espérant t'avoir dépanné.

Cordialement,


Pièce jointe:
zip mDF_RecupWeb Listing BDs.zip   [ Taille: 20.30 Ko - Téléchargements: 585 ]

Didier_mDF
Image redimensionnée
Le Webmaster

La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien
Hors Ligne
Rapport   Haut 

Re: Récupération de données sur le web
#3
Débutant XLPages

Inscription: 01/11/2011

Messages: 9

Système d'exploitation:
PC
Version Excel utilisée:
2007
Posté le : 02-11-2011 13h39
Bonjour Didier,

Merci beaucoup pour cette réponse rapide et qui semble effectivement totalement répondre à ma demande.

J'ai simplement 3 petites questions :      
      - Je peux bien sans problème ajouter des nouvelles séries (ie: lignes) à mon tableau ?? J'ai fait le test et cela semble marcher mais je voulais m'en assurer.
      
      - Autre question, si je souhaite ajouter des colonnes avant celle contenant les liens web, quelle est la ligne de code que je dois modifier ??  Est ce bien celles-ci :
With Sheets("www.mdf-xlpages.com")
  Lmax = .Cells(.Rows.Count, 6).End(xlUp).Row
  For L = 5 To Lmax
    Application.StatusBar = (L - 4) * 100 \ (Lmax - 4) & "%... " & .Cells(L, 2).Text
   'URL
    vUrl = .Cells(L, 6).Text



Les 6 (en rouge dans le code) étant le numéro de colonne (ici 6 pour F) ?? Il suffit par exemple de mettre 8 si je décale en colonne H mes liens web ?? Est ce bien ça ??

      - Idem, si j'ai bien compris, je dois également démarrer ma liste à la ligne 5, ou modifier la ligne de code suivante :
 With Sheets("www.mdf-xlpages.com")
    Lmax = .Cells(.Rows.Count, 6).End(xlUp).Row
    For L = 5 To Lmax
       Application.StatusBar = (L - 4) * 100 \ (Lmax - 4) & "%... " & .Cells(L, 2).Text
      'URL
Ici remplacer le 5 par le numéro de ma première ligne (les 4 sont-ils aussi à remplacer??) ?

En tout cas merci encore une fois, je ne pensais pas avoir une réponse aussi rapide.

Fx

Hors Ligne
Rapport   Haut 

Re: Récupération de données sur le web
#4
Webmestre

Inscription: 18/05/2006
De Saône-et-Loire (71)

Messages: 1539

Système d'exploitation:
PC
Version Excel utilisée:
97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365
Posté le : 02-11-2011 16h39
Bonjour fixsurfer, le Forum,

Je pense que tu as tout compris

C'est oui pour l'ensemble (le 6, le 5 et le 4), tu as visiblement bien analysé ce morceau de code. Bravo
Par ailleurs, cette procédure tient compte du nombre d'Urls indiquées et s'adapte en fonction du nombre de ligne de ton tableau (il faut toutefois veiller à ne pas oublier l'Url pour chaque ligne existante sous peine de plantage non géré : pas de cellule vide isolée ou erreur d'Url dans cette colonne).

Cela dit, la meilleure façon de procéder aurait été sans doute de tester par toi-même ces conclusions (qui étaient justes !). Décortiquer l'existant, modifier, tester, améliorer, c'est toujours le meilleur moyen d'apprendre par soi-même.

Cordialement

(merci de solder ce fil comme indiqué au bas de ma signature si tu penses le sujet clos)
.


Didier_mDF
Image redimensionnée
Le Webmaster

La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien
Hors Ligne
Rapport   Haut 

Re: Récupération de données sur le web
#5
Débutant XLPages

Inscription: 01/11/2011

Messages: 9

Système d'exploitation:
PC
Version Excel utilisée:
2007
Posté le : 02-11-2011 16h59
Merci beaucoup encore une fois.

J'ai effectivement fait des tests, mais bon, je préférais avoir vos confirmations (on ne sait jamais, des fois que sur un coup de chance ca marche alors que ca ne devrait pas ).
Simplement, concernant votre nouvelle réponse, les "4" correspondent à "n°1ère ligne - 1" ou à autre chose ??

Et enfin, avant de solder le sujet, j'ai une dernière question.
Comment avez-vous récupérer l'info demandée ?? Je m'explique, imaginons que je souhaite "améliorer" mon super fichier en récupérant via la même page ou une autre d'autres infos à l'avenir, quelle partie du code faut-il modifier et comment ??
Si je ne me trompe pas cela devrait être celle-ci :

  Loop
   T = IE.Document.body.innerText
   .Cells(L, 3).Value = Val(Mid(T, InStr(1, T, "Nb. tomes parus :") + 17))
Next L
J'imagine qu'on demande à excel de parcourir la page web à la recherche de la suite de mots "nb. tome parus" et qu'on lui demande de récupérer la valeur nbr ou texte associée.
Du coup, par exemple, pour récupérer l'info "dessinateur", faut-il remplacer le code ainsi seulement (en conservant le même emplacement de colonne pour que ce soit plus simple ?) ou bien faut-il faire autre chose ??
 Loop
  T = IE.Document.body.innerText
  .Cells(L, 3).Value = Val(Mid(T, InStr(1, T, "Dessinateur :") + 17))
Next L
Je ne comprend pas bien le fonctionnement de la fct° InStr et à quoi correspond le +17 en fait (le nombre de caractères à sauter dans le code source de la page ????

Voilà, j'espère ne pas t'avoir trop soualé avec mes questions Promis, à la prochaine réponse, je solde le sujet.

Encore une fois merci beaucoup,

Cordialement,
Fx

Hors Ligne
Rapport   Haut 

Re: Récupération de données sur le web
#6
Webmestre

Inscription: 18/05/2006
De Saône-et-Loire (71)

Messages: 1539

Système d'exploitation:
PC
Version Excel utilisée:
97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365
Posté le : 02-11-2011 18h17
Re fixsurfer,

Citation :
fixsurfer a écrit :
Simplement, concernant votre nouvelle réponse, les "4" correspondent à "n°1ère ligne - 1" ou à autre chose ??
C'est bien le n° de la première ligne de données -1.

Citation :
fixsurfer a écrit :
Comment avez-vous récupérer l'info demandée ?? Je m'explique, imaginons que je souhaite "améliorer" mon super fichier en récupérant via la même page ou une autre d'autres infos à l'avenir, quelle partie du code faut-il modifier et comment ??
Si je ne me trompe pas cela devrait être celle-ci :

  Loop
   T = IE.Document.body.innerText
   .Cells(L, 3).Value = Val(Mid(T, InStr(1, T, "Nb. tomes parus :") + 17))
Next L
J'imagine qu'on demande à excel de parcourir la page web à la recherche de la suite de mots "nb. tome parus" et qu'on lui demande de récupérer la valeur nbr ou texte associée.

Bon, tout d'abord on parle bien de l'expression chaîne "Nb. tomes parus :" (et non de "nb. tome parus" comme tu l'écris). Oui, je sais, je chipote, mais il n'y a pas d'aléatoire avec VBA (ou avec n'importe quel langage de développement d'ailleurs), tout doit être précis : la casse, l'orthographe...

Maintenant, je décompose l'extrait de code :
T = IE.Document.body.innerText
T est une chaîne de caractères contenant l'ensemble du texte de la page Web (sans les balises HTML).

L'objectif, c'est quoi ?
On veut récupérer la valeur numérique suivant l'expression (exacte) "Nb. tomes parus :"

Que faut-il faire ?
D'abord, on va repérer où se situe cette expression dans l'ensemble du texte de la page (à partir de combien de caractères cette chaîne apparaît-elle ?)

Pour ça, on utilise la fonction INSTR() (voir l'aide VBA sur cette fonction pour les détails) :
NumCaractCible = InStr(NumCaractèreDeDépart, ChaineATraiter, ChaineARechercher)
autrement dit, dans notre cas :
NumCaractCible = InStr(1, T, "Nb. tomes parus :")
NumCaractCible contiendra le numéro du caractère à partir duquel on retrouve la chaîne "Nb. tomes parus :" (ou plus exactement, le numéro de position du 1er caractère ("N") de cette chaîne).

Toutefois ce qui nous intéresse, ce n'est pas cette chaine mais la valeur qui apparaît - après - cette chaine. Ainsi, on ajoute 17 à la valeur trouvée, puisque la chaîne "Nb. tomes parus :" contient elle-même 17 caractères :
NumCaractCible = InStr(1, T, "Nb. tomes parus :") + 17
Cette fois, nous savons que NumCaractCible pointe bien sur la position de la chaine qui nous intéresse.

On isole (extrait) ensuite tous les caractères à partir de cette position grâce à la fonction MID(). Voir l'aide VBA pour le détail de cette fonction MID().

La nouvelle chaîne obtenue commence par la fameuse valeur (numérique) recherchée ( = le nombre de tomes tant convoité).

Il ne reste donc plus qu'à isoler cette valeur numérique. Et pour ça, je simplifie l'opération en faisant appel à la fonction VAL() Voir l'aide VBA sur cette fonction pour comprendre cette dernière astuce.

Voilà, je ne peux t'expliquer mieux ce bout de code

Avec ces explications, l'aide VBA et un peu de travail d'investigation de ta part, tu as tout en main pour pouvoir t'en sortir pour le reste.

Pour l'info "Dessinateur", la seule difficulté qu'il te restera à résoudre, c'est que la valeur souhaitée n'est plus numérique mais une valeur chaîne de caractères (ex: "Jean (Anthony)"). Il te faudra donc jouer d'astuce là encore, mais cette fois, je vais te laisser chercher un peu... 

Cordialement,

Didier_mDF
Image redimensionnée
Le Webmaster

La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien
Hors Ligne
Rapport   Haut 

Re: Récupération de données sur le web
#7
Débutant XLPages

Inscription: 01/11/2011

Messages: 9

Système d'exploitation:
PC
Version Excel utilisée:
2007
Posté le : 03-11-2011 09h51
Eh bien merci beaucoup pour ces explications et votre aide précieuse.

Je solde donc comme promis le sujet et vais continuer à me cultiver sur le sujet.

Encore merci.

Cordialement,

Fx
Hors Ligne
Rapport   Haut 

Re: Récupération de données sur le web
#8
Débutant XLPages

Inscription: 03/11/2011

Messages: 2

Système d'exploitation:
PC
Version Excel utilisée:
excel 2000
Posté le : 03-11-2011 14h06
Bonjour,

Je reviens vers vous au sujet de la recuperation de données sur le web.

Je suis en train de créer un fichier comparatif car pour le travail, je dois comparer tous les jours de nombreux produits.

Pour cela, je compare chez icomparateur mais je n'arrive pas à récupérer le PRIX TTC.

J'ai modifié le code initial mais j'aimerais qu'il m'indique le PRIX D'ACHAT TTC avec 2 chiffres après la virgule.
Le fichier me récupère bien le PRIX HORS TAXE et les FRAIS DE PORT :

Dim vUrl As String, T As String
Dim L As Long, Lmax As Long
    Application.ScreenUpdating = False
    Set IE = CreateObject("internetExplorer.Application")
    'afficher IE
    IE.Visible = True
   
    With Sheets("www.i-comparateur.com")
        'ici : 6 =F
        Lmax = .Cells(.Rows.Count, 6).End(xlUp).Row
        'debut de la ligne : ici ligne 5
        For L = 5 To Lmax
            Application.StatusBar = (L - 4) * 100 \ (Lmax - 4) & "%... " & .Cells(L, 2).Text
            'URL
            'ici : 6 =F
            vUrl = .Cells(L, 6).Text
            'Ouvre la page web dans IE de façon invisible
            IE.Navigate vUrl
            Do Until IE.ReadyState = READYSTATE_COMPLETE
                DoEvents
            Loop
            T = IE.Document.body.innerText
            'PRIX D'ACHAT
            .Cells(L, 3).Value = Val(Mid(T, InStr(1, T, "En stock") + 8))
            'FRAIS DE PORT
            .Cells(L, 4).Value = Val(Mid(T, InStr(1, T, "+ port : ") + 9))         
        Next L
    End With
   
    'Quitter IE
    IE.Quit
    Set IE = Nothing
    Application.StatusBar = False
    Application.ScreenUpdating = True
    MsgBox "Mise à jour effectuée !", vbInformation + vbOKOnly
End Sub

mais j'aimerais savoir si dans le code on pourrait récupérer le TTC sachant qu'en plus le produit n'est pas toujours "en stock"

j'ai pensé à récupérer le FRAIS DE PORT, à faire ensuite un NBCAR pour avoir le nombre de lettres et à récupérer le texte après les frais de port mais ça ne fonctionne pas.

je ne vois pas d'autres solutions à mon problème, pouvez vous m'aider s'il vous plait car je n'avance pas et je gagnerais énormément de temps?

je vous joint en pièce jointe mon fichier.

en beaucoup moins urgent, j'ai 2 autres petites questions, voir si c'est possible ou non :

- avons nous également la possibilité de remonter le NOM DU SITE où le produit est le moins cher?
- Pouvons nous faire cette extraction pour les 3 premiers sites ou c'est trop complexe?

Cordialement.

Eideal44
Pièce jointe:
xls COMPARATEUR.xls   [ Taille: 46.50 Ko - Téléchargements: 523 ]
Hors Ligne
Rapport   Haut 

Re: Récupération de données sur le web
#9
Webmestre

Inscription: 18/05/2006
De Saône-et-Loire (71)

Messages: 1539

Système d'exploitation:
PC
Version Excel utilisée:
97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365
Posté le : 04-11-2011 11h33
Bonjour eideal4, et bienvenue sur XLpages.com

Prière de créer ton propre sujet dans le forum STP, en faisant au besoin référence à celui-ci (par un lien) si tu le souhaites. Pour rappel, le présent sujet est soldé et considéré comme résolu.

Par ailleurs, merci aussi de consulter cette FAQ pour insérer du code VBA proprement dans tes posts (et de lire la FAQ dédiée au site et forum XLpages.com en général).

Cordialement,

Didier_mDF
Image redimensionnée
Le Webmaster

La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien
Hors Ligne
Rapport   Haut 


Vous pouvez voir les sujets.
Vous ne pouvez pas débuter de nouveaux sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

[Recherche avancée]


Qui consulte actuellement ce sujet ?   1 Utilisateur(s) anonymes