Automatiser Internet Explorer (IE) à l'aide de VBA

Cette page contient des exemples de codage pour l'automatisation d'Internet Explorer (IE) à l'aide de VBA.

** Mise à jour 6/7/2019 : Actuellement, le meilleur moyen d'automatiser le Web avec VBA consiste à utiliser Selenium. Cet article NE couvre PAS le sélénium. Les exemples ci-dessous fonctionneront et pourraient suffire à vos besoins. Cependant, si vous avez des besoins plus avancés ou si vous souhaitez devenir un expert de l'automatisation Web, je vous recommande fortement d'utiliser plutôt Selenium. Le cours de Dan Strong sur l'automatisation Web (réduction disponible via ce lien) est une ressource fantastique pour apprendre Selenium :

(Je reçois une commission d'affiliation du cours de Dan)

Accédez à 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 zone de saisie.

12345678910111213141516171819202122232425262728293031323334353637 Sous Automate_IE_Load_Page()'Cela chargera une page Web dans IEDim j'aussi longtempsDiminuer l'URL en tant que chaîneDim IE en tant qu'objetDim objElement en tant qu'objetDim objCollection en tant qu'objet'Créer un objet InternetExplorerDéfinir IE = CreateObject("InternetExplorer.Application")'Définir IE.Visible = True pour rendre IE visible, ou False pour qu'IE s'exécute en arrière-planIE.Visible = Vrai'Définir l'URLURL = "https://www.automateexcel.com/excel/"'Naviguer vers l'URLURL de navigation IE.' La barre d'état indique à l'utilisateur que le site Web est en cours de chargementApplication.StatusBar = URL & " est en cours de chargement. Veuillez patienter… "' Attendez pendant le chargement d'IE… ' IE ReadyState = 4 signifie que la page Web a été chargée (la première boucle est définie pour éviter de sauter par inadvertance la deuxième boucle)Do While IE.ReadyState = 4: DoEvents: Loop 'Do WhileFaire jusqu'à IE.ReadyState = 4 : DoEvents : boucle ' Faire jusqu'à'Page Web chargéeApplication.StatusBar = URL & " Chargé "'Décharger IEDéfinir IE = RienDéfinir objElement = RienDéfinir objCollection = RienFin du sous-marin

Un problème très courant que les gens rencontrent lorsqu'ils travaillent avec IE dans VBA est que VBA tente d'exécuter du code avant qu'Internet Explorer ne soit complètement chargé. En utilisant ce code, vous dites à VBA de répéter une boucle jusqu'à ce qu'IE soit prêt (IE.ReadyState - 4).

1234 ' Attendez pendant le chargement d'IE… ' IE ReadyState = 4 signifie que la page Web a été chargée (la première boucle est définie pour éviter de sauter par inadvertance la deuxième boucle)Do While IE.ReadyState = 4: DoEvents: Loop 'Do WhileFaire jusqu'à IE.ReadyState = 4 : DoEvents : boucle ' Faire jusqu'à

Notez également cette ligne de code :

1 IE.Visible = VRAI

Ce code bascule si IE s'exécute en arrière-plan ou au premier plan.

Ouvrir l'URL et saisir les données dans le formulaire à l'aide de VBA

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 'Cela doit aller en haut de votre module. Il est utilisé pour définir IE comme fenêtre activePublic Declare Function SetForegroundWindow Lib "user32" (ByVal HWND As Long) As LongSous Automate_IE_Enter_Data()'Cela chargera une page Web dans IEDim j'aussi longtempsDiminuer l'URL en tant que chaîneDim IE en tant qu'objetDim objElement en tant qu'objetDim objCollection en tant qu'objetDim HWNDSrc aussi long'Créer un objet InternetExplorerDéfinir IE = CreateObject("InternetExplorer.Application")'Définir IE.Visible = True pour rendre IE visible, ou False pour qu'IE s'exécute en arrière-planIE.Visible = Vrai'Définir l'URLURL = "https://www.automateexcel.com/vba"'Naviguer vers l'URLIE. URL de navigation' La barre d'état indique à l'utilisateur que le site Web est en cours de chargementApplication.StatusBar = URL & " est en cours de chargement. Veuillez patienter… "' Attendez pendant le chargement d'IE… ' IE ReadyState = 4 signifie que la page Web a été chargée (la première boucle est définie pour éviter de sauter par inadvertance la deuxième boucle)Do While IE.ReadyState = 4: DoEvents: LoopFaire jusqu'à IE.ReadyState = 4 : DoEvents : boucle'Page Web chargéeApplication.StatusBar = URL & " Chargé"'Obtenir l'ID de fenêtre pour IE afin que nous puissions le définir comme fenêtre d'activationHWNDSrc = IE.HWND'Définir IE comme fenêtre activeSetForegroundWindow HWNDSrc'Rechercher et remplir la zone de saisien = 0Pour chaque élément dans IE.document.allSi itm = "[objet HTMLInputElement]" Alorsn = n + 1Si n = 3 Alorsitm.Value = "feuille de travail"itm.Focus 'Active la zone de saisie (fait apparaître le curseur)Application.SendKeys "{w}", True 'Simule une frappe 'W'. True dit à VBA d'attendre'jusqu'à ce que la frappe soit terminée avant de continuer, permettant'javascript sur la page pour exécuter et filtrer la tableGoTo endmacroFin siFin siProchain'Décharger IEmacro de fin :Définir IE = RienDéfinir objElement = RienDéfinir objCollection = RienFin du sous-marin

GetElement dans IE en utilisant VBA

Interagir avec des objets dans Internet Explorer peut souvent être pénible. Vous devez identifier avec quel objet spécifique travailler. Dans le code ci-dessus, nous recherchons la 3ème instance de « [object HTMLInputElement] » (un formulaire de saisie). Ensuite, nous entrons "orksheet" dans le formulaire de saisie (itm.value = "orksheet"), déplaçons le curseur dans le formulaire de saisie (itm.focus) et tapons "w". Taper "w" est nécessaire dans ce cas pour activer le javascript utilisé pour filtrer la table.

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 voudrez utiliser les options suivantes :

1234 IE.document.getelementbyid("ID").value = "value" 'Rechercher par IDIE.document.getelementsbytagname("ID").value = "value" 'Rechercher par baliseIE.document.getelementsbyclassname("ID").value = "value" 'Rechercher par classeIE.document.getelementsbyname("ID").value = "value" 'Rechercher par nom

Vous pouvez rencontrer des problèmes lors de l'utilisation de ces méthodes s'il existe plusieurs éléments portant 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 : Se concentrer (itm.focus) pour activer le curseur dans le formulaire.

Vous pouvez trouver plus d'exemples d'événements, de méthodes et de propriétés d'objet/élément ici : https://msdn.microsoft.com/en-us/library/ms535893(v=vs.85).aspx

Tous ne fonctionneront pas avec chaque objet / élément et il peut y avoir pas mal d'essais et d'erreurs lors de l'interaction avec des objets dans IE.

Envoyer les clés vers Internet Explorer

Nous avons utilisé la commande Sendkeys dans le code ci-dessus :

1 Application.SendKeys "{w}", True

Sendkeys devrait généralement être un dernier recours. Vous devriez généralement pouvoir interagir directement avec les objets, mais il est parfois plus facile d'utiliser simplement la commande Sendkeys. Sendkeys est essentiellement la même chose que de taper avec le clavier. Vous devez vous assurer que les fenêtres et les objets appropriés sont sélectionnés avant de continuer. 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 clé pour entrer (généralement entourée de {}… {enter}, {q}… .)
2. Attendez que Sendkeys soit terminé avant de continuer VRAI/FAUX. Vous souhaiterez généralement que ce paramètre soit défini 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 afin que la macro s'exécute en arrière-plan pendant que vous continuez à travailler :

1 Application.Run ("Automate_IE_Load_Page")

Remarque : Ce code pourrait potentiellement interrompre votre travail ou votre travail pourrait interférer avec le code. Par exemple, si vous utilisez SendKeys, Sendkeys peut envoyer une frappe à la mauvaise application. Soyez très prudent avec cela.
2. Masquer IE :

1 IE.Visible = Faux

Sélénium & VBA

Si vous avez trouvé cet article utile, vous pouvez consulter le cours de Dan Strong sur l'automatisation Web. Il explique comment utiliser Selenium avec VBA.

(Je reçois une commission d'affiliation du cours de Dan)

Témoignage d'un des étudiants de Dan

https://excelvbaisfun.com/wp-content/uploads/2019/06/dan_strong_complete_web_automation_course_review_VbFn2vwul8A_1080p.mp4

Vous contribuerez au développement du site, partager la page avec vos amis

wave wave wave wave wave