formateur informatique

Exporter les données Excel dans des documents Word

Accueil  >  Bureautique  >  Excel  >  Excel VBA  >  Exporter les données Excel dans des documents 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 :


Exporter dans Word

Dans le volet précédent, nous avons activé la validation d'un formulaire en contrôlant les inscriptions de l'utilisateur au fil de la saisie. Dans ce nouveau chapitre, nous souhaitons archiver les données renseignées sur le formulaire. Mais cette fois, nous ne souhaitons pas stocker ces informations en base de données Access comme nous l'avions appris en construisant le formulaire d'inscription en VBA Excel, à l'occasion d'une précédente formation. Ici, nous souhaitons les enregistrer depuis Excel, dans de nouveaux documents Word pour créer des fiches candidats ou des fiches clients.

Classeur Excel à télécharger
Pour monter cette solution, nous devons repartir des travaux précédents ayant permis d'activer la validation du formulaire d'inscription. Comme vous le voyez, la décompression fournit le fichier Excel accompagné d'un sous dossier nommé exports. C'est lui qui doit accueillir les exportations de données Excel au format Word.
  • Double cliquer sur le fichier du classeur pour l'ouvrir dans Excel,
  • Puis, cliquer sur le bouton Activer la modification du bandeau de sécurité,
Formulaire Excel inscription

Nous retrouvons bien le petit formulaire d'inscription du volet précédent. Tant que les quatre champs ne sont pas renseignés, le bouton de validation reste indisponible. Mais dès lors que toutes les informations requises sont présentes, il s'active automatiquement. Et c'est au clic sur ce dernier que nous devons engager l'exportation des données de ce formulaire Excel, dans un nouveau document Word à enregistrer dans le sous dossier exports de l'application.

La déclaration des variables
Deux variables sont nécessaires pour mener à bien ce développement. La première doit servir à piloter une instance de Word pour pouvoir inscrire à distance les informations récoltées, dans un nouveau document. La seconde doit recomposer le chemin d'accès complet au sous dossier exports en lui associant le nom du fichier, à construire en fonction du nom et du prénom du candidat.
  • Réaliser le raccourci clavier ALT + F11 pour basculer dans l'éditeur VBA Excel,
  • Dans l'explorateur de projet sur la gauche, double cliquer sur l'élément Feuil1(Formulaire),
Nous affichons ainsi sa feuille de code au centre de l'écran. Nous retrouvons la procédure événementielle Worksheet_Change qui se charge d'activer le bouton de validation lorsqu'elle détecte que tous les renseignements sont fournis. Nous découvrons de même la présence de la procédure valider_Click. C'est elle qui s'exécute au clic sur le bouton de validation. C'est donc elle que nous devons implémenter.
  • Dans les bornes de cette procédure, ajouter les deux déclarations suivantes :
Private Sub valider_Click()
Dim instanceW As Object: Dim chemin As String

End Sub


Nous déclarons la variable instanceW comme un objet au sens large. elle prendra son type définitif au moment de l'instanciation de la classe de Word. Nous déclarons la variable chemin comme un texte (As String), pour stocker le chemin d'accès au fichier.

Chemin d'accès au fichier d'exportation
Nous le savons, c'est la propriété Path de l'objet VBA Excel ActiveWorkbook qui renseigne sur le chemin d'accès à l'application locale. Nous devons donc lui associer le nom du sous dossier et le nom du fichier à construire.
  • A la suite du code, ajouter l'affectation suivante :
...
chemin = ActiveWorkbook.Path & "\exports\" & LCase(Replace(Range("E6").Value & "-" & Range("C9").Value," ", "-")) & ".docx"
...


Nous entrons donc dans le sous dossier exports (\exports\) du dossier local (ActiveWorkbook.Path) et nous lui associons le nom du fichier retravaillé. Ce nom, nous le construisons sur l'assemblage du nom et du prénom du candidat (Range("E6").Value & "-" & Range("C9").Value). Grâce à la fonction Replace, nous remplaçons tous les potentiels espaces par des tirets. Puis, nous convertissons le tout en minuscules grâce à la fonction LCase. Enfin, nous ajoutons l'extension classique d'un document (.docx).

Se connecter à Word
Désormais, pour piloter Word, nous devons instancier sa classe. Et comme souvent, c'est la fonction VBA CreateObject qui autorise des instanciations précises en fonction des paramètres qui lui sont communiqués.
  • A la suite du code VBA, ajouter les instructions suivantes :
...
Set instanceW = CreateObject("Word.Application")
instanceW.Visible = False
instanceW.Documents.Add DocumentType:=wdNewBlankDocument
...


Nous initialisons (Set) tout d'abord l'objet instanceW. Grâce au paramètre Word.Application, passé à la fonction CreateObject, notre objet hérite des propriétés et méthodes pour piloter une instance de Word. Et justement, nous allons retrouver les mêmes techniques que celles que nous avons apprises en VBA Word.

Précisément et dans l'enchaînement, nous réglons sa propriété Visible à False. Nous ne souhaitons pas ouvrir de nouvelle fenêtre. Nous souhaitons que cette exportation se fasse en tâche de fond. Ensuite, nous exploitons la méthode Add de sa collection Documents pour créer un nouveau document Word, grâce au paramètre wdNewBlankDocument.

