IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

VBA et développement Web

Image non disponible


précédentsommairesuivant

III. Contrôles internet

Pour dialoguer avec internet, il paraît naturel de vouloir piloter un navigateur tel qu'Internet Explorer.
Dans cet article, nous n'aborderons que ce navigateur.

III-A. Créer un navigateur internet externe à l'application

Le navigateur se présente en VBA comme un objet de type InternetExplorer.
Cet objet représente un navigateur internet tel qu'il se présente lorsqu'on exécute Internet Explorer.

Pour disposer dans VBA des instructions nécessaires, il faut d'abord ajouter la librairie Microsoft Internet Controls.

Ensuite créez dans l'éditeur VBA un nouveau module de code : Insertion => Module.

Avant de créer le module, je vous conseille de modifier l'option de déclaration des variables :
- dans le menu : Outils => Options... ;
- cochez la case Déclaration des variables obligatoire.

Cela a pour effet d'ajouter en en-tête de chaque nouveau module l'instruction Option Explicit.
Cette instruction impose la déclaration de toutes les variables utilisées dans le code.
En précisant le type exact de toutes nos variables, on évite des conversions inutiles de données.
De plus, sans cette option, il est fréquent de faire des erreurs d'étourderie difficiles à déceler (une faute de frappe dans un nom de variable par exemple).
Il est également possible d'écrire cette instruction Option Explicit manuellement.

Nous allons écrire une petite procédure :

 
Sélectionnez
Public Sub CreerNavigateur()
            
End Sub


Dans cette procédure, commençons par déclarer notre objet navigateur :

 
Sélectionnez
Dim oNav As SHDocVw.InternetExplorer


Il n'y parait pas, mais il y a déjà beaucoup à dire sur cette ligne de code.

D'abord vous noterez que notre variable oNav qui contient un objet est préfixée par la lettre o.
Ce n'est pas grand-chose mais il est souvent utile de voir en un coup d'œil sur un code assez complexe de quel type est une variable.
Je vous renvoie à ces deux articles pour plus de détails sur les conventions de nommage des variables :
Descriptif des conventions typographiques du code Visual Basic ;
Convention générale de codage pour la programmation.

Ensuite on sait que l'objet que l'on souhaite créer est défini dans la librairie SHDocVw (Microsoft Internet Controls).
Il suffit alors de taper un point après ce nom de librairie pour avoir la liste de toutes les classes de cette librairie.
On pourrait ne pas préfixer la classe InternetExplorer par sa librairie SHDocVw.
Auquel cas VBA rechercherait dans toutes les références actives du projet une classe de nom InternetExplorer, au risque d'utiliser une classe d'une autre librairie.
À ma connaissance, InternetExplorer n'est pas défini dans une autre librairie qu'on utiliserait fréquemment, et donc le nom de librairie n'est pas ici indispensable.

Si vous n'êtes pas familier avec les variables objets, sachez qu'on a seulement déclaré notre variable oNav pour une utilisation future.
Elle n'est pour l'instant liée à aucun objet, le test oNav is Nothing renvoie Vrai.

Pour créer l'objet, il suffit d'utiliser le mot-clé New.

 
Sélectionnez
Set oNav = New SHDocVw.InternetExplorer

Il faut que le type qui suit New soit le même que celui utilisé pour déclarer la variable.

oNav pointe désormais vers un navigateur Internet Explorer.
À noter : ce navigateur est par défaut invisible !
Si vous exécutez le code tel quel, vous allez créer un navigateur qui restera ouvert. On ne pourra le fermer que dans le gestionnaire des tâches.

Garder le navigateur invisible peut être utile pour effectuer un traitement en arrière-plan.
Utilisez alors la méthode Quit de l'objet pour le fermer proprement.


Pour voir le navigateur, définissez sa propriété Visible.

 
Sélectionnez
oNav.Visible = True

