formateur informatique

Importer et formater un document Html en VBA Word

Accueil  >  Bureautique  >  Word  >  Word VBA  >  Importer et formater un document Html en VBA Word
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    Vidéos astuces Instagram
Sujets que vous pourriez aussi aimer :


Importer et formater les fichiers Html

Dans le volet précédent, nous avons appris à importer automatiquement le contenu de multiples fichiers externes tout en gérant leur encodage. Il s'agissait de fichiers de type texte. Les fichiers Html quant à eux sont parfaitement interprétés par un navigateur Web. Leurs balises renseignent notamment sur les mises en forme à adopter. Mais lorsque l'importation est réalisée dans un document Word, ces balises demeurent à l'état brut, rendant très difficile la lecture du flot d'information. C'est ce que nous allons constater dans ce nouveau volet. Et c'est une nouvelle astuce qui va nous apprendre à formater les données importées en interprétant les balises puis en les supprimant pour ne conserver que la substance utile.

Document Source
Pour ne pas reproduire les actions de l'astuce précédente, nous proposons de débuter à partir d'un document Word offrant déjà un code VBA pour l'importation. Comme vous pouvez le voir, un fichier Word est accompagné d'un fichier Html.

Fichier Html dans le navigateur Web pour balises de mise en forme à transformer dans le document Word

Et si vous double cliquez sur ce dernier, il s'ouvre dans le navigateur Web défini par défaut. Ses informations sont parfaitement lisibles et mises en forme. Cette remarque est loin d'être anodine pour la suite de l'aventure. Il s'agit du contenu d'une formation Word.
  • Double cliquer maintenant sur le fichier docm pour l'ouvrir dans Word,
Il porte cette extension pour pouvoir gérer les macros VBA. Il semble vierge mais en apparence seulement.
  • Réaliser le raccourci ALT + F11 pour basculer dans l'éditeur VBA Word,
  • Dans l'explorateur de projet sur la gauche, déployer l'arborescence du dossier Modules,
  • Puis, double cliquer sur le module Import,
Nous affichons ainsi sa feuille de code au centre de l'écran.

Sub importHtml()

Dim boite As FileDialog
Dim chemin As String: Dim texte As String
Dim objFlux


'Boîte de dialogue Ouvrir
Set boite = Application.FileDialog(msoFileDialogOpen)

With boite
If .Show = -1 Then
chemin = .SelectedItems(1)
End If
End With

'Importation contenu fichier externe
Set objFlux = CreateObject("ADODB.Stream")
objFlux.Charset = "iso-8859-1"
objFlux.Open
objFlux.LoadFromFile (chemin)
texte = objFlux.ReadText()
objFlux.Close
Selection.InsertAfter texte

mef ("")
mef ("titres")
purger

End Sub


Nous ne reviendrons pas sur ce code VBA en détail. Nous l'avons dit, nous l'avons monté à l'occasion de l'astuce précédente. Néanmoins, nous exploitons un objet de type FileDialog pour pouvoir bénéficier de la boîte de dialogue standard d'ouverture de fichiers. Nous parcourons en mémoire le fichier ainsi pointé par l'utilisateur grâce à la classe ADODB.Stream. Nous l'instancions, nous définissons le type d'encodage et nous restituons le contenu sur le document Word. Mais il s'agit d'en avoir le coeur net. En fin de parcours, elle appelle deux procédures dont une à deux reprises (mef et purger). Elles doivent formater le texte puis éliminer globalement les balises Html pour offrir un texte intelligible.
  • Passer ces trois appels en commentaires,
Comme vous le savez, il suffit de les préfixer d'une apostrophe.
  • Cliquer entre le Sub et le End Sub pour désigner explicitement la procédure,
  • Enfoncer la touche F5 pour l'exécuter,
Comme vous pouvez le voir, la boîte de dialogue standard apparaît effectivement.
  • Pointer dans le dossier de décompression,
  • Puis, double cliquer sur le fichier Html,
  • De retour dans l'éditeur, basculer sur le document Word,
Importer un contenu Html avec ses balises dans le document Word

Le contenu du fichier Web est parfaitement importé. Bien entendu, ses balises suivent. D'une part, aucune mise en forme n'est transcrite et d'autres part, ces balises font office de parasites dans la mesure où elles nuisent à la lecture.

Remplacer les balises de formatage
Avant de songer à supprimer les balises par les expressions régulières, nous devons commencer par faire ressortir le texte encadré par celles qui sont destinées à le mettre en valeur. Les mots encadrés par la balise strong (<strong> et</strong>) doivent être mis en gras. Les mots encadrés par la balise span (<span class='titre_conception'> et </span>) doivent être passés en gras et forcés en talle 14.
  • Sélectionner tout le texte (CTRL + A) et le supprimer (Suppr),
  • Revenir dans l'éditeur VBA Word,
  • Sous la procédure importHtml, créer la procédure mef comme suit :
Private Sub mef(quoi As String)
Selection.HomeKey wdStory
Selection.Find.Replacement.ClearFormatting
Selection.Find.Replacement.Font.Bold = True
End Sub


