Comment créer par programmation une colonne dans un rapport Access

Numéro de la base de connaissances d’origine : 812719

Résumé

Cet article explique comment créer par programmation une colonne dans un rapport Access. Vous pouvez ajouter dynamiquement la colonne au rapport à l’aide de la méthode 1 ou de la méthode 2 décrites dans la section « Plus d’informations ».

Remarque

L’exemple de code de cet article utilise Microsoft Data Access Objects. Pour que ce code s’exécute correctement, vous devez référencer la bibliothèque d’objets Microsoft DAO 3.6. Pour ce faire, cliquez sur Références dans le menu Outils de la Rédacteur Visual Basic, puis vérifiez que la zone case activée Bibliothèque d’objets Microsoft DAO 3.6 est cochée.

Méthode 1 : Ajouter des colonnes au rapport par programmation

L’exemple suivant montre comment créer un rapport Access par programmation. Le code génère un rapport basé sur une requête de source d’enregistrement. Le rapport généré affiche la colonne Firstname et la colonne Lastname de la table Employees de l’exemple de base de données Northwind.mdb.

  1. Démarrez Access.

  2. Dans le menu Aide , cliquez sur Exemples de bases de données, puis sur Exemple de base de données Northwind. Fermez le formulaire Tableau principal lorsqu’il apparaît.

    Remarque

    Dans Access 2007, cliquez sur Exemple dans le volet Catégories de modèles, cliquez sur Northwind 2007, puis sur Télécharger.

  3. Dans le volet gauche, cliquez sur Rapports.

    Remarque

    Dans Access 2007, ignorez cette étape.

  4. Dans le volet droit, double-cliquez sur Créer un rapport en mode Création.

    Remarque

    Dans Access 2007, cliquez sur Création de rapports dans le groupe Rapports sous l’onglet Créer .

  5. Dans le menu Fichier, cliquez sur Enregistrer.

    Remarque

    Dans Access 2007, cliquez sur le bouton Microsoft Office, puis sur Enregistrer.

  6. Dans la boîte de dialogue Enregistrer sous , tapez AccessColumnBuilder, puis cliquez sur OK.

  7. Fermez le rapport.

  8. Dans le volet gauche, sélectionnez Formulaires.

    Remarque

    Dans Access 2007, ignorez cette étape.

  9. Dans le volet droit, double-cliquez sur Créer un formulaire en mode Création.

    Remarque

    Dans Access 2007, cliquez sur Création de formulaire dans le groupe Formulaires sous l’onglet Créer .

  10. Ajoutez un bouton de commande au formulaire.

    Remarque

    Dans Access 2007, cliquez sur Bouton pour ajouter un bouton au formulaire dans le groupe Contrôles de l’onglet Création .

  11. Cliquez avec le bouton droit sur le bouton de commande, cliquez sur Générer un événement, cliquez sur Générateur de code dans la boîte de dialogue Choisir le Générateur , puis cliquez sur OK.

  12. Ajoutez le code qui suit à l’événement OnClick du bouton de commande :

    Dim txtNew As Access.TextBox
    Dim labNew As Access.Label
    Dim lngTop      As Long
    Dim lngLeft     As Long
    Dim lblCol    As  Long
    Dim rpt As Report
    Dim reportQuery As String
    Dim rs As DAO.Recordset
    Dim i As Integer
    Dim prevColwidth As long
    
    lngLeft = 0
    lngTop = 0
    
    ' Open the report to design.
    ' To make changes in the number of columns that appear at run time.
    
    DoCmd.OpenReport "AccessColumnBuilder", acViewDesign
    
    Set rpt = Reports![AccessColumnBuilder]
    
    ' Change the number of columns required as per your requirement.
    reportQuery = "SELECT FirstName, LastName FROM Employees"
    
    ' Open the recordset.
    Set rs = CodeDb().OpenRecordset(reportQuery)
    ' Assign the query as a record source to report control.
    rpt.RecordSource = reportQuery
    
    ' Set the value to zero so that the left margin is initialized.
    prevColwidth = 0
    lblCol = 0
    ' Print the page header for the report.
    For i = 0 To rs.Fields.Count - 1
    Set labNew = CreateReportControl(rpt.Name, acLabel, acPageHeader, _
      , rs.Fields(i).Name, lblcol, , , lngTop)
      labNew.SizeToFit
      lblCol = lblCol + 600 + labNew.Width
    Next
    
    ' Create the column depending on the number of fields selected in reportQuery.
    ' Assign the column value to new created column.
    For i = 0 To rs.Fields.Count - 1
      ' Create new text box control and size to fit data.
      Set txtNew = CreateReportControl(rpt.Name, acTextBox, _
         acDetail, , , lngLeft + 15 + prevColwidth, lngTop)
      txtNew.SizeToFit
      txtNew.ControlSource = rs(i).Name
      ' Modify the left margin depending on the number of columns
      ' and the size of each column.
      prevColwidth = prevColwidth + txtNew.width
    Next
    'To save the modification to the report,  uncomment the following line of code:
    'DoCmd.Save
    ' View the generated report.
    DoCmd.OpenReport "AccessColumnBuilder", acViewPreview
    
    ' This opens the report in preview.
    
  13. Enregistrez, puis exécutez le formulaire.

  14. Pour afficher un aperçu du rapport, cliquez sur le bouton de commande que vous avez ajouté à l’étape 10.

    Les enregistrements qui suivent apparaissent sur la première page :

    First NameLast Name
    
    NancyDavolio
    
    MargaretPeacock
    
    ...............
    

    Le rapport contient la colonne Firstname et la colonne Lastname de la table Employees . Vous pouvez enregistrer le rapport ou apporter les modifications requises à la requête, puis exécuter le rapport.

