Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :
Sujets que vous pourriez aussi aimer :Importer du contenu Web
Avec cette nouvelle
astuce VBA Access, nous allons apprendre à récupérer le
contenu de pages distantes hébergées sur le
Web. Il peut s'agir de la
source HTML de ces pages pour dénicher des informations précises ou encore de fichiers de type texte, proposés au téléchargement ou à la consultation.
Base de données Access à télécharger
Pour mener à bien cette étude, nous suggérons d'appuyer les travaux sur un formulaire offrant un bouton d'importation ainsi qu'une zone de saisie pour spécifier l'URL cible.
- Télécharger le fichier compressé lire-sur-le-web.rar en cliquant sur ce lien,
- Le décompresser dans le dossier de votre choix,
- Double cliquer sur le fichier réceptionné pour l'ouvrir dans Access,
- Cliquer sur le bouton Activer le contenu du bandeau de sécurité,
- Dans le volet de navigation sur la gauche, double cliquer sur le formulaire fParcourir,
Ainsi, nous l'exécutons et l'affichons. Une zone de texte est placée sur la partie supérieure. Elle attend l'URL à consulter. Juste en-dessous, figure une large et haute autre zone de texte. Elle est paramétrée au
format texte enrichi pour interpréter les attributs de mise en forme. Sur la droite, un bouton doit lancer la consultation de l'URL afin d'en restituer le contenu dans cette zone enrichie.
- A gauche du ruban Accueil, cliquer sur la flèche du bouton Affichage,
- En bas des propositions, choisir le mode Création,
- Sur le formulaire en conception, cliquer sur la première zone de texte, celle du haut,
En consultant sa
feuille de propriétés, vous constatez qu'elle est nommée
adresse. L'autre zone de texte est intitulée
contenu tandis que le bouton se nomme
importer.
- Pour cette première zone de texte, activer l'onglet Evénement de sa feuille de propriétés,
- Cliquer sur le petit bouton associé à son événement Au clic,
Ainsi, nous basculons dans l'
éditeur VBA Access entre les bornes de la procédure existante qui est nommée
adresse_Click. Vous notez également la présence d'une autre procédure :
Form_Current. Son code intervient à chaque activation du formulaire. Toutes deux ont été créées pour des raisons d'ergonomie. La seconde charge une indication par défaut, une invite, dans la zone de texte pour l'URL. La première supprime ce message, dans la mesure où il est toujours en place (If), pour permettre à l'utilisateur de saisir directement l'adresse à consulter.
Au Clic sur le bouton
Maintenant que les présentations sont faites, nous devons commencer par attacher un
code VBA Access au
bouton du formulaire.
- En haut de la feuille de code, déployer la liste déroulante de gauche,
- Dans l'énumération des objets, choisir le bouton importer,
C'est ainsi, sans revenir sur le formulaire pour sélectionner le bouton, que nous créons la
procédure événementielle importer_Click. Son code se déclenchera au clic sur le
bouton importer.
La variable HTTP
Ensuite, nous avons besoin de déclarer une variable dont la vocation sera d'
instancier la classe des requêtes http. C'est ainsi que nous pourrons émettre une
demande sur le Web, Ã destination de l'
Url que nous souhaitons analyser.
- Dans les bornes de la procédure, ajouter la déclaration de variable suivante :
...
Dim demandeHTTP As Object
...
Nous la nommons
demandeHTTP et nous la typons comme un objet au sens large. Elle prendra véritablement son type au moment de l'instanciation de la classe.
Vérifier l'URL saisie
Avant de poursuivre le traitement, nous devons nous assurer que l'utilisateur a bien inscrit une
Url à analyser, dans la zone de saisie nommée
adresse.
...
If adresse.Value <> "" Then
contenu.Value = ""
End If
...
Si une Url est bien inscrite (adresse.Value <> ""), nous commençons par réinitialiser la zone de texte enrichi (contenu.Value). Ainsi, nous effaçons le précédent contenu Web importé pour laisser place au nouveau.
La classe HTTP
Il est temps d'instancier la classe permettant d'émettre des requêtes distantes, sur le Web donc.
- A la suite du code dans l'instruction conditionnelle, réaliser l'instanciation suivante :
...
Set demandeHTTP = CreateObject("MSXML2.ServerXMLHTTP")
...
Comme souvent, nous dégainons la
fonction VBA CreateObject pour
instancier une classe. Avec le
paramètre MSXML2.ServerXMLHTTP, nous désignons celle des
requêtes http. Et c'est ainsi que nous initialisons (Set) notre
objet demandeHTTP. De fait, il hérite des propriétés et méthodes de cette classe.
La demande HTTP
- Toujours à la suite dansl'instruction conditionnelle, ajouter les lignes VBA suivantes :
...
Call demandeHTTP.Open("GET", adresse.Value)
demandeHTTP.Send
contenu.Value = demandeHTTP.ResponseText
Set demandeHTTP = Nothing
...
C'est la
méthode héritée Open qui permet d'ouvrir la
demande http. Mais dans la syntaxe, nous devons l'appeler (Call). En premier paramètre (GET), nous lui indiquons que nous souhaitons obtenir des informations à partir d'une Url. Cette
URL, nous la lui fournissons en second paramètre. Ensuite, nous envoyons la
demande http grâce à la
méthode héritée Send. Dès lors, nous exploitons la
propriété héritée ResponseText pour restituer le contenu du fichier distant ou le corps de la page Web, dans la zone enrichie (contenu.Value). A l'issue du traitement, nous détruisons l'objet http en le réinitialisant (Set) à Nothing, pour le sortir de la mémoire de l'ordinateur.
Récupérer le contenu distant
Le code VBA est terminé. Il est donc très simple. Mais nous allons le voir, il est efficace.
- Enregistrer les modifications (CTRL + S) et revenir sur le formulaire (ALT + Tab),
- Exécuter ce dernier, par exemple avec la touche F5 du clavier,
- Dans la première zone de texte, coller une URL,
Il peut s'agir de l'adresse d'un fichier distant ou encore de l'adresse d'une page Web.
- Cliquer alors sur le bouton Importer,
Dans l'exemple de la capture ci-dessus, nous questionnons un fichier Csv, hébergé par le site Bonbache.fr, pour les besoins d'une formation sur la facturation clients. Et comme vous pouvez le voir, nous récupérons bien toutes les données, séparées par le délimiteur du point-virgule (;).
Dans ce deuxième exemple, nous questionnons une page du dictionnaire Larousse, pour obtenir la définition du mot dithyrambique. Il convient d'utiliser l'ascenseur pour faire défiler le contenu vers le bas et voir apparaître cette définition. Bien sûr, ce contenu semble parfois déstructuré car toutes les balises Html ne peuvent pas être interprétées. Certaines sont en effet très spécifiques. Quoiqu'il en soit, nous accédons tout de même au contenu distant, avec les informations souhaitées qui sont prélevées.