Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :
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 .
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 ,
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,
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é,
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.