Exécutez maintenant la procédure (F5 avec le curseur à l'intérieur de la procédure).
Une application Internet Explorer s'ouvre.

Par défaut, aucune page n'est ouverte.
Demandons la navigation vers une page : Google par exemple.
Il suffit d'utiliser la méthode Navigate de notre objet.

 
Sélectionnez
oNav.Navigate "http://google.fr"

III-B. Intégrer un navigateur internet à l'application

Le navigateur tel que présenté dans le chapitre précédent s'ouvre dans une fenêtre distincte de l'application Office.
Il est également envisageable d'intégrer un navigateur dans un formulaire.
On parle alors de contrôle ActiveX WebBrowser (ou Navigateur Web).
Pour disposer dans VBA du contrôle et des instructions nécessaires, il faut d'abord ajouter la librairie Microsoft Internet Controls.

La méthode de création du contrôle est légèrement différente selon l'application et le type de formulaire.

III-B-1. Intégrer un navigateur internet à un formulaire Access

Avec un formulaire Access, le WebBrowser s'intègre dans un cadre d'objet qui contient l'ActiveX.

Insérez un nouveau contrôle ActiveX :
- avant Access 2007 : menu Insertion => Contrôle ActiveX ;
- à partir d'Access 2007 : onglet Création => groupe Contrôles => Contrôle ActiveX.

Recherchez le contrôle Navigateur Web Microsoft (ou Microsoft Web Browser) et placez-le sur le formulaire.
Par défaut le premier contrôle est nommé WebBrowser0 ; nous le renommons en ctlNav par exemple.
Si vous ne l'avez pas déjà fait, la librairie Microsoft Internet Controls est automatiquement sélectionnée dans les références.

Une fois le contrôle créé, on dispose d'un objet de type WebBrowser (ou Navigateur Web) qui se pilote de manière similaire à un objet InternetExplorer.

Nous allons écrire le code de navigation vers Google à l'ouverture du formulaire.

Afficher les propriétés du formulaire :
- avant Access 2007 : menu Affichage => Propriétés... ;
- à partir d'Access 2007 : onglet Création => groupe Outils => Feuille des propriétés.

Sélectionnez l'événement Sur Ouverture, choisissez [Procédure événementielle] dans la liste déroulante et cliquez sur les trois petits points à droite.

La procédure Form_Open est générée ; écrivons notre code à l'intérieur.

 
Sélectionnez
Private Sub Form_Open(Cancel As Integer)
   Me.ctlNav.Object.Navigate "http://google.fr"
End Sub

Le contrôle ctlNav est un cadre d'objet qui contient l'activeX WebBrowser

Pour atteindre le contrôle WebBrowser, il faut passer par la propriété Object du cadre d'objet.
Object n'étant pas d'un type particulier, il n'y a pas d'autocomplétion.
Pour retrouver cette fonctionnalité bien pratique, il faut déclarer un objet de type WebBrowser et le lier à notre contrôle.

 
Sélectionnez
Dim oNav As SHDocVw.WebBrowser
Set oNav = Me.ctlNav.Object
oNav.Navigate "http://google.fr"


Affichez le formulaire pour voir la page affichée dans le WebBrowser.

Seul l'intérieur de la fenêtre est affiché. Les barres d'outils et de statut ne sont pas affichées.

III-B-2. Intégrer un navigateur internet à un formulaire utilisateur (UserForm)

Pour Excel, Word ou encore PowerPoint, les formulaires disponibles sont appelés des UserForms.
Créez un nouveau formulaire à partir de l'éditeur VBA : menu Insertion => UserForm.
Dans le menu Outils => Contrôles supplémentaires..., recherchez Navigateur Web Microsoft et cochez-le.

Image non disponible

Le contrôle WebBrowser est alors disponible dans la boîte à outils (icône globe).
Si la boîte à outils n'est pas affichée, réaffichez-la par le menu : Affichage => Boîte à Outils.

Image non disponible

Cliquez sur ce bouton et sélectionnez la zone du formulaire sur laquelle déposer le contrôle.

Par défaut, le premier contrôle est nommé WebBrowser1. Vous pouvez le renommer en ctlNav par exemple dans la Fenêtre Propriétés (F4).

Une fois le contrôle créé, on dispose d'un objet de type WebBrowser qui se pilote de manière similaire à un objet InternetExplorer.

Nous allons écrire le code de navigation vers Google à l'ouverture du formulaire.
Passez en affichage de code (menu Affichage => Code) et sélectionnez dans les listes déroulantes en haut de module :
UserForm à gauche puis Initialize à droite.
La procédure UserForm_Initialize est générée ; écrivons notre code à l'intérieur.

 
Sélectionnez
Me.ctlNav.Navigate "http://google.fr"

Affichez le formulaire (F5) pour voir la page affichée dans le WebBrowser.

Seul l'intérieur de la fenêtre est affiché. Les barres d'outils et de statut ne sont pas affichées.

III-C. Piloter un navigateur internet

Les contrôles InternetExplorer et WebBrowser exposent des méthodes utiles à la navigation :
- Navigate pour naviguer vers une adresse ;
- GoBack pour naviguer vers la page précédente ;
- GoForward pour naviguer vers la page suivante ;
- GoHome pour naviguer vers la page d'accueil ;
- Refresh pour rafraîchir la page en cours.

Ces méthodes, associées à des boutons sur le formulaire, permettent une navigation minimale dans un WebBrowser sans avoir besoin du menu complet.
Elles sont également utilisables sur une application InternetExplorer.

III-D. Événements d'un navigateur internet

Les navigateurs exposent différents événements.
Vous trouverez la documentation de ces événements sur MSDN (en anglais) : Reference for Visual BasicDevelopers.

III-D-1. Événements d'un contrôle WebBrowser

Pour un contrôle WebBrowser, ils sont facilement accessibles dans le code du formulaire.
Sélectionnez d'abord le contrôle dans la liste déroulante en haut à gauche de la page de code (ctlNav par exemple).
Puis choisissez l'événement dans la liste déroulante de droite (DocumentComplete par exemple).

Image non disponible

La procédure est automatiquement générée :

 
Sélectionnez
Private Sub ctlNav_DocumentComplete(ByVal pDisp As Object, URL As Variant)
End Sub


URL contient l'adresse de la page, pDisp est un objet qui représente le navigateur.
Ajoutons une boîte de message qui s'affichera à chaque chargement de page.

 
Sélectionnez
Private Sub ctlNav_DocumentComplete(ByVal pDisp As Object, URL As Variant)
   MsgBox "Document chargé" & vbCrLf & URL
End Sub

III-D-2. Événements d'un contrôle InternetExplorer

Pour un "contrôle" InternetExplorer, on peut accéder aux événements en déclarant ce contrôle avec l'instruction WithEvents.
Il est alors nécessaire que le code soit écrit dans un module de classe (la page code d'un formulaire est aussi un module de classe).

Voici un exemple avec l'événement DocumentComplete.
Ce code est écrit dans le module d'un formulaire contenant un bouton btnNavigue.
Sur clic sur le bouton, on crée un navigateur est on charge la page de recherche Google.

 
Sélectionnez
Private WithEvents oNav As SHDocVw.InternetExplorer
            
Private Sub btnNavigue_Click()
Set oNav = New SHDocVw.InternetExplorer
oNav.Visible = True
oNav.navigate "http://google.fr"
End Sub
            
Private Sub oNav_DocumentComplete(ByVal pDisp As Object, URL As Variant)
   MsgBox "Document chargé" & vbCrLf & URL
End Sub


Le fait de déclarer le navigateur avec WithEvents active les événements et permet de les choisir dans les listes déroulantes en haut de la page de code.


précédentsommairesuivant

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2011 Thierry GASPERMENT. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Droits de diffusion permanents accordés à Developpez LLC.