Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Variable Objet Innertext

marcodebute350

XLDnaute Nouveau
Bonjour,

Après 3 jours de recherches infructueuses sur de nombreux forums, je me décide à poster pour demander de l'aide.
Je souhaite récupérer sur mon tableau excel le pays qui s'affiche sur Google en tapant par exemple "Moscou Pays".
J'ai un code vba mais qui apparemment ne fonctionne pas au niveau des variables définies.
Voici le code VBA que j'ai fait:
Code:
Dim IE As New InternetExplorer
Dim IEDoc As HTMLDocument
Dim InputGoogleZoneTexte As HTMLInputElement
Dim InputGoogleBouton As HTMLInputElement
Dim HtmlElementStandard As HTMLGenericElement

IE.Navigate "www.google.fr"
IE.Visible = False
WaitIE IE

Set IEDoc = IE.Document
Set InputGoogleZoneTexte = IEDoc.all("q")
InputGoogleZoneTexte.Value = Sheets("BASE").Range("D3").Value & " Pays"
IE.Document.Forms(0).submit
WaitIE IE

Set HtmlElementStandard = IEDoc.getElementsByClassName("Z0LcW").Item(1)
MsgBox HtmlElementStandard.innerText

   Set IE = Nothing
   Set IEDoc = Nothing
   Set HtmlElementStandard = Nothing

J'obtient une erreur sur la ligne en jaune qui me dit "variable objet non définie".
Je joins aussi en image le code source de la page google (et le texte "Russie" que je souhaite récupérer).

Pourriez-vous m'aider svp?
Je vous remercie,

Marc
 

Pièces jointes

  • Code HTML.JPG
    106 KB · Affichages: 43

Dranreb

XLDnaute Barbatruc
Bonjour.
Je ne peux guère vous aider sur ce genre de chose, juste deux conseils :
1) — Mettez Option Explicit en tête du module pour avoir des messages plus clairs lors de la compilation, vu qu'il ne tentera plus une exécution s'il manque quelque chose pour qu'elle ait des chances de fonctionner.
2) — Vérifiez si les bibliothèques définissant ces types d'objets sont bien associées au projet VBA (menu Outils, Références…)
 

marcodebute350

XLDnaute Nouveau
Merci tout de même pour cette réponse rapide Dranreb.
J'ai rajouté le Option Explicit en haut du module, mais ça ne me donne pas plus d'explication, il lance quand même la macro pour s'arrêter à la ligne en jaune et me dire "Variable objet non défini".
Pour ce qui est des références, j'ai vérifié, et je pense qu'elles sont activées. Je vous les mets en PJ pour vérification.
 

Pièces jointes

  • Références.JPG
    37.5 KB · Affichages: 27

Dranreb

XLDnaute Barbatruc
J'ignore pourquoi ça ne marche pas, écrit comme mis en commentaire :
Comme en dessous ça à l'air de marcher :
VB:
'Set xobj = IEDoc.getElementsByClassName("Z0LcW").Item(0)
'Range("B2").Value = xobj.innerText
Range("B2").Value = IEDoc.getElementsByClassName("Z0LcW").Item(0).innerText
Notez que si déjà j'avais décidé de décomposer, je n'aurais certainement pas déclaré xobj As Variant, mais j'aurais cherché à savoir de quel type d'objet il s'agit. Un espion me dit: Object/HTMLDivElement, alors essayons: dim xobj as htmldivelement
—> il corrige la casse: Dim xobj As HTMLDivElement, ce qui prouve qu'il connait ce type. Ça aurait des chance de mieux marcher en re-décomposant, mais je ne vois pas ce que ça apporterait.
 

marcodebute350

XLDnaute Nouveau
Merci pour ton aide mais malheureusement, ça ne fonctionne toujours pas chez moi.
Il me mets toujours Objet non défini sur la ligne:
Range("B2").Value = IEDoc.getElementsByClassName("Z0LcW").Item(0).innerText
Par contre le HTMLDivElement est déjà mieux que le Variant effectivement, merci. Mon espion reconnait la class.
 

marcodebute350

XLDnaute Nouveau
Après avoir essayé de décomposer sans résultat, j'ai trouvé la solution
Le Set xobj = IEDoc.getElementsByClassName("Z0LcW").Item(0) renvoyait Nothing.
Il fallait créer une boucle pour attendre qu'il le trouve.
Code:
Do
Set xobj = IEDoc.getElementsByClassName("Z0LcW").Item(0)
Loop While xobj Is Nothing
 
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…