Comment créer une requête de totaux en cours d’exécution dans Microsoft Access

Avancé : nécessite des compétences d’experts en codage, en interopérabilité et en multi-utilisateur.

Cet article s’applique à un fichier de base de données Microsoft Access .MDB ou .ACCDB.

Résumé

Cet article présente deux méthodes que vous pouvez utiliser pour créer une requête de totaux en cours d’exécution. Une requête de totaux en cours d’exécution est une requête dans laquelle le total de chaque enregistrement est une somme de cet enregistrement et de tous les enregistrements précédents. Ce type de requête est utile pour afficher des totaux cumulés sur un groupe d’enregistrements (ou sur une période de temps) dans un graphique ou un rapport.

Note Vous pouvez voir une démonstration de la technique utilisée dans cet article dans l’exemple de fichier Qrysmp00.exe.

Informations supplémentaires

Méthode 1

La première méthode utilise une fonction DSum et des critères dans une requête pour créer une somme en cours d’exécution au fil du temps. La fonction DSum additionne l’enregistrement actif et tous les enregistrements précédents. Lorsque la requête passe à l’enregistrement suivant, la fonction DSum s’exécute à nouveau et met à jour le total cumulé.

L’exemple de requête suivant utilise la table Orders de l’exemple de base de données Northwind pour créer une somme en cours d’exécution des coûts de transport pour chaque mois en 1997. Les exemples de données sont limités à un an pour des raisons de performances. Étant donné que la fonction DSum s’exécute une fois pour chaque enregistrement dans la requête, le traitement de la requête peut prendre plusieurs secondes (en fonction de la vitesse de votre ordinateur). Pour créer et exécuter cette requête, procédez comme suit :

  1. Ouvrez l’exemple de base de données Northwind.

  2. Créez une nouvelle requête select et ajoutez la table Orders .

  3. Dans le menu Affichage , cliquez sur Totaux.

    Note Dans Access 2007, cliquez sur Totaux dans le groupe Afficher/Masquer sous l’onglet Création .

  4. Dans la première colonne de la grille de conception de requête, tapez l’expression suivante dans la zone Champ et effectuez les sélections suivantes pour les zones Total, Trier et Afficher :

    Field: AYear: DatePart("yyyy",[OrderDate])
    Total: Group By
    Sort: Ascending
    Show: Yes
    

    L’expression dans la zone Champ affiche et trie la partie year du champ OrderDate.

  5. Dans la deuxième colonne de la grille de conception de requête, tapez l’expression suivante dans la zone Champ et effectuez les sélections suivantes pour les zones Total, Sort et Show :

    Field: AMonth: DatePart("m",[OrderDate])
    Total: Group By
    Sort: Ascending
    Show: Yes
    

    L’expression dans la zone Champ trie et affiche la partie mois du champ Date de commande sous la forme d’une valeur entière comprise entre 1 et 12.

  6. Dans la troisième colonne de la grille de conception de requête, tapez l’expression suivante dans la zone Champ et effectuez les sélections suivantes pour les zones Total et Afficher.

    NOTE Dans l’exemple suivant, un trait de soulignement (_) à la fin d’une ligne est utilisé comme caractère de continuation de ligne. Supprimez le trait de soulignement de la fin de la ligne lors de la recréation de cet exemple.

    Field: RunTot: DSum("Freight","Orders","DatePart('m', _
    [OrderDate])<=" & [AMonth] & " And DatePart('yyyy', _
    [OrderDate])<=" & [AYear] & "")
    Total: Expression
    Show: Yes
    

    L’expression dans la zone Champ utilise la fonction DSum() pour additionner le champ Freight lorsque les valeurs des champs AMonth et AYear sont inférieures ou égales à l’enregistrement actif que la requête traite.

  7. Dans la quatrième colonne de la grille de conception de requête, tapez l’expression suivante dans la zone Champ et effectuez les sélections suivantes pour les zones Total, Sort et Show :

    Field: FDate: Format([OrderDate],"mmm")
    Total: Group By
    Sort: Ascending
    Show: Yes
    

    L’expression dans la zone Champ s’affiche chaque mois dans un format textuel, tel que Jan, Fév, Mar, etc.

  8. Dans la cinquième colonne de la grille de conception de requête, tapez l’expression suivante dans la zone Champ et effectuez les sélections suivantes pour les zones Total, Critères et Afficher :

    Field: DatePart("yyyy",[OrderDate])
    Total: Where
    Criteria: 1997
    Show: No
    

    L’expression dans la zone Champ filtre le recordset de la requête pour inclure les données de 1997 uniquement.

  9. Exécutez la requête. Notez que le champ RunTot affiche les enregistrements suivants avec une somme en cours d’exécution :

    AYear AMonth RunTot FDate
    --------------------------------------
    1997 1 2238.98 Jan
    1997 2 3840.43 Feb
    1997 3 5729.24 Mar
    1997 4 8668.34 Apr
    1997 5 12129.74 May
    1997 6 13982.39 Jun
    1997 7 17729.29 Jul
    1997 8 22204.73 Aug
    1997 9 26565.26 Sep
    1997 10 32031.38 Oct
    1997 11 36192.09 Nov
    1997 12 42748.64 Dec
    

