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