Comment outiller vos processus avec Excel.Partie 2

Excel/Word/VBA : générer des documents Word/PDF de manière automatique avec des données variables

Dans cette deuxième partie, je vais vous montrer comment gagner en performance  grâce à Excel, Word et VBA pour automatiser la création des documents pour vos clients. En effet, dans toutes les TPE et PME, la plupart du temps, vous créez des documents pour vos clients, que ce soit des contrats, de la documentation produits ou services, des offres techniques et/ou commerciales.

Si ces documents sont très souvent de même forme et contiennent des informations communes. Si vous faites en général des copier/coller de leur contenu et les adapter au client ou partenaire.

Alors vous pouvez automatiser cette chaîne de création de document!!

  • Vous gagnerez un temps précieux
  • Vous éviterez des erreurs
  • Vous aurez une source d’information fiable et commune (base produits/services par exemple).

La suite Office (Word/Excel/Access) est réellement efficace pour les TPE et PME et suffit très souvent pour ‘optimiser’ des activités et processus.

Dans cette vidéo, je montre l’application que j’ai créé pour un client qui commercialise une solution logicielle. Sa solution doit être intégrée dans le SI (Système d’Information)  du client. Il est nécessaire de tester si la solution vendue apporte les fonctions attendues par le client et si elle fonctionne correctement dans l’environnement du client.

Pour cela, un document appelé ‘plan de test’ est généré de manière automatique pour chaque projet client. Il  contient la description des tests à effectuer lors de l’intégration.  La procédure est la suivante :

  • Sous Excel, le collaborateur choisit, dans la liste de tous les tests possibles, uniquement les tests appropriés au client et à son environnement,
  • il saisit les informations spécifiques au projet client (nom client, nom projet …),
  • il clique sur un bouton ‘Générer le document’,
  • le document Word ‘plan de test’ est automatiquement créé.

Ce document pourrait tout aussi bien être directement sauvegardé au format PDF. Ici, il a été décider de laisser au collaborateur la possibilité d’ajouter ou de modifier des informations.

Après la vidéo, vous trouverez l’explication du code VBA  permettant de générer un document Word et de modifier son contenu.

Tutoriel Excel/VBA ‘Génération automatique de document word/pdf’

Voir aussi  » Application Excel de collecte des besoins clients »

Explication du Code:
Quelques fonctions d’accès au document Word depuis VBA

Comment créer un nouveau document Word depuis vba sur la base d’un document déja existant (template)

Dim wApp As Word.Application
Dim oDoc As Word.Document

Set wApp = New Word.Application ‘ DEMARRAGE DE L’APPLICATION WORD
Set oDoc = wApp.Documents.Add(ThisWorkbook.Path & « \MON-DOC Template.docx ») ‘ CREATION DU NOUVEAU DOCUMENT

Comment ajouter des lignes à un tableau d’un document word depuis vba

‘ On Ajoute 5 lignes au 4ème tableaux du document après la ligne 8
For j = 1 To 5
‘MsgBox (« Ajout ligne : » & j)
oDoc.Tables(4).Rows.Add BeforeRow:=oDoc.Tables(4).Rows(7)
Next

Comment Ajouter ou modifier le contenu d’un tableau word depuis vba

‘On ajoute ici le contenu de A1:A5 dans la colonne 1 du 4ème tableau du document word
‘ et le contenu de B10:B14 dans la colonne 2 du 4ème tableau du document word
For NoLig = 1 To 5
oDoc.Tables(4).Columns(1).Cells(NoLig).Range.Text = ActiveWorkbook.Worksheets(« MaFeuille »).Cells(A,NoLig)
oDoc.Tables(4).Columns(2).Cells(NoLig).Range.Text = ActiveWorkbook.Worksheets(« MaFeuille »).Cells(B,NoLig+9)
Next

Comment supprimmer une table d’un document Word depuis vba?

‘on supprimer ici la 10ème table
oDoc.Tables(10).Delete

Comment affecter une valeur à un champ (Custom property) d’un document word depuis vba?

‘ affecter une valeur à un champ
oDoc.CustomDocumentProperties(« urlApplication »).Value = Worksheets(« maFeuille »).Range(« C7 »).Text

‘demander à Word de mettre à jour les valeurs des champs dans le document word
oDoc.Fields.Update

Comment afficher ou masquer certains éléments (propriété  texte masqué) d’un document Word depuis vba ‘

‘ Dans Word, vous pouvez définir des éléments avec la propriété ‘Texte Masqué’.
Par exemple , vous pouvez définir un style particulier qui vous permettra d’afficher de l’aide dans le document. Ce style aura la propriété ‘ Texte Masqué’. Dans Word, Menu Fichier/Options/Affichage, vous pouvez indiquez si les ‘Textes masqué’ doivent être affichés et s’ils doivent être imprimés
oDoc.ActiveWindow.View.ShowHiddenText = False

Comment rendre visible un  document Word depuis vba et y positionner le curseur à un endroit spécifique

‘rendre visiblel’application Word
wApp.Visible = True

‘Se positionner sur le 4ème tableau des tests

oDoc.Tables(4).Rows(1).Select

 

Fonction de l’application qui génére le document Word depuis VBA et l’adapte aux critère défini par la feuille Excel

