Comment ouvrir et remplir un modèle avec Excel VBA

Partage maintenant:

Les modèles Excel sont généralement des classeurs, avec un cadre de création de rapports, souvent pris en charge par des fonctions. Un modèle (xltx) peut être utilisé encore et encore sans le polluer avec des données. Après le remplissage avec des données, un classeur modèle est enregistré en tant que xlsx, préservant l'état vierge du xltx lui-même.

Dans cet exercice, nous utiliserons le code VBA pour ouvrir et remplir un modèle. Le gabarit peut être trouvé ici et la macro Excel utilisée peuvent être trouvées ici.

Cet article suppose que le lecteur a affiché le ruban Développeur et est familiarisé avec l'éditeur VBA. Si ce n'est pas le cas, veuillez Google "Excel Developer Tab" ou "Excel Code Window".

Le gabarit

Tout d'abord, nous allons créer un modèle factice, rempli de données, d'un tableau croisé dynamique et d'un graphique, comme suit :

Ouvrez un nouveau fichier Excel. Renommez « Sheet1 » en « Chart » et « Sheet2 » en « Data »

Copiez le texte suivant, y compris les titres, dans D1 de l'onglet "Données" :

Direction RéfTravail Genre
Enfants et famille CH SW2588 femme
Enfants et famille CAN RS2775 femme
Enfants et famille CH SW2630 femme
Enfants et famille CAN RS2775 Masculin
Enfants et famille CHCC2628 femme
Enfants et famille CH HT2579 femme
Santé communautaire CW T(2559 femme
Santé communautaire CW QS2774 femme
Santé communautaire TC O2745 Masculin
Environnement EE SM2814 femme
Environnement EE IT2772 Masculin
Environnement EE SO2784 Masculin
Ressources RSCO2557 femme
Ressources RS HO2539 Masculin

Sélectionnez toutes les données, y compris les en-têtes de colonne, et insérez un tableau croisé dynamique en A1 de la feuille "Données", comme indiqué ci-dessous.Insérer un tableau croisé dynamique en A1 de la feuille "Données"

Créez un graphique dans l'onglet "Graphique", en utilisant le tableau croisé dynamique comme source de données.Créer un graphique sur l'onglet "Graphique"

Supprimez les données dans D2:F15. Il n'est pas nécessaire de réinitialiser la plage de données du tableau croisé dynamique ; laissez-le rempli même s'il n'y a pas de données.  Supprimer les données dans D2 : F15

Enregistrez le classeur sous « VacancyTemplate.xlx.” dans un sous-répertoire de celui dans lequel le classeur de macros doit résider. Répondez "Non" à toutes les alertes d'Excel pendant la sauvegarde.

Nous aurons également besoin d'un sous-répertoire Reports. Par exemple:

Rapports Excel (xlsm stocké ici)

|_Gabarits (xlxt stocké ici)

       |_Rapports (chaque xlsx enregistré ici)

Une fois enregistré en tant que xlx, fermez le modèle

La macro

Ouvrez un nouveau classeur pour contenir notre code. Renommez "Sheet1" en "Main" et "Sheet2" en "Database".

Placez un bouton sur "Main" pour piloter l'application.

Normalement, les données sont extraites des bases de données. Étant donné que tout le monde n'a pas de base de données à portée de main, la feuille "Base de données" émulera une table de base de données.

Copiez les données figurant au début de cet article dans l’onglet « Base de données » à l’adresse A1…Copiez les données figurant au début de cet article dans l'onglet Base de données, à l'emplacement A1.

Le code

La structure de code ci-dessous définit clairement les processus :

  • Obtenir les données de la « base de données » ;
  • Ouvrez le modèle ;
  • Remplissez le modèle avec les données et réinitialisez la plage de données du tableau croisé dynamique ;
  • Enregistrer le modèle en tant que rapport
Option Explicit
    'Create objects to represent the template workbook and worksheets
    Public wb As Object
    Public XL As Object
    Public connDB As New ADODB.Connection
    Public rs As ADODB.Recordset
    Public eRow As Integer
    Public eRec As Integer
    Public dDate As String

Sub openWorksheet()
    Call GetData
    Call OpenTemplate
    Call PopulateTemplate
    
    'Save template as datestamped xlsx
    On Error Resume Next
    dDate = Format(Now(), "yyyy.mm.dd")
    wb.SaveAs Filename:=ActiveWorkbook.Path & "\Reports\Vacancies" & dDate & ".xlsx", _
         FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False

     Sheets("Main").Activate        'Move off the database tab
     wb.Activate            'Bring the chart to the fore
     Set wb = Nothing
     Set XL = Nothing
     Set rs = Nothing
     Set connDB = Nothing
End Sub

Sub GetData()
    'Emulate database retrieval
    If connDB.State = 1 Then connDB.Close
    Sheets("Database").Activate
    Sheets("Database").Range("A1").Select
    Selection.End(xlDown).Select
    
    eRec = ActiveCell.Row - 1 'establish how many records will be in the recordset
                     'This step won't be needed in a database environment
    eRow = ActiveCell.Row   'the end row, used later in the template
    
    connDB.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
      "Data Source=" & ActiveWorkbook.FullName & ";" & _
      "Extended Properties=Excel 12.0;"
        
    Set rs = New ADODB.Recordset
    rs.Open "Select top " & eRec & " * from [Database$]", connDB, , , adCmdText
End Sub

 Sub OpenTemplate()
    Set XL = CreateObject("Excel.Application")
    XL.Visible = True       'enables us to see what's happening on debug.
    XL.Workbooks.Add ActiveWorkbook.Path & "\Templates\VacancyTemplate.xltx"
    Set wb = XL.ActiveWorkbook             'the new workbook is referenced by "wb"
 End Sub
 
 Sub PopulateTemplate()
    wb.Sheets("Data").Activate
    wb.Sheets("Data").Range("D2").CopyFromRecordset rs
    wb.Sheets("Data").Range("A1").Select
    
    'resize the range driving the pivot table, using the eRow variable.
    wb.Sheets("Data").PivotTables("PivotTable1").ChangePivotCache wb. _
        PivotCaches.Create(SourceType:=xlDatabase, SourceData:="Data!R1C4:R" & eRow & "C6", _
        Version:=xlPivotTableVersion14)
    wb.Sheets("Chart").Select

 End Sub

Objets de données ActiveX

Pour simuler une lecture de base de données, il faut référencer la bibliothèque ActiveX. Pour ce faire, accédez à Outils > Références dans la fenêtre de code.Référence à la bibliothèque ActiveX

Testez le code

Attribuez le bouton sur "Principal" à Sous Openworkbook. Enregistrez le classeur sous le nom "Populating Templates.xlsm".

FERMEZ le classeur et rouvrez-le.

Appuyez sur le bouton pour afficher le résultat. Augmentez le nombre de lignes de données dans "Base de données" et exécutez à nouveau, en voyant si le graphique a été mis à jour avec les informations supplémentaires.

Dans le code ci-dessus, nous avons montré le modèle au début, avec XL.Visible = Vrai. Dans l'environnement en direct, cela peut être fait à la toute fin, de sorte que les mises à jour de l'écran ne soient pas visibles.

Faites face au désastre des données !

Rien n'est plus frustrant qu'un fichier Excel sur lequel on travaille depuis longtemps qui plante, corrompt le fichier source et qu'aucune copie de sauvegarde n'est disponible. Dans ce cas, si Excel ne parvient pas à récupérer le fichier endommagé, tout le travail effectué est perdu, à moins de disposer d'un outil de récupération sous la main. corriger Excel fichiers.

Il est également prudent de sauvegarder fréquemment un travail précieux.

Introduction de l'auteur:

Felix Hooker est un expert en récupération de données dans DataNumen, Inc., qui est le leader mondial des technologies de récupération de données, y compris réparation rar et produits logiciels de récupération sql. Pour plus d'informations, visitez www.datanumen.com

Partage maintenant:

Les commentaires sont fermés.