Comment envoyer un texte avec sommaire automatique dans Word depuis Excel en 1 clic ?
Dans ce tutoriel, nous allons générer du contenu dans Word directement à partir d'Excel.
En effet, dans une vidéo précédente, nous avions vu comment exploiter la puissance de Chat GPT pour générer du contenu directement sur une feuille de calcul.
Cependant, Excel n’a pas vocation à gérer du texte, c’est pourquoi je vais vous montrer comment utiliser un simple bouton pour l’'exporter directement dans Word.
Nous verrons également comment personnaliser le style des titres et surtout comment créer un sommaire automatisé.
Téléchargement
Vous pouvez télécharger le fichier d'exemple de cet article en cliquant sur le lien suivant :
Tutoriel Vidéo
1. Comment exporter du texte contenu dans une cellule dans WORD
1.1. Enregistrement du contenu de la page dans une variable VBA
Pour illustrer ce tutoriel, nous allons utiliser le fichier créé dans le tutoriel « Comment utiliser l'intelligence artificielle Chat GPT dans Excel ? - Excel formation » dans lequel nous avons vu comment faire écrire un livre à Chat GPT très rapidement en cliquant sur un simple bouton.
Seulement, le texte que nous avions écrit étant stocké dans des cellules Excel, celui-ci n’est facilement lisible ni transmissible.
Pour exporter le contenu d'Excel vers Word, nous allons créer une nouvelle macro VBA que nous nommerons « exportPlanWord » au sein du projet :
Sub exportPlanWord()
End Sub
Ensuite, nous allons commencer par créer une variable de type « String » appelée « texte », qui va stocker le texte que nous souhaitons exporter.
Nous y enregistrons dans un premier temps la valeur de la cellule A1 dans laquelle se trouve le titre du livre :
Dim texte As String
texte = [a1].Value
Ensuite, nous allons utiliser une boucle Do While pour y stocker tous les couples de cellules que nous retrouvons dans les colonnes A et B les uns à la suite des autres :
Dim c as Range
Set c = [a2]
Do While c <> ""
' Ajout du type de titre, du contenu de la cellule c et de la cellule qui suit c à la variable texte
texte = texte & vbNewLine & vbNewLine & c & vbNewLine & Replace(c.Offset(0, 1), c, "")
' Déplacement à la cellule suivante
Set c = c.Offset(1, 0)
Loop
Nous concaténons avec une esperluette (« & ») ainsi à la suite de la variable le titre de chaque partie (situé dans la cellule correspondant à la variable c) ainsi que la cellule située directement sur sa droite, que nous obtenons grâce à l’instruction Offset, laquelle permet d’effectuer un décalage de cellule.
Pour finir, avant de redémarrer la boucle, nous passons sur la cellule située juste en dessous.
Si nous souhaitons contrôler le contenu de la variable « texte », nous pouvons utiliser un « Debug.Print » pour l’afficher dans la fenêtre d’exécution.
1.2. Création d'un document Word en VBA et saisi des données
Maintenant que nous avons stocké le contenu de la page dans une variable, nous allons créer un document Word en utilisant VBA.
Pour cela, nous allons utiliser la fonction « CreateObject » pour créer une instance de l'application Word.
' Déclaration de la variable aWord
Dim aWord As Object
' Chargement une instance de Word
Set aWord = CreateObject("Word.Application")
Ensuite, nous affichons l’application Word avec la propriété Visible à laquelle nous donnons la valeur de True :
aWord.Visible = True
Puis, nous allons créer un nouveau document Word en utilisant la méthode « Documents.Add » afin d’y ajouter du texte en utilisant la méthode « InsertAfter ». Nous allons insérer le texte stocké dans la variable « texte » :
aWord.documents.Add
aWord.Selection.InsertAfter texte
2. Modifier la mise en forme des titres depuis Excel
2.1. Appliquer des styles aux titres
Maintenant que le texte est inséré dans le document Word, voyons comment personnaliser le style affecté aux titres.
Pour cela, nous allons revenir dans la boucle de génération de la variable « texte », afin d’insérer des balises devant les titres (« [TITRE-2] » et « [TITRE-3]).
Pour cela, nous pourrons utiliser une astuce que nous avions déjà utilisée dans un tutoriel précédent, qui consiste à compter le nombre de points que nous retrouvons sur les 6 premiers caractères de chaque paragraphe. Nous pourrons alors utiliser une petite astuce qui consiste à compter la différence entre la chaîne constituée des 6 premiers caractères, et la même chaîne dans laquelle nous avons retiré les points :
Dim nbPoints As Integer, typeTitre As String
' Initialisation de nbPoints avec la longueur des points dans la cellule c
nbPoints = 6 - Len(Replace(Left(Trim(c), 6), ".", ""))
Ainsi, si la variable « nbPoints » est égale à 1, alors il s’agira d’un titre de niveau 2 (sous la forme « 1. Premier titre ») et s’il en contient deux alors, ce sera un titre de niveau 3 (sous la forme « 1.1. Premier sous-titre ») :
If nbPoints = 1 Then
typeTitre = "[TITRE-2]"
ElseIf nbPoints = 2 Then
typeTitre = "[TITRE-3]"
End If
Nous modifierons ensuite la chaine « texte » pour inclure ces balises :
texte = texte & vbNewLine & vbNewLine & typeTitre & c & vbNewLine & Replace(c.Offset(0, 1), c, "")
Maintenant, nous allons pouvoir appliquer des styles aux paragraphes de notre texte.
Tout d’abord, le premier paragraphe sera toujours le « Titre 1 » :
aWord.activedocument.Paragraphs(1).Range.Style = "Titre 1"
Puis, nous passerons tous les autres paragraphes en revue pour appliquer un style en fonction de la présence de balise au tout début :
Dim para As Object
For Each para In aWord.activedocument.Paragraphs
Dim balise As String
balise = Left(para, 9)
If balise = "[TITRE-2]" Then
para.Range.Style = "Titre 2"
ElseIf balise = "[TITRE-3]" Then
para.Range.Style = "Titre 3"
End If
Next
Comme vous le voyez, pour appliquer un style sur un paragraphe, nous utilisons la propriété « Range.Style » du paragraphe.
Pour finir, il ne reste plus qu’à supprimer les balises du document en utillsant la méthode « Find » :
With aWord.Selection.Find
.Text = "[TITRE-2]"
.replacement.Text = ""
.Execute Replace:=2
.Text = "[TITRE-3]"
.replacement.Text = ""
.Execute Replace:=2
End With
2.2. Modifier les styles depuis Excel
Maintenant que les titres possèdent leurs propres styles, nous allons pouvoir modifier les propriétés de ces derniers en utilisant les propriétés correspondantes :
With aWord.ActiveDocument.Styles("Titre 1")
.Font.Size = 36
End With
With aWord.activedocument.Styles("Titre 2")
.Font.Size = 16
.ParagraphFormat.Borders(-1).LineStyle = 1
.ParagraphFormat.Borders(-2).LineStyle = 1
.ParagraphFormat.Borders(-3).LineStyle = 1
.ParagraphFormat.Borders(-4).LineStyle = 1
.ParagraphFormat.Alignment = 1
.ParagraphFormat.SpaceAfter = 12
.ParagraphFormat.pagebreakbefore = True
End With
Si vous souhaitez obtenir plus d’informations sur ces lignes, je vous invite à consulter la vidéo de présentation de ce tutoriel dans laquelle nous revenons sur chaque point du tutoriel dans le détail.
Dans l'ensemble, la mise en forme des titres permet de rendre un document plus clair et plus facile à lire, et il est donc important de prendre le temps de bien choisir les styles appliqués.
3. Créer un sommaire automatique dans Word depuis Excel
Nous en arrivons à la troisième partie de ce tutoriel, dans lequel nous allons voir comment créer un sommaire automatique dans Word directement à partir d'Excel.
Ce sommaire doit également nous nous permettre d'accéder directement à l'endroit voulu au sein du document.
Pour cela, nous allons tout d’abord nous positionner tout en haut de la deuxième page du document avec la ligne suivante :
aWord.Selection.Goto what:=1, which:=1, Count:=2
Nous allons ensuite insérer un saut de page pour que la suite du contenu se positionne sur la troisième page :
aWord.Selection.insertbreak
Maintenant, nous allons revenir sur la deuxième page pour saisir le titre « SOMMAIRE » :
aWord.Selection.Goto what:=1, which:=1, Count:=2
aWord.Selection.typetext Text:="SOMMAIRE"
Il ne reste plus qu’à insérer le sommaire en lui-même juste après :
aWord.ActiveDocument.TablesOfContents.Add Range:=aWord.Selection.Range, UpperHeadingLevel:=2, LowerHeadingLevel:=3, UseHyperlinks:=True
Pour insérer ce sommaire, nous utilisons donc la méthode « Add » de l’objet « ActiveDocument.TablesOfContents » avec les arguments suivants :
- Range : permet de définir l’endroit où nous souhaitons insérer le sommaire (ici à l’endroit actuellement actif, c’est-à-dire en dessous du titre « SOMMAIRE »
- UpperHeadingLevel : permet de spécifier le niveau le plus haut du style de titre utilisé pour le sommaire (« 2 » est le niveau défini du « Titre 2 »)
- LowerHeadingLevel : permet de spécifier le niveau le plus bas du style de titre utilisé pour le sommaire (« 3 » est le niveau défini du « Titre 3 »)
- Enfin, comme nous l’avons vu un peu plus tôt, nous souhaitons activer la redirection du sommaire sur les parties du texte correspondantes.
Et voilà, il ne reste plus qu’à créer un bouton et le lier avec la macro « exportPlanWord » pour balancer le contenu de la feuille dans un nouveau document Word, avec style et sommaire automatique.