formateur informatique

Importer le contenu de pages Internet sur un formulaire

Accueil  >  Bureautique  >  Access  >  Access VBA  >  Importer le contenu de pages Internet sur un formulaire
Livres à télécharger


Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :


Inscription Newsletter    Abonner  Youtube    Vidos astuces Instagram
Sujets que vous pourriez aussi aimer :


Récupérer du contenu depuis Internet

Avec cette nouvelle astuce VBA Access, nous allons apprendre à aspirer le contenu de pages Web en fonction de mots clés de recherche, tapés par l'utilisateur sur un formulaire.

Base de données Access à télécharger
Pour apprendre à piller le contenu issu du Web, nous suggérons d'appuyer les travaux sur une base de données offrant un formulaire abritant une zone de recherche ainsi qu'une zone de réception pour le contenu téléchargé. Formulaire Access pour importer des données en VBA

Nous découvrons effectivement une zone de saisie, en haut à gauche du formulaire, pour taper les mots clés de recherche. Après un clic sur le bouton intitulé Trouver, les résultats issus du Web, plus précisément du site Wikipédia, doivent être rapatriés dans la grande zone de texte du dessous. Le bouton intitulé Enregistrer ne nous intéresse pas pour l'instant.

Les réglages de l'application
En plus de ce formulaire, quelques paramètres et un code VBA ont été conçus en amont.
  • En haut à gauche du ruban Accueil, cliquer sur la flèche du bouton Affichage,
  • Dans les propositions, choisir le mode Création,
  • Sur le formulaire en conception, cliquer sur la grande zone de texte placée au centre,
C'est ainsi que nous la sélectionnons.
  • Dès lors, activer l'onglet Données de sa feuille de propriétés,
Comme vous pouvez le voir, son attribut Format du texte est réglé sur la valeur Texte enrichi. C'est grâce à ce paramétrage que les balises Html importées depuis le Web pourront naturellement être interprétées pour la mise en forme en gras ou les sauts de ligne par exemple.

Zone de texte enrichie sur formulaire Access pour mise en forme

De plus, l'interprétation des mots clés dans le moteur de Wikipédia est quelque peu particulière. C'est la raison pour laquelle, une fonction VBA existe déjà afin de lui fournir les informations au bon format.
  • Réaliser le raccourci clavier ALT + F11 pour basculer dans l'éditeur VBA Access,
Vous notez la présence de la fonction traiteMots.

Function traiteMots(lesMots As String) As String
Dim mots() As String : Dim i As Byte

'Dans les mots composés pour passer les 1eres lettres en majuscules. C'est ainsi que Wiki fonctionne
mots = Split(lesMots, " ")
lesMots = ""
For i = 0 To UBound(mots)
lesMots = lesMots & UCase(Left(mots(i), 1)) & Mid(mots(i), 2)
If (i < UBound(mots)) Then lesMots = lesMots & "_"
Next i

traiteMots = lesMots

End Function


Tous les mots clés de recherche y sont passés en revue tour à tour pour transformer leur première lettre en majuscule (UCase) et les relier les unes avec les autres par un Underscore (_). C'est ainsi, en appelant cette fonction, que nous recomposons une Url conforme de recherche sur Wikipédia.

La procédure d'importation
Précisément, c'est un clic sur le bouton intitulé Trouver qui doit récupérer ces termes de recherche, pour les fournir à cette fonction, afin d'engager l'importation des résultats proposés par ce site. Nous devons donc créer la procédure de code VBA attachée à ce bouton.
  • Revenir sur le formulaire Access (ALT + Tab),
  • Cliquer sur le bouton Trouver pour le sélectionner,
  • Activer l'onglet Evénement de sa feuille de propriétés,
  • Cliquer sur le petit bouton associé à son événement Au clic,
  • Dans la boîte de dialogue, cliquer sur le Générateur de code et valider par le bouton Ok,
Nous revenons ainsi dans l'éditeur VBA Access mais cette fois entre les bornes de la procédure événementielle trouver_Click. Son code se déclenchera au clic sur ce bouton.
  • Dans les bornes de cette procédure, ajouter les déclarations de variables suivantes :
Private Sub trouver_Click()
Dim donnees_web() As Byte: Dim reponse As Object: Dim objFlux As Object
Dim url As String: Dim chemin As String


End Sub


Nous exploiterons le tableau de variables donnees_web pour récolter les données binaires de la page Web à télécharger. Tout cela sera rendu possible grâce à l'objet reponse dont la vocation est d'instancier la classe permettant d'émettre des requêtes http afin d'interroger le Web. La variable de texte Url doit recomposer l'Url de la demande à Wikipédia en fonction des mots clés tapés. Nous stockerons ces résultats binaires sur le disque dans le dossier local de l'application Access. C'est la raison de la présence de la variable chemin pour recomposer la chaîne de cet accès sur le disque. Grâce à l'objet objFlux, nous créerons un flux capable d'accéder à ces données, tout en gérant le système d'encodage.

Initialiser les chaînes
Avant d'entrer dans le vif du sujet, nous devons initialiser les variables permettant de recomposer l'Url à interroger et celle permettant de reconstruire le chemin d'accès à l'application, pour stocker les données récoltées sur le disque.
  • A la suite du code, ajouter les instructions VBA suivantes :
...
If (motsCles.Value <> "") Then
contenu.Value = ""
'Pour les majuscules en début de chaque mot
motsCles.Value = traiteMots(motsCles.Value)
url = "https://fr.wikipedia.org/wiki/" & Replace(motsCles.Value, " ", "_")
chemin = CurrentProject.Path & "\recupweb.txt"

End If
...


Fort logiquement, nous émettons tout d'abord une condition avant d'entamer le traitement. L'utilisateur doit nécessairement avoir tapé des mots clés de recherche (motsCles.Value <> ""). Ensuite, nous passons la main à la fonction traiteMots pour qu'elle retourne chacun des termes avec une majuscule en première lettre, comme le souhaite Wikipédia. Nous exploitons ces mots retouchés que nous séparons d'un underscore (_), là encore comme l'impose Wikipédia, pour reconstruire une Url de recherche valide. C'est alors que nous engageons la propriété Path de l'objet VBA Access CurrentProject pour désigner le dossier de l'application et construire le chemin (& "\) jusqu'au fichier (recupweb.txt) dans lequel nous souhaitons stocker les données Web consultées. Sachez-le, grâce à la méthode que nous exploiterons, ce fichier, s'il n'existe pas, sera créé automatiquement et sera écrasé s'il existe.

Instancier la classe HTTP
C'est maintenant que nous devons exploiter l'objet reponse pour instancier la classe permettant d'émettre des requête http. Grâce à lui, nous pourrons ouvrir un flux sur l'Url que nous avons construite, en fonction des mots clés de l'utilisateur.
  • A la suite du code, toujours dans l'instruction If, ajouter les lignes VBA suivantes :
...
Set reponse = CreateObject("WinHTTP.WinHTTPrequest.5.1")
reponse.Open "GET", url, False
reponse.Send
donnees_web = reponse.ResponseBody
Set reponse = Nothing
...


C'est le paramètre WinHTTP.WinHTTPrequest.5.1 passé en paramètre de l'incontournable fonction CreateObject qui permet d'instancier cette classe http. Notre objet reponse ainsi initialisé (Set) hérite de ses propriétés et méthodes. Grâce à la méthode Open, nous ouvrons un flux (GET) sur l'url Web reconstruite. Nous envoyons la demande (Send). Et nous récupérons le corps (ResponseBody) de la page Web ciblée, dans la variable donnees_web. Ensuite, nous détruisons (Nothing) l'objet reponse car il n'est plus utile.

Télécharger le contenu sur le disque
A ce stade, les informations de la page Web sont hébergées en mémoire. Nous devons les stocker sur le disque dur. Ensuite, nous pourrons y accéder classiquement pour les importer sur le formulaire.
  • A la suite du code, toujours dans le If, ajouter les instructions VBA suivantes :
...
Open chemin For Binary Access Write As #1
Put #1, 1, donnees_web
Close #1
...


Nous exploitons les commandes désormais bien connues pour réaliser un accès séquentiel au fichier du dossier local (chemin). Mais cet accès, nous le faisons en mode binaire (For Binary Access) pour y écrire (Write), les données de la page Web ainsi encodées dans la réponse fournie par la requête http.

Importer les données téléchargées
Maintenant que les données de la page Web sont stockées dans un fichier texte, nous allons pouvoir accéder à ce dernier en lecture. Mais attention, telles que nous les avons importées, elles sont encodées en UTF-8. C'est la raison pour laquelle nous devons instancier la classeADODB.Stream.
  • Toujours dans le If et à la suite du code, ajouter les lignes VBA suivantes :
...
Set objFlux = CreateObject("ADODB.Stream")
objFlux.Charset = "utf-8"
objFlux.Open
objFlux.LoadFromFile (chemin)
contenu.Value = objFlux.ReadText()
...


Nous instancions donc la classe permettant de créer un flux de lecture. Dès lors, nous définissons le système d'encodage (utf-8) grâce à la propriété Charset. Nous ouvrons ce flux en mémoire avec la méthode Open. Nous y chargeons (LoadFromFile) le contenu du fichier (chemin). Nous importons tout son contenu (ReadText()) dans la grande zone de texte au centre du formulaire.

Décharger les objets
Pour finir de coder proprement, nous devons détruire l'objet utilisé afin de libérer la mémoire.
  • A la fin de l'instruction conditionnelle, ajouter les deux lignes VBA suivantes :
...
objFlux.Close
Set objFlux = Nothing
...
  • Enregistrer les modifications (CTRL + S) et basculer sur le formulaire Access (ALT + Tab),
  • Exécuter ce dernier avec la touche F5 du clavier par exemple,
  • Dans la zone de recherche, taper les mots clés suivants par exemple : fabien galthié,
Il s'agit de l'actuel entraîneur et sélectionneur du XV de France.
  • Cliquer alors sur le bouton Trouver,
Après un petit laps de temps, vous constatez que le contenu, issu de Wikipédia, est effectivement chargé dans la zone de texte du formulaire.

Charger le contenu d-une page internet sur un formulaire Access en VBA

Les balises Html sont bien interprétées grâce au format texte enrichi de la zone de saisie. Mais ce contenu mérite d'être purgé. En effet, il faut descendre assez bas pour atteindre la partie utile de l'article. C'est ce dont nous nous soucierons dans le volet à suivre.

 
Sur Facebook
Sur Youtube
Les livres
Contact
Mentions légales



Abonnement à la chaîne Youtube
Partager la formation
Partager sur Facebook
Partager sur Twitter
Partager sur LinkedIn