Navigation Internet
Bonjour à tous,
Je début en navigation internet avec Excel.
J'ai récupéré ce bout de code sur internet, mais il y a une erreur d'exécution 13 sur la ligne :
Set InputGoogleBouton = IEDoc.all("btnK")
Voici le code entier, rangé dans un module excel :
Option Explicit
Sub RechercheVBAExcel()
'Inscrire du texte dans une zone de texte ex: zone de recherche google
'*********************************************************************
'Déclaration de variables
'Dim IE As New InternetExplorer 'en référencant
Dim IE As Object 'en Late Binding
Dim IEDoc As HTMLDocument
Dim InputGoogleZoneTexte As HTMLInputElement
Dim InputGoogleBouton As HTMLInputElement
Dim SelectGoogleBouton As HTMLSelectElement
Set IE = CreateObject("internetexplorer.application") 'en Late Binding
'Chargement d'une page Web
IE.navigate "https://www.google.fr/"
'Affichage de la fenêtre IE
IE.Visible = True
'Attente chargement
WaitIE IE
'on pointe le membre du document
Set IEDoc = IE.document
WaitDoc IEDoc
'on pointe notre zone de texte
Set InputGoogleZoneTexte = IEDoc.all("q")
'on définit le texte que l'on veut saisir dans zone de rech
InputGoogleZoneTexte.Value = "VBA Excel"
InputGoogleZoneTexte.FireEvent "OnPaste"
'on pointe le bouton rech
Set InputGoogleBouton = IEDoc.all("btnK")
' on simule un clic
SelectGoogleBouton.Click
'Attente la fin de chargement
WaitIE IE
WaitDoc IEDoc
'libération de la variable
Set IE = Nothing
Set IEDoc = Nothing
'Permet de quitter la page web
'IE.Quit
End Sub
Sub WaitIE(IE As InternetExplorer)
'Boucle tant que la page n'est pas totalement chargée
'****************************************************
Do Until IE.readyState = READYSTATE_COMPLETE And (Not IE.Busy)
DoEvents
Loop
End Sub
Sub WaitDoc(doc As HTMLDocument)
Do While Not doc.readyState = "complete"
DoEvents
Loop
End Sub
pouvez-vous m'aider s'il vous plait ?
Cordialement,
Bonjour à tous,
Je me permets de revenir vers vous, pouvez-vous m'aider sur ce sujet ?
J'espère que c'est la bonne section du forum..
Merci d'avance,
Romain.
Bonjour,
Je suppose que le code vient d'ici https://forum.excel-pratique.com/viewtopic.php?t=57501
J'ai testé mais en effet j'ai aussi des erreurs, et pas que celle mentionnée
Bref, je pense simplement que le site a évolué, pourtant je trouve bien btnk dans le code source
Que souhaites-tu faire ? car il y a plus simple ... il suffit de mettre les termes recherchés dans l'url :
https://www.google.fr/search?&q=forum+excel+pratique
Si tu ne trouves pas le bouton, tu peux utiliser sendkeys pour simuler la tabulation et la touche entrée
SendKeys "{TAB}", True
SendKeys "{ENTER}", True
Bonsoir et merci pour tes réponses.
Le but est simplement de me familiariser un peu avec des bases.
Apres avoir acquis ces quelques bases, le but et de pouvoir piloter un site intranet (site du boulot) automatiquement via un fichier Excel (...)
Pour autant, je ne comprends pas pourquoi cette méthode ne marche plus.. Elle était pourtant si claire pour moi.
Effectivement, je peux utiliser d'autre méthodes, celles que tu me présentes et que j'avais déjà testé.
Mais comme le but étant d'apprendre les bases, je ne comprenais pas le fonctionnement.
En espérant que sur l'intranet, cela fonctionne mieux.. Bizard.
Merci,
OK, alors bon courage pour la suite (j'ai fait différentes tentatives, je n'ai pas réussi ... peut-être Pierre56 qui est un grand spécialiste !). Et essaye sur des sites plus simples, y compris ton intranet, car le code source de google est particulièrement complexe !!
Parfait.
En tout cas, merci pour tes réponses.
Je pensais que Google était le plus simple.. Une simple recherche à réaliser via Excel.
Oui si un spécialiste a une réponse, ça permet d'éclaircir un point..
Merci, Bonne soirée,
Après réflexion ... le problème vient de ce que InputGoogleBouton ne serait pas un HTMLInputElement.
Change en Dim InputGoogleBouton As Object
et la ligne n'est plus en défaut ... cela reste curieux d'autant que l'essai qui suit démontre l'inverse.
Le second problème est que SelectGoogleBouton n'est pas défini ... je pense que tu voulais mettre InputGoogleBouton mais par contre il n'accepte pas le click dessus.
Autre variante est d'utiliser submit avec la form tsf :
Option Explicit
Sub RechercheVBAExcel()
'Inscrire du texte dans une zone de texte ex: zone de recherche google
'*********************************************************************
'Déclaration de variables
'Dim IE As New InternetExplorer 'en référencant
Dim IE As Object 'en Late Binding
Dim IEDoc As HTMLDocument
Dim InputGoogleZoneTexte As HTMLInputElement
Dim FormGoogle As HTMLFormElement
Dim SelectGoogleBouton As HTMLSelectElement
Set IE = CreateObject("internetexplorer.application") 'en Late Binding
'Chargement d'une page Web
IE.navigate "https://www.google.fr/"
'Affichage de la fenêtre IE
IE.Visible = True
'Attente chargement
WaitIE IE
'on pointe le membre du document
Set IEDoc = IE.Document
WaitDoc IEDoc
'on pointe notre zone de texte
Set InputGoogleZoneTexte = IEDoc.all("q")
'on définit le texte que l'on veut saisir dans zone de rech
InputGoogleZoneTexte.Value = "VBA Excel"
InputGoogleZoneTexte.FireEvent "OnPaste"
Set FormGoogle = IEDoc.all("tsf")
FormGoogle.submit
'Attente la fin de chargement
WaitIE IE
WaitDoc IEDoc
'libération de la variable
Set IE = Nothing
Set IEDoc = Nothing
'Permet de quitter la page web
'IE.Quit
End Sub
Sub WaitIE(IE As InternetExplorer)
'Boucle tant que la page n'est pas totalement chargée
'****************************************************
Do Until IE.readyState = READYSTATE_COMPLETE And (Not IE.Busy)
DoEvents
Loop
End Sub
Sub WaitDoc(doc As HTMLDocument)
Do While Not doc.readyState = "complete"
DoEvents
Loop
End Sub
Autre solution avec click : balayer tout le document !!
Dim MyHTML_Element As HTMLElementCollection
'...
For Each MyHTML_Element In IEDoc.getElementsByTagName("input")
If MyHTML_Element.Type = "submit" Then
Debug.Print MyHTML_Element.Name
MyHTML_Element.Click
Exit For
End If
Next
donc fondamentalement, ton code est bon car il indique bien dans le debugger le nom btnK !!! et a minima cela te montre qu'en effet le click fonctionne ...
Voici le fin mot de l'affaire ... si je fais
Dim MyHTML_Element As HTMLElementCollection
' ...
For Each MyHTML_Element In IEDoc.getElementsByTagName("input")
Debug.Print MyHTML_Element.Name & " >>> " & MyHTML_Element.Type
Next
J'obtiens :
source >>> hidden
ei >>> hidden
q >>> text
btnK >>> submit
btnI >>> submit
btnK >>> submit
btnI >>> submit
Google a donc doublé les boutons et donc le fameux IEDoc.all("btnK")
n'est en effet pas un HTMLInputElement mais un tableau d'HTMLInputElement !!!
Il suffit donc d'en prendre le premier (ou second) élément pour cliquer dessus ! CQFD ...
La correction est donc :
'on pointe le bouton rech
Set InputGoogleBouton = IEDoc.all("btnK")(0)
' on simule un clic
InputGoogleBouton.Click
comme quoi jouer avec les sites google est assez pointu ... ils ont été assez malins en doublant ces boutons submit pour nous prendre en défaut.
Salut tout le monde,
un essai
Option Explicit
Sub RechercheVBAExcel()
'Inscrire du texte dans une zone de texte ex: zone de recherche google
'*********************************************************************
'Déclaration de variables
'Dim IE As New InternetExplorer 'en référencant
Dim IE As Object 'en Late Binding
Dim IEDoc As HTMLDocument
Dim InputGoogleZoneTexte As HTMLInputElement
Set IE = CreateObject("internetexplorer.application") 'en Late Binding
'Chargement d'une page Web
IE.navigate "https://www.google.fr/"
'Affichage de la fenêtre IE
IE.Visible = True
'Attente chargement
WaitIE IE
'on pointe le membre du document
Set IEDoc = IE.document
WaitDoc IEDoc
'on pointe notre zone de texte
Set InputGoogleZoneTexte = IEDoc.all("q")
'on définit le texte que l'on veut saisir dans zone de rech
InputGoogleZoneTexte.Value = "VBA Excel"
InputGoogleZoneTexte.FireEvent "OnPaste"
'Attente la fin de chargement
WaitDoc IEDoc
WaitIE IE
IE.Visible = True
Application.SendKeys "{TAB}"
Application.SendKeys "~"
'libération de la variable
Set IE = Nothing
Set IEDoc = Nothing
'Permet de quitter la page web
'IE.Quit
End Sub
Sub WaitIE(IE As InternetExplorer)
'Boucle tant que la page n'est pas totalement chargée
'****************************************************
Do Until IE.readyState = READYSTATE_COMPLETE And (Not IE.Busy)
DoEvents
Loop
End Sub
Sub WaitDoc(doc As HTMLDocument)
Do While Not doc.readyState = "complete"
DoEvents
Loop
End Sub
voici une methode plus simple à relier à un boutton
Option Explicit
Private Sub CommandButton1_Click()
Dim IE As InternetExplorer
Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = True
IE.navigate ("http://www.google.com")
Do
DoEvents
Loop Until IE.readyState = 4
IE.document.all("q").Value = "VBA Excel"
SendKeys "{ENTER}"
Do
DoEvents
Loop Until IE.readyState = 4
End Sub
Bonjour m3ellem1
C'est effectivement la solution que j'avais proposée ici aussi https://forum.excel-pratique.com/viewtopic.php?p=790868#p790868
Mais en fait Tchio77 voulait surtout expérimenter les relations entre VBA et internet et sa question était tout à fait pertinente : pourquoi il n'était pas possible de cliquer sur le bouton ... sauf que le malin google avait caché ce bouton dans un tableau puisqu'il l'avait dupliqué https://forum.excel-pratique.com/viewtopic.php?p=790908#p790908. Moi cela me rassure aussi car cette affaire était vraiment curieuse ! J'en perdais mon latin.
Mais tes solutions sont tout à fait opérationnelles et plus rapides que chercher dans le DOM du site les noms des objets.
Bonjour à tous,
Waouh, Steelson tu dors de temps en temps ?
Merci à tous pour vos réponses.
Je ne suis pas certain d'avoir tous compris (normal, je débute..), mais j'ai essayé.
Voici le code posé dans un module :
Option Explicit
Sub RechercheVBAExcel()
'Inscrire du texte dans une zone de texte ex: zone de recherche google
'*********************************************************************
'Déclaration de variables
'Dim IE As New InternetExplorer 'en référencant
Dim IE As Object 'en Late Binding
Dim IEDoc As HTMLDocument
Dim InputGoogleZoneTexte As HTMLInputElement
Dim InputGoogleBouton As HTMLInputElement
Set IE = CreateObject("internetexplorer.application") 'en Late Binding
'Chargement d'une page Web
IE.navigate "https://www.google.fr/"
'Affichage de la fenêtre IE
IE.Visible = True
'Attente chargement
WaitIE IE
'on pointe le membre du document
Set IEDoc = IE.document
WaitDoc IEDoc
'on pointe notre zone de texte
Set InputGoogleZoneTexte = IEDoc.all("q")
'on définit le texte que l'on veut saisir dans zone de rech
InputGoogleZoneTexte.Value = "VBA Excel"
InputGoogleZoneTexte.FireEvent "OnPaste"
'on pointe le bouton rech
Set InputGoogleBouton = IEDoc.all("btnK")(0)
' on simule un clic
SelectGoogleBouton.Click
'Attente la fin de chargement
WaitIE IE
WaitDoc IEDoc
'libération de la variable
Set IE = Nothing
Set IEDoc = Nothing
'Permet de quitter la page web
'IE.Quit
End Sub
Sub WaitIE(IE As InternetExplorer)
'Boucle tant que la page n'est pas totalement chargée
'****************************************************
Do Until IE.readyState = READYSTATE_COMPLETE And (Not IE.Busy)
DoEvents
Loop
End Sub
Sub WaitDoc(doc As HTMLDocument)
Do While Not doc.readyState = "complete"
DoEvents
Loop
End Sub
J'obtiens une erreur de compilation, type défini par l'utilisateur.
Bizard, j'ai même essayé les différents code que vous m'avez fourni dans vos messages..
Je dois donc oublier de déclarer une variable.
Peux-tu me dire à quoi sert ce code :
Dim MyHTML_Element As HTMLElementCollection
' ...
For Each MyHTML_Element In IEDoc.getElementsByTagName("input")
Debug.Print MyHTML_Element.Name & " >>> " & MyHTML_Element.Type
Next
Merci pour vos réponses,
Waouh, Steelson tu dors de temps en temps ?
cela m'arrive ... 4h par nuit puis ensuite une pause la matin et le midi !
J'obtiens une erreur de compilation, type défini par l'utilisateur.
Bizard, j'ai même essayé les différents code que vous m'avez fourni dans vos messages..
Je dois donc oublier de déclarer une variable.
non ce n'est pas une variable, mais des références ... et je ne sais jamais lesquelles, mieux vaut dans ce cas partir d'un fichier qui a activé les références et fonctionne (comme le pot de yaourt ou le pain au levain).
et puis ...
' on simule un clic
SelectGoogleBouton.Click
à remplacer par ...
' on simule un clic
InputGoogleBouton.Click
car SelectGoogleBouton n'est défini nulle part !
Peux-tu me dire à quoi sert ce code :
Dim MyHTML_Element As HTMLElementCollection ' ... For Each MyHTML_Element In IEDoc.getElementsByTagName("input") Debug.Print MyHTML_Element.Name & " >>> " & MyHTML_Element.Type Next
L'objet de ce code était de rechercher tous les input, et de les afficher dans la fenêtre exécution de VBE (voir photo ci-dessus) ... ce qui a permis de confirmer qu'il y avait 2 boutons du même nom et donc que le fameux IEDoc.all("btnK") renvoyait un tableau et non un HTMLInputElement !