Sub creationDoc()
'Déclaration des variables
    Dim wApp As Word.Application
    Dim oDoc As Word.Document  ' Le Nouveau Document Word
    Dim DerLig As Integer
    Dim nbArrayODoc As Integer  ' Nombre de tableaux dans ODoc avant mise ajour. Utiliser pour savoir si TestCase suplementaire a ceux du tableur
    
    Application.EnableEvents = False
    DerLig = Sheets("testARealiser").Range("A" & Rows.Count).End(xlUp).Row - 1
    
    'Affectation des données aux variables
    Set wApp = New Word.Application   ' DEMARRAGE DE L'APPLICATION WORD
    Set oDoc = wApp.Documents.Add(ThisWorkbook.Path & "\MON-DOC Template.docx")  ' CREATION DU NOUVEAU DOCUMENT WORD DEPUIS UN TEMPLATE
    
    ' On récupère le nombre de tableaux du Document word pour tester si incohérence du nombre de test cases entre doc excel et template xord
     nbArrayODoc = oDoc.Tables.Count
        
    
    'Affectation des données Excel au Tableau section 2.1 resultat des Tests
       'wApp.Visible = True
    ' on agrandi le tableau si nécessaire
    NbRows = oDoc.Tables(4).Rows.Count - 1
    'MsgBox ("NB de ligne du tableau Word :" & NbRows & "  nb ligne excel :" & DerLig)
    If (NbRows < DerLig) Then
    For j = 1 To (DerLig - NbRows)
         'MsgBox ("Ajout ligne :" & j)
        oDoc.Tables(4).Rows.Add BeforeRow:=oDoc.Tables(4).Rows(NbRows)
    Next
        
    End If
    
    ' ON REMPLI LE TABLEAU DU DOCUMENT WORD AVEC DU TEXTE PROVENANT DE LA FEUILLE EXCEL
    For NoLig = 1 To DerLig
       oDoc.Tables(4).Columns(1).Cells(NoLig + 1).Range.Text = ActiveWorkbook.Worksheets("testARealiser").Cells(NoLig + 1, 1)
       oDoc.Tables(4).Columns(3).Cells(NoLig + 1).Range.Text = ActiveWorkbook.Worksheets("testARealiser").Cells(NoLig + 1, 3)
    Next
    
    ' -----------------------------------------------------------------------------------------
    ' suppression du document des testcases non selectionné
     DerLig = Sheets("TestSelection").Range("E" & Rows.Count).End(xlUp).Row
     
     
    'Utilisation du N° de ligne dans une boucle For ... Next
    For NoLig = DerLig To arrayFirsLine Step -1
        If (Not (Worksheets("TestSelection").Cells(NoLig, 2) = "oui")) Then
         ' ON SUPPRIME LES TABLEAUX (test-case) QU'ON NE SOUHAITE PAS GARDER (tests à ne pas inclure indiqués dans la feuille Excel)
             'MsgBox ("Suppression table(" & Worksheets("TestSelection").Cells(NoLig, 5).Value)
             If (oDoc.Tables.Count >= Worksheets("TestSelection").Cells(NoLig, 5).Value) Then
                oDoc.Tables(Worksheets("TestSelection").Cells(NoLig, 5).Value).Delete
             End If
        End If
    Next
    
    ' Afficher un warning si le template contient plus de test case que le tableau de la feuille "TesSelection"
    'MsgBox (" Nbre de tables dans le doc :" & nbArrayODoc)
    If (nbArrayODoc <> Worksheets("TestSelection").Cells(DerLig, 5).Value) Then
        MsgBox (" Attention !! Dans le document Word(" & nbArrayODoc & " tableaux) il semble qu'il n'y ait pas le même nombre de  de Test Cases que ceux défini dans ce tableauexcel(" & Worksheets("TestSelection").Cells(DerLig, 5).Value & ") ! " & vbCrLf & vbCrLf & "Vérifier le document obtenu et contacter le service PRS pour vérification du template")
    End If
    
    
    
    ' MON MET A JOUR LA TABLE DES MATIERES
   
    For Each tm In oDoc.TablesOfContents
        tm.Update
    Next
    
       
   ' ON AFFECTE DES VALEURS A DES PROPRIETES DU DOCUMENT (CustomProperties)
    ' On met a jour nom client et ResponsableClient
    oDoc.CustomDocumentProperties("ResponsableTest").Value = Worksheets("TestSelection").Range("C5").Text
    oDoc.CustomDocumentProperties("Client").Value = Worksheets("TestSelection").Range("C3").Text
    oDoc.CustomDocumentProperties("ProjetClient").Value = Worksheets("TestSelection").Range("C4").Text
    ' Maj des Urls de tests
    oDoc.CustomDocumentProperties("urlService").Value = Worksheets("TestSelection").Range("C6").Text
    oDoc.CustomDocumentProperties("urlApplication").Value = Worksheets("TestSelection").Range("C7").Text
    ' refresh des code de champs du document (hors header et footer)
     oDoc.Fields.Update
    'wApp.ActiveDocument.ActiveWindow.View.Type = wdPrintView
   
   ' refresh des code de champs header et footer
    wApp.PrintPreview = True
    wApp.PrintPreview = False
    
    ' Affichage du document
    Application.EnableEvents = True
    wApp.Visible = True
    
    '  On masque  le paragraphe au style "Guidelines" du Debut
    oDoc.ActiveWindow.View.ShowHiddenText = False
    
    'on se positionne sur tableau des tests
    oDoc.Tables(4).Rows(1).Select
     
End Sub