Régler la taille du texte sur le document Word
Pour agir sur un document, nous savons que l'objet VBA Word Selection offre de riches propriétés et méthodes. Et comme nous allons l'exploiter à de multiples reprises, nous proposons d'optimiser le code VBA avec un bloc With. De cette manière, dans ce bloc, nous n'aurons plus qu'à énumérer les propriétés et méthodes à calibrer.
  • A la suite du code VBA, créer le bloc With suivant :
...
With instanceW.Selection
.Font.Size = 16

End With


Très simplement, nous exploitons la propriété Size de l'objet enfant Font de l'objet Selection pour régler la taille du texte.

Ecrire sur Word en VBA Excel
Nous pouvons donc maintenant procéder à l'inscription des informations du formulaire Excel sur ce document Word. Les données à piocher sont respectivement placées en cellules C6, E6, C9 et E9.
  • A la suite dans le bloc With, ajouter les instructions VBA suivantes :
...
.Font.Underline = True
.TypeText "Civilité :"
.Font.Underline = False
.TypeText vbLf & Range("C6").Value
.TypeText vbLf & vbLf

.Font.Underline = True
.TypeText "Nom :"
.Font.Underline = False
.Font.Bold = True
.TypeText vbLf & Range("E6").Value
.Font.Bold = False
.TypeText vbLf & vbLf
...


Nous précédons chaque information récoltée d'un titre que nous plaçons une ligne au-dessus, comme Civilité et Nom. Ces inscriptions, nous les réalisons grâce à la classique méthode TypeText de l'objet Selection. Ces titres, nous les soulignons. A l'instar des balises dans le langage HTML encadrant les éléments à régler, nous fixons l'attribut avant le titre (Underline = True), et nous le neutralisons après. Ensuite, nous inscrivons (TypeText) sur la ligne du dessous (vbLf) l'information correspondante récoltée dans sa cellule (Range). Puis, nous créons deux sauts de ligne entre chaque bloc (TypeText vbLf & vbLf). Une petite spécificité est à noter pour le nom. Comme il s'agit d'une information importante, nous la passons en gras (.Font.Bold = True).

Nous devons poursuivre avec l'inscription du prénom et du Mail. La signature est identique à celle de la civilité. Donc, il apparaît judicieux de répliquer deux fois son bloc de code VBA et de l'ajuster.
  • A la suite dans le bloc With, ajouter les instructions VBA suivantes :
...
.Font.Underline = True
.TypeText "Prénom :"
.Font.Underline = False
.TypeText vbLf & Range("C9").Value
.TypeText vbLf & vbLf

.Font.Underline = True
.TypeText "Mail :"
.Font.Underline = False
.TypeText vbLf & Range("E9").Value
.TypeText vbLf & vbLf
...


Enregistrer le document Word depuis Excel
Ce n'est pas tout à fait terminé. Pour que ces données soient archivées sur le disque, nous devons encore enregistrer le document que nous venons d'enrichir. Pour cela, il suffit d'exploiter la méthode SaveAs de l'objet ActiveDocument de l'instance de Word.
  • Après le bloc With, ajouter les lignes VBA suivantes :
...
instanceW.ActiveDocument.SaveAs2 chemin, wdFormatDocumentDefault
instanceW.Quit
Set instanceW = Nothing
...


A cette méthode, nous lui passons le chemin d'accès que nous avons recomposé en début de procédure. En second argument avec la valeur wdFormatDocumentDefault, nous indiquons qu'il s'agit de l'enregistrement classique d'un document Word.
  • Enregistrer les modifications (CTRL + S) et basculer sur la feuille Excel (ALT + Tab),
  • Renseigner les quatre champs du formulaire puis cliquer sur le bouton Valider,
  • Dans l'explorateur Windows, afficher le contenu du sous dossier exports,
Vous avez le plaisir de constater la présence du fichier Word avec un nom retravaillé en fonction des informations de la personne.
  • Double cliquer sur ce fichier pour l'ouvrir dans Word,
Fiche de renseignement Word créée en VBA Excel

Comme vous pouvez l'apprécier, nous avons parfaitement réussi à construire une fiche client dans Word depuis Excel, grâce au code VBA.

La procédure complète que nous avons bâtie est la suivante :

Private Sub valider_Click()
Dim instanceW As Object: Dim chemin As String

chemin = ActiveWorkbook.Path & "\exports\" & LCase(Replace(Range("E6").Value & "-" & Range("C9").Value, " ", "-")) & ".docx"
Set instanceW = CreateObject("Word.Application")
instanceW.Visible = False
instanceW.Documents.Add DocumentType:=wdNewBlankDocument

With instanceW.Selection
.Font.Size = 16

.Font.Underline = True
.typetext "Civilité :"
.Font.Underline = False
.typetext vbLf & Range("C6").Value
.typetext vbLf & vbLf

.Font.Underline = True
.typetext "Nom :"
.Font.Underline = False
.Font.Bold = True
.typetext vbLf & Range("E6").Value
.Font.Bold = False
.typetext vbLf & vbLf

.Font.Underline = True
.typetext "Prénom :"
.Font.Underline = False
.typetext vbLf & Range("C9").Value
.typetext vbLf & vbLf

.Font.Underline = True
.typetext "Mail :"
.Font.Underline = False
.typetext vbLf & Range("E9").Value
.typetext vbLf & vbLf

End With

instanceW.ActiveDocument.SaveAs2 chemin, wdFormatDocumentDefault
instanceW.Quit
Set instanceW = Nothing

End Sub


 
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