Méthode 2 : Ajouter des colonnes au rapport au moment de l’exécution en définissant la propriété visible de la colonne existante

Cet exemple montre comment afficher une nouvelle colonne dans un rapport en manipulant la propriété Visible du contrôle.

Le rapport contient quatre colonnes. La Visible propriété des trois premières colonnes est définie sur oui. La Visible propriété de la quatrième colonne est définie sur non. Dans un saut de page, la Visible propriété de la quatrième colonne est définie sur Oui lorsque la colonne s’affiche.

  1. Démarrez Access.

  2. Dans le menu Aide , cliquez sur Exemples de bases de données, puis sur Exemple de base de données Northwind. Fermez le formulaire Tableau principal lorsqu’il apparaît.

    Remarque

    Dans Access 2007, cliquez sur Exemple dans le volet Catégories de modèles, cliquez sur Northwind 2007, puis sur Télécharger.

  3. Pour créer un rapport nommé Report1 et basé sur la table Products , procédez comme suit :

    1. Dans la fenêtre Base de données , cliquez sur Rapports , puis sur Nouveau.

      Remarque

      Dans Access 2007, cliquez sur Assistant Rapport dans le groupe Rapports sous l’onglet Créer .

    2. Dans la boîte de dialogue Nouveau rapport , cliquez sur Mode Création, sélectionnez Produits, puis cliquez sur OK.

    3. Ajoutez les zones de texte suivantes à la section Détails du rapport. Alignez les zones de texte.

    4. Placez les étiquettes correspondantes dans la section En-tête de page du rapport. Alignez les étiquettes.

      Report: Report1
      --------------------------
      Caption: TestReport
      ControlSource: Products
      
      Label:
         Name: ProductName_label
      
      Text Box:
         Name: ProductName
         ControlSource: ProductName
      
      Label:
         Name: UnitPrice_label
      
      Text Box:
         Name: UnitPrice
         ControlSource: UnitPrice
      
      Label:
         Name: UnitsInStock_label
      
      Text Box:
         Name: UnitsInStock
         ControlSource: UnitsInStock
      
      Label:
         Name: TotalPrice_label
         Visible: No
      
      Text Box:
         Name:  TotalPrice
         ControlSource:  =[UnitPrice] * [UnitsInStock]
         Visible: No
      
  4. Ajoutez un contrôle de zone de texte avec les propriétés suivantes à la section Detail . Placez la zone de texte directement au-dessus du contrôle ProductName .

    Ce contrôle fait office de compteur pour le nombre d’enregistrements dans le rapport.

    Text Box:
    -----------------------
    Name: Counter
    ControlSource: =1
    Visible: No
    RunningSum: Over All
    
  5. Dans la boîte à outils, cliquez sur Saut de page.

    Remarque

    Dans Access 2007, cliquez sur Ajouter ou supprimer un saut de page dans le groupe Contrôles de l’onglet Création .

  6. Ajoutez un contrôle de saut de page dans le coin inférieur gauche de la section Détails . Placez le contrôle de saut de page directement sous le contrôle ProductName . Définissez la propriété Name sur PageBreak.

  7. Dans la section Detail , définissez la propriété OnFormat sur la procédure événementielle suivante :

    If Me![Counter] Mod 2 = 0 Then Me![PageBreak].Visible = True _
    Else Me![PageBreak].Visible = False
    
  8. Pour réduire l’espace vide dans le rapport, placez votre pointeur entre le bas de la section Détails et le pied de page , puis faites glisser vers le haut.

  9. Dans la section Pied de page , définissez la propriété OnPrint sur la procédure événementielle qui suit :

    If Me![PageBreak].Visible = True Then
     Me![TotalPrice].Visible = True
     Me![TotalPrice_label].Visible = True
    Else
     Me![TotalPrice].Visible = False
     Me![TotalPrice_label].Visible = False
    End If
    

    Lorsque PageBreak se produit, la colonne TotalPrice s’affiche .

  10. Affichez un aperçu du rapport. Les enregistrements qui suivent apparaissent sur la première page :

    Product NameUnit PriceUnit in Stock
    
    Cahi$18.0039
    
    Chang$19.0017
    

    Remarque

    La première page du rapport contient trois colonnes.

    Les enregistrements qui suivent apparaissent sur la deuxième page :

    Product NameUnit PriceUnit in StockTotal Amount
    
    Aniseed Syrup $10.0013    130
    
    Chef A...    $22.00 53    1166
    

    Remarque

    Le saut de page se produit après la première page. Par conséquent, la deuxième page du rapport contient quatre colonnes.

References

Pour plus d’informations sur la création par programmation d’un rapport Access, consultez l’article suivant :

Créer un rapport simple