Patrick, j'en suis à une dizaine de pages web dont certaines en réponse sur d'autres forums, toujours avec succès …
C'est vrai que je n'ai pas demandé à connaitre leur version d'IE …
Utilisant principalement Firefox, je ne met pas à jour IE, mon ordinateur de tests dispose d'Excel 2003 et IE9.
Je vérifierais ce week-end lors du retour du portable disposant d'Excel 2007 sa version d'IE …
Soit la version d'IE est à prendre en compte - et donc j'aurais eu beaucoup de bol jusqu'à présent ! -
soit c'est juste une question de respecter la programmation objet,
méthode alors ordinaire car la logique de la programmation objet reste immuable …
Sinon la qualité de la connexion serait-elle en cause ?
itwoo, je vais tenter de répondre à tes trois posts dans l'ordre …
1) De mon côté la ligne n°9 est vide, le
.Navigate est en ligne n°7 et la boucle en n°15 !
Ce n'est plus tout à fait le même code alors …
Et de mon côté avec le
.Navigate en ligne n°9, IE s'affiche déjà sans point d'arrêt !
Mettre le point d'arrêt sur la boucle peut empêcher la détection du changement d'état de l'objet, mauvaise idée !
Utiliser plutôt
Debug.Print : j'affiche des données sans variable objet, encore faut-il bien pointer sur l'objet !
Ainsi j'ai pu vérifier le changement d'état de l'objet, ses propriétés étant réinitialisées,
peu importe alors si c'est
.Length ou une autre !
Afin d'être sûr du code, ouvrir un nouveau classeur et y copier mon code
tel quel dans le module d'une feuille de calculs.
La seule modification concerne le code de la valeur boursière dans l'URL (
abbv,
f, …)
et d'ajouter si besoin le
.Visible = True en ligne 7 ou 9,
et rien d'autre ! …
Modifier un code pour ensuite se plaindre qu'il ne fonctionne pas, Patrick m'a déjà fait le coup !
Je n'ai jamais rencontré de souci avec les pages "abbv" et "f";
si tu as d'autres codes où tu rencontres le souci, je veux bien tester de mon côté.
2)Je ne vois pas comment la table peut se charger plus vite que le VBA vu les temps mesurés,
à moins qu'il ne s'agisse d'un code erroné ou venant d'être créé ?
Le problème que vous aviez rencontré venait du pointage lui-même : il faut respecter la hiérarchie objet;
la manière de pointer est vraiment cruciale, exemple du post #15 de ta discussion …
L'astuce, non en fait c'est un mauvais terme car c'est juste l'essence de la programmation objet !
C'est en revoyant mes bases sur un vieux langage objet que j'ai été mis sur la voie de la solution pour une connaissance …
Je reprends : comme indiqué dans le post initial, " l'astuce " consiste à verrouiller le pointage de l'objet avant la boucle,
sinon cela ne peut fonctionner (j'ai pourtant prévenu dans la présentation), juste une question de logique objet.
Ce n'est pas la propriété
.Length qui pose problème mais comment est pointé l'objet ! …
Le test est sur le NASDAQ simple. Pour EuroNext je n'ai pas testé vu le travail mené par Stéphane et Patrick,
le sujet d'origine portant sur le NASDAQ …
Le principe est de boucler tant que
.Length est différent de zéro car c'est seulement lors de son passage à zéro
que la table est à jour, zéro voulant dire que le pointeur a été "cassé" suite à cette mise à jour …
Pour obtenir les données mises à jour, il faut de nouveau pointer sur l'objet, comme la ligne suivant la boucle.
Quand les données ne posent pas de souci de conversion, j'utilise comme Patrick le Presse-Papiers.
Bien qu'il est possible à postériori de convertir les données en notation anglaise vers la française (
TextToColumns),
je préfère utiliser une variable tableau de type
Variant car, VBA étant nativement en anglais,
il effectue de facto automatiquement la conversion notation anglaise vers française, dates comme nombres
(en fait paramétrage régional de Windows), allégeant ainsi le code …
3)En fait quand je développe soit j'active les références idoines pour utiliser des variables
Object en liaison anticipée
soit je crée des variables en liaison tardive.
Exemple de modification du code des lignes n°5 & 6 en liaison tardive :
Set IE = CreateObject("InternetExplorer.Application") .
With IE …
Donc évidemment pour savoir quels éléments pointer ou récupérer, j'étudie la structure de la page web
au moyen de l'outil d'inspection intégré au navigateur et au travers de variables pointant sur des objets …
Cela fonctionne même avec un élément
iFrame !
Une table d'une page web est constituée comme une feuille de calculs d'Excel :
des cellules (
.Cells) subdivisées en lignes (
.Rows) par colonnes (
.Rows.Cells) …
Tout est donc visualisable via la fenêtre des
Variables locales …
Quant au B-A-BA de l'utilisation de la fonction
Format, le "@" représente un caractère, juste un style d'affichage …
_________________________________________________________________________________________________
We are all very ignorant, what happens is that not all ignore the same things … (Albert Einstein)
Partager