Publicité
Tatiak
4 avril 2017

"PILOTER" WORD DEPUIS EXCEL - 4ème PARTIE (4/4)

Excel n'est pas adapté pour faire de la mise en page comme avec Word. Pour générer depuis Excel des rapports, des factures, des contrats ou autres documents, j'utilisais jusqu'à présent la méthode de remplissage d'un modèle déjà mis en page (décrite précédemment dans d'autres articles).

Seulement voilà quand on oublie de transmettre le modèle Word avec le fichier Excel, l'export des données vers Word est totalement inopérant!

La solution est de créer de zéro votre document Word depuis Excel. Votre xlsm sera alors complètement autonome.

Mieux qu'un long descriptif, je vous renvoie directement au code commenté de la démo jointe. Dans ce code, diverses opérations sont menées, dans l'ordre :

  • création d'un nouveau document
  • ajustement des marges
  • ajout d'un logo
  • ajout d'un titre
  • ajout d'un signet (en cas de besoin ultérieur)
  • ajout d'un ou de plusieurs paragraphes (selon choix fait sur la feuille Excel)
  • ajout d'un saut de page
  • ajout d'un tableau
  • ajustement des colonnes du tableau
  • remplissage de l'entête du tableau
  • remplissage (et ajout) des lignes
  • calcul d'un total d'une des colonne du tableau
  • inscription du total calculé à la dernière ligne du tableau
  • ajout de la date et de l'heure de la création du document
  • enregistrement du document dans "Mes Documents" sous-dossier "Word" (qui se crée si besoin)


A chacune de ces opérations, on règle la police, le soulignement, l'alignement, l'espacement, ... bref on fait la mise en page qui rendra votre doc parfaitement lisible.
Ceci n'est pas exhaustif des possibilités offertes par le VBA, pour d'autres fonctions dites-moi votre besoin et je vous indiquerai le code à ajouter.

Cette démo est fonctionnelle avec Office 2016 (pas testée avec d'autres versions)

Bon téléchargement et laissez-moi vos commentaires!
Pierre

Téléchargement de : Créer_Doc_Word.xlsm

Téléchargement de : Créer_Doc_Word_20avril21.xlsm

Téléchargement de : Créer_Doc_Word_21avril21.xlsm

 Téléchargement de : Démo_modif_tableau_3mai2021.xlsm

 

* Edit du 03/05/2021 : Pour répondre  à Floflo, voici une démo de modification/création d'un tableau dans un doc

* Edit du 21/04/2021 : Pour répondre à Lilie, voici une démo pour positionner l'adresse au mieux dans une zone de texte

* Edit du 20/04/2021 : Pour répondre à Lilie, voici une démo pour positionner des images au mieux + diverses méthodes

* Edit du 02/06/2018 : Pour répondre à l'idée de 78Chris, voici du code pour appliquer un style pour permettre l'utilisation ultérieure de sommaire, en-têtes dynamiques, renvois, ...
 
La deuxième partie du code formate le style et n'est donc à écrire qu'une seule fois dans le code complet
' Ajoute un  titre UTILISANT UN "STYLE"
.Paragraphs.Add
With .Paragraphs(.Paragraphs.Count - 1).Range
    .Text = "2ème TITRE DU DOCUMENT AVEC STYLE"
    .Style = "Titre 1"
    .InsertParagraphAfter()
    
    ' Formatage du style "Titre 1" pour utilisation ultérieure
    .Style.Font.Bold = True
    .Style.Font.Underline = True
    .Style.Font.Color = RGB(150, 150, 150)
    .Style.ParagraphFormat.Alignment = wdAlignParagraphCenter
End With

Code à placer dans le bloc With WordDoc de la démo

 

* Ajout du 23/12/2020 : Pour répondre à la question de Dhardy : pour formater une partie de texte contenu dans un paragraphe ou dans une cellule d'un tableau word, on ajoute une procédure du genre "Formatage" comme ci-dessous avec les paramètres souhaités (couleur, taille, ...) et à chaque remplissage d'un paragraphe (ou d'une des cellules) on fait un appel du genre :
.cell(lig, col).Range.Text = LeTexteKiVaBien
Formatage WordDoc, "o" ' pour formater le 'o' et/ou
Formatage WordDoc, "2" ' pour formater le '2' contenu dans LeTexteKiVaBien

Sub Formatage(Wd As Object, S As String)
    With Wd.Content.Find
        .Text = S
        .Forward = False
        .Execute
        If .Found = True Then
            .Parent.Font.Name = "Arial"
            .Parent.Font.Size = 14
            .Parent.Font.Color = RGB(255, 0, 0) ' rouge
            .Parent.Font.Bold = True        ' en gras
            .Parent.Underline = 1 ' wdUnderlineSingle
        End If
    End With
End Sub

Publicité
Commentaires
F
Bonjour, <br /> <br /> <br /> <br /> Merci beaucoup pour cet article très intéressant. <br /> <br /> J'ai néanmoins une question qui subsiste. <br /> <br /> J'aimerais à partir d'un tableau de mon excel, créer un tableau word dans lequel certaines colonnes du excel. Jusque la tout va bien, j'arrive à faire le transfert. <br /> <br /> Par contre, je n'arrive pas à placer ce tableau ou je veux sur mon word, il me le place toujours à la fin. De plus ce tableau doit être mis à jour régulièrement, et je voudrais que lorsque je relance ma macro, elle vérifie que le tableau n'existe pas déja. Si il existe il faudrait le supprimer et le remplacer par la nouvelle version. <br /> <br /> <br /> <br /> Avez-vous une idée de ce que je pourrais faire ?
Répondre
L
Bonjour, comment dire que l'on veut écrire à x cm du haut (pour positionner l'adresse) ?
Répondre
L
Bonjour,<br /> <br /> j'ai un problème de positionnement de mon logo.<br /> <br /> Sur la première il se met à la bonne place <br /> <br /> With .Shapes(1) ' placement<br /> <br /> .Top = -40<br /> <br /> .Left = 170<br /> <br /> End With<br /> <br /> <br /> <br /> En fin de page, je fais un saut de page et ajoute de nouveau un logo, seulement mon code positionne le logo sur la 1re page et non au niveau de mon dernier paragraphe.
Répondre
L
Merci, <br /> <br /> la mise en forme du paragraphe se fait uniquement après avoir écrit le paragraphe ?
Répondre
L
Bonjour,<br /> <br /> Comment écrire à 10 cm du bord (pour l'adresse) et revenir à la position "normale" pour la suite ?
Répondre
Publicité