Méthode 2

La deuxième méthode utilise une requête de totaux avec une fonction DSum() pour créer un total en cours d’exécution sur un groupe.

L’exemple de requête suivant utilise la table Orders pour additionner les coûts de transport par employé, ainsi que pour calculer une somme en cours d’exécution du fret. Pour créer et exécuter la requête, procédez comme suit :

  1. Ouvrez l’exemple de base de données Northwind.mdb.

  2. Créez une nouvelle requête select et ajoutez la table Orders.

  3. Dans le menu Affichage, cliquez sur Totaux.

    Note Dans Access 2007, cliquez sur Totaux dans le groupe Afficher/Masquer sous l’onglet Création .

  4. Dans la première colonne de la grille de conception de requête, ajoutez le champ suivant à la zone Champ et effectuez les sélections suivantes pour les zones Total et Afficher :

    Field: EmpAlias: EmployeeID
    Total: Group By
    Show: Yes
    

    Ce champ regroupe les données par EmployeeID.

  5. Dans la deuxième colonne de la grille de conception de requête, ajoutez le champ suivant à la zone Champ et effectuez les sélections suivantes pour les zones Total et Afficher :

    Field: Freight
    Total: Sum
    Show: Yes
    

    Ce champ additionne les données de fret.

  6. Dans la troisième colonne de la grille de conception de requête, tapez l’expression suivante dans la zone Champ et effectuez les sélections suivantes pour les zones Total et Afficher.

    NOTE Dans l’exemple suivant, un trait de soulignement (_) à la fin d’une ligne est utilisé comme caractère de continuation de ligne. Supprimez le trait de soulignement de la fin de la ligne lors de la recréation de cet exemple.

    Field: RunTot: Format(DSum("Freight","Orders","[EmployeeID]<=" _& [EmpAlias] & ""),"$0,000.00")
    Total: Expression
    Show: Yes
    

    L’expression dans la zone Champ utilise une fonction DSum() pour additionner le champ Freight lorsque l’EmployeeID est inférieur ou égal à l’EmpAlias actuel, puis met en forme le champ en dollars.

  7. Exécutez la requête. Notez que le champ RunTot affiche les enregistrements suivants avec une somme en cours d’exécution :

    Employee SumOfFreight RunTot
    -------------------------------------------------
    Davolio, Nancy $8,836.64 $8,836.64
    Fuller, Andrew $8,696.41 $17,533.05
    Leverling,Janet $10,884.74 $28,417.79
    Peacock, Margaret $11,346.14 $39,763.93
    Buchanan, Steven $3,918.71 $43,682.64
    Suyama, Michael $3,780.47 $47,463.11
    King, Robert $6,665.44 $54,128.55
    Callahan, Laura $7,487.88 $61,616.43
    Dodsworth, Anne $3,326.26 $64,942.69