Retour aux exemples de code VBA

Automatiser Internet Explorer (IE) à l’Aide de VBA

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 :

vba selenium web automation

(Je reçois une commission d’affiliation pour le cours de Dan)

Naviguer vers une page Web avec VBA

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.

alt text

En savoir plus !

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.

vba selenium web automation

(Je reçois une commission d’affiliation pour le cours de Dan)

Témoignage d’un des étudiants de Dan

vba-free-addin

Module Complémentaire d'Exemples de Code VBA

Accédez facilement à tous les exemples disponibles sur le site.

Naviguez simplement dans le menu, cliquez, et le code sera inséré directement dans votre module. Module complémentaire .xlam.

(Aucune installation requise!)

Téléchargement gratuit

Retour aux exemples de code VBA