Rapport de message :*
 

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

Titre du sujet : Re: Récupération de données sur le web
par myDearFriend! le 02/11/2011 18:17:31

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,