Automatiser Internet Explorer (IE) à l’Aide de VBA
In this Article
Cette page contient des exemples de codes pour automatiser Internet Explorer (IE) à l’aide de VBA.
** Mise à jour 6/7/2019 : Actuellement, la meilleure façon de réaliser des tâches d’automatisation Web avec VBA est d’utiliser Selenium. Cet article ne couvre PAS Selenium. Les exemples ci-dessous fonctionneront, et pourraient être suffisants pour vos besoins. Cependant, si vous avez des besoins plus avancés ou si vous voulez devenir un expert de l’automatisation Web, je vous recommande vivement d’utiliser Selenium. Le cours de Dan Strong sur l’automatisation du Web (remise disponible via ce lien) est une ressource fantastique pour apprendre Selenium :
Le premier morceau de code ouvre IE et navigue vers un site Web. Le deuxième morceau de code ouvre IE, navigue vers un site Web et interagit avec une boîte de saisie.
Sub Automatisation_Chargement_PageWeb_IE()
'Ce code chargera une page web dans Internet Explorer
Dim i As Long
Dim URL As String
Dim IE As Object
Dim objElement As Object
Dim objCollection As Object
'Création de l'objet InternetExplorer
Set IE = CreateObject("InternetExplorer.Application")
'Défini la propriété Visible à True pour rendre la page visible
'Utiliser false pour faire fonctionner Internet Explorer en arrière-plan
IE.Visible = True
'Définition de l'URL
URL = "https://www.automateexcel.com/excel/"
'Navigation à l'adresse spécifiée
IE.Navigate URL
'La barre de statut communique à l'utiliteur que la page est en chargement
Application.StatusBar = URL & " is loading. Please wait..."
'Attente du chargement complet de la page...
'IE ReadyState = 4 signifie que la page est chargée (la première boucle évite que passer par dessus la deuxième par inadvertance)
Do While IE.ReadyState = 4: DoEvents: Loop 'Do While
Do Until IE.ReadyState = 4: DoEvents: Loop 'Do Until
'Page Web Chargée
Application.StatusBar = URL & " Loaded"
'Libération des Objets IE
Set IE = Nothing
Set objElement = Nothing
Set objCollection = Nothing
End Sub
Un problème très courant que les gens rencontrent lorsqu’ils travaillent avec IE en VBA est que VBA tente d’exécuter du code avant qu’Internet Explorer ne soit complètement chargé. En utilisant ce code, vous demandez à VBA de répéter une boucle jusqu’à ce que IE soit prêt (IE.ReadyState – 4).
'Attente du chargement complet de la page...
'IE ReadyState = 4 signifie que la page est chargée
'(la première boucle évite de passer par dessus la deuxième par inadvertance)
Do While IE.ReadyState = 4 : DoEvents : Loop 'Do While
Do Until IE.ReadyState = 4 : DoEvents : Loop 'Do Until
Notez également cette ligne de code :
IE.Visible = TRUE
Ce code permet de déterminer si IE s’exécute en arrière-plan ou au premier plan.
La Programmation VBA en toute Simplicité
Ne cherchez plus de code VBA en ligne. Utilisez le complément Code VBA pour insérer rapidement le code souhaité dans l’éditeur Visual Basic.
Ouvrir une URL et Saisir des Données dans un Formulaire en Utilisant VBA
'Ceci doit être placé en haut de votre module. Elle est utilisée pour définir IE comme fenêtre active
#If Win64 = 1 And VBA7 = 1 Then
Private Declare PtrSafe Function SetForegroundWindow Lib "user32" (ByVal hWnd As LongPtr) As LongPtr
#Else
Public Declare Function SetForegroundWindow Lib "user32" (ByVal hWnd As Long) As Long
#End If
Sub Automatisation_IE_Entrée_Données()
'Ce code chargera une page web dans Internet Explorer
Dim i As Long
Dim URL As String
Dim IE As Object
Dim objElement As Object
Dim objCollection As Object
Dim HWNDSrc As Long
'Création d'un objet InternetExplorer
Set IE = CreateObject("InternetExplorer.Application")
'Défini la propriété Visible à True pour rendre la page visible
'Utiliser false pour faire fonctionner Internet Explorer en arrière-plan
IE.Visible = True
'Définition de l'URL
URL = "https://www.automateexcel.com/vba"
'Navigation à l'adresse spécifiée
IE.Navigate URL
'La barre de statut communique à l'utiliteur que la page est en chargement
Application.StatusBar = URL & " se charge. Veuillez patienter..."
'Attente du chargement complet de la page...
'IE ReadyState = 4 signifie que la page est chargée (la première boucle évite que passer par dessus la deuxième par inadvertance)
Do While IE.ReadyState = 4: DoEvents: Loop
Do Until IE.ReadyState = 4: DoEvents: Loop
'Page Web chargée
Application.StatusBar = URL & " Loaded"
'Obtenir l 'ID de la fenêtre IE afin de la définir comme fenêtre active
HWNDSrc = IE.hWnd
'Définir IE comme fenêtre active
SetForegroundWindow HWNDSrc
'Recherche et remplissage de la zone de saisie
n = 0
For Each itm In IE.document.all
If itm = "[object HTMLInputElement]" Then
n = n + 1
If n = 3 Then
itm.Value = " orksheet "
itm.Focus 'Active le champ de saisie (fait apparaître le curseur)
Application.SendKeys "{w}", True 'Simule une frappe de touche 'W'. True indique à VBA
'd'attendre la fin de la frappe avant de poursuivre,
'ce qui permet à javascript de la page de s'exécuter
'et de filtrer le tableau
GoTo endmacro
End If
End If
Next itm
'Libération des Objets IE
endmacro:
Set IE = Nothing
Set objElement = Nothing
Set objCollection = Nothing
End Sub
GetElement dans IE avec VBA
Interagir avec des objets dans Internet Explorer peut souvent s’avérer pénible. Vous devez identifier l’objet spécifique avec lequel vous voulez travailler. Dans le code ci-dessus, nous recherchons la troisième instance de « [objet HTMLInputElement] » (un formulaire de saisie). Ensuite, nous saisissons « orksheet » dans le formulaire de saisie (itm.value = « orksheet »), nous déplaçons le curseur dans le formulaire de saisie (itm.focus) et nous tapons « w ». La saisie de « w » est nécessaire dans ce cas pour activer le javascript utilisé pour filtrer le tableau.
Il existe des méthodes plus directes pour sélectionner des objets, mais cette méthode devrait fonctionner si tout le reste échoue.
Pour utiliser ces autres méthodes, vous devrez utiliser les options suivantes :
IE.document.getelementbyid("ID").Value = "value" 'Recherche par ID
IE.document.getelementsbytagname("ID").Value = "value" 'Recherche par balise
IE.document.getelementsbyclassname("ID").Value = "value" 'Recherche par classe
IE.document.getelementsbyname("ID").Value = "value" 'Recherche par nom
Vous pouvez rencontrer des problèmes en utilisant ces méthodes s’il y a plus d’un élément avec le même nom. En utilisant une boucle (comme dans l’exemple de code ci-dessus), vous pouvez spécifier l’instance de l’élément à utiliser.
Interagir avec IE en Utilisant VBA
Dans le code ci-dessus, nous utilisons l’événement : Focus (itm.focus) pour activer le curseur dans le formulaire.
Vous trouverez d’autres exemples d’événements, de méthodes et de propriétés d’objets/éléments ici : https://msdn.microsoft.com/en-us/library/ms535893(v=vs.85).aspx
Tous ces éléments ne fonctionneront pas avec tous les objets/éléments et il faudra peut-être procéder par tâtonnement pour interagir avec les objets dans IE.
Envoyer des Touches à Internet Explorer
Nous avons utilisé la commande Sendkeys dans le code ci-dessus :
Application.SendKeys "{w}", True
Les Sendkeys doivent généralement être utilisés en dernier recours. Vous devriez généralement être en mesure d’interagir directement avec les objets, mais il est parfois plus facile d’utiliser la commande Sendkeys. Sendkeys est essentiellement la même chose que de taper au clavier. Vous devez vous assurer que les bonnes fenêtres et les bons objets sont sélectionnés avant de procéder. Sendkeys peut également déclencher des événements qui s’exécutent en fonction de l’interaction de l’utilisateur sur le Web. Dans l’exemple ci-dessus, nous utilisons Sendkeys pour activer le filtre Javascript dans le tableau que nous utilisons sur la page Web.
Sendkeys a deux entrées :
1. la touche à saisir (généralement entourée de {}… {enter}, {q}….)
2. Attendez que Sendkeys ait terminé avant de passer à TRUE/FALSE.
Vous voudrez généralement mettre cette option sur TRUE lorsque vous travaillez avec Internet Explorer.
Exécuter Internet Explorer en Arrière-Plan
Pour exécuter Internet Explorer en arrière-plan, vous devez faire deux choses :
1. Appelez la macro contenant le code IE avec Application.Run pour que la macro s’exécute en arrière-plan pendant que vous continuez à travailler :
Application.Run ("Automatisation_Chargement_PageWeb_IE")
Remarque : ce code peut potentiellement interrompre votre travail, ou votre travail peut interférer avec le code. Par exemple, si vous utilisez SendKeys, Sendkeys peut envoyer une touche à la mauvaise application. Soyez très prudent avec cela.
2. Masquer IE :
IE.Visible = False
Selenium et VBA
Si vous avez trouvé cet article utile, vous pouvez consulter le cours de Dan Strong sur l’automatisation du Web. Il explique comment utiliser Selenium avec VBA.
Témoignage d’un des étudiants de Dan