Elle doit être appelée à deux reprises en différenciant les titres des mises en forme standard en gras. C'est la raison pour laquelle nous lui attribuons un paramètre (quoi). C'est lui au moment de l'appel qui permettra de définir quel est le type de balise à remplacer. Ensuite et comme vous le savez, la méthode Homekey de l'objet Selection, avec le paramètre wdStory, permet de replacer le point d'insertion au tout début du document. C'est ainsi que nous pourrons initier le remplacement global sans omettre le moindre recoin. Ensuite, nous définissons que les expressions remplacées doivent être formatées en gras (Selection.Find.Replacement.Font.Bold = True).

Il est temps maintenant de définir la séquence à remplacer globalement dans le document. Cette séquence doit varier en fonction de la valeur de la variable quoi passée en paramètre. C'est nous qui la définissons arbitrairement. Avec la valeur titres, nous jugeons que nous devons formater les textes encadrés par les balises span. Et pour cela, nous devons tester ce que cette variable renferme.
  • A la suite du code VBA et avant le End Sub, ajouter l'instruction conditionnelle suivante :
Private Sub mef(quoi As String)
Selection.HomeKey wdStory
Selection.Find.Replacement.ClearFormatting
Selection.Find.Replacement.Font.Bold = True
If (quoi = "titres") Then
Selection.Find.Replacement.Font.Size = 14
Selection.Find.Text = "\<span class='titre_conception'\>*\</span\>"
Else
Selection.Find.Replacement.Font.Size = 11
Selection.Find.Text = "\<strong\>*\</strong\>"
End If

End Sub


Dans le cas des titres (If (quoi = "titres") Then), nous forçons la taille de la police à 14 pt. Puis, nous définissons la séquence à remplacer (\<span class='titre_conception'\>*\</span\>). Le symbole de l'astérisque est un caractère générique. Il indique que ce qui se trouve entre la balise ouvrante et la balise fermante importe peu et ce, quel que soit le nombre de caractères intercalés. Pour ces balises, notez que les symboles inférieur et supérieur (< et >) sont échappés par l'antislash. Ils peuvent être eux aussi utilisés comme des caractères génériques. L'antislash est donc essentiel pour les neutraliser et les considérer tels quels.

Dans le cas contraire (else), nous ne forçons pas la taille des caractères. Nous conservons la mise en forme en gras pour tout texte situé entre la balise strong ouvrante et sa balise fermante.
  • A la suite du code, ajouter les instructions VBA suivantes :
Private Sub mef(quoi As String)
Selection.HomeKey wdStory
Selection.Find.Replacement.ClearFormatting
Selection.Find.Replacement.Font.Bold = True
If (quoi = "titres") Then
Selection.Find.Replacement.Font.Size = 14
Selection.Find.Text = "\<span class='titre_conception'\>*\</span\>"
Else
Selection.Find.Replacement.Font.Size = 11
Selection.Find.Text = "\<strong\>*\</strong\>"
End If

Selection.Find.MatchWildcards = True
Selection.Find.Execute Replace:=wdReplaceAll

End Sub


La propriété MatchWildcards est très importante. C'est elle qui permet d'enclencher les caractères génériques de sorte que le symbole de l'astérisque (*) soit considéré comme n'importe quel caractère et sur n'importe quel nombre. Enfin et comme vous le savez, la méthode Execute avec le paramètre wdReplaceAll permet de déclencher le remplacement global.
  • Enregistrer les modifications (CTRL + S),
  • Dans la procédure importHtml, enlever les apostrophes devant les appels de la procédure mef,
  • Conserver le point d'insertion actif dans les bornes de cette procédure,
  • Enfoncer la touche F5 pour l'exécuter,
  • Dans la boîte de dialogue, double cliquer sur le fichier Html pour l'importer,
  • Puis, basculer sur le document Word à l'issue du traitement,
Formater le texte du document Word en fonction des balises Html importées

Comme vous pouvez le voir, la mise en forme des éléments ciblés est parfaitement exécutée à l'importation, tout en respectant une différence de taille pour les titres.

Supprimer les balises Html
Désormais et puisque les attributs de format sont correctement appliqués, il est question de ne conserver que le texte à l'importation. La technique est similaire à la précédente, mais elle est encore plus simple. Grâce aux expressions régulières, il suffit de remplacer tout ce qui débute par un symbole inférieur et se termine par un symbole supérieur.
  • Revenir dans l'éditeur VBA Word,
  • Sous la procédure mef, créer la procédure purger comme suit :
Sub purger()
Selection.HomeKey wdStory
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "\<*\>"
.Replacement.Text = ""
.MatchWildcards = True
End With
Selection.Find.Execute Replace:=wdReplaceAll
End Sub


Il est à noter que la méthode ClearFormatting est importante. Toutes les balises doivent être purgées y compris celles qui sont mise en forme. Utilisées à deux reprises, elle indique que la mise enforme ne doit pas être considérée ni dans la recherche, ni dans le remplacement.
  • Dans la procédure importHtml, enlever l'apostrophe devant l'appel de la procédure purger,
  • Enregistrer les modifications (CTRL + S) puis exécuter le code (F5),
  • Dans la boîte de dialogue, double cliquer sur le fichier Html pour l'importer,
  • Puis, basculer sur le document Word une fois le traitement achevé,
Importer le contenu Html dans un document Word en formatant les textes et en supprimant les balises

Comme vous pouvez le voir, tout le texte de la source Html est parfaitement purgé de ses balises tout en conservant les attributs de mise en forme prédéfinis par la première méthode de remplacement. Bref, l'importation du fichier Html avec formatage est un succès.

 
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