Aide - Recherche - Membres - Calendrier
Version complète : Calculer un cumul dans access
Trucs et astuces Express > Discussions Informatique > Microsoft Office 2003 / 2007 > Access
Hubert
Comment calculer et ajouter un champ cumul dans une table ou une requête (Access 2003), merci
francishop
Bonsoir, (23h 55)

Méthode utilisant la Fonction de Domaine DSUM :
CODE
SELECT tbl_Exemple.ChampExemple,
Val(DSum("ChampExemple","tbl_Exemple","ChampExemple <=" & [ChampExemple])) AS Cumul
FROM tbl_Exemple
ORDER BY tbl_Exemple.ChampExemple;

Méthode SQL :
CODE
SELECT T1.ChampExemple, (SELECT SUM(ChampExemple)
FROM tbl_Exemple 2
WHERE ChampExemple <= T1.ChampExemple) AS Cumul
FROM tbl_Exemple AS T1
ORDER BY T1.ChampExemple;

Mais attention aux risques d'erreurs. Pour ces deux exemples, les doublons ne seront pas pris en compte.
********************************************************************************

Pour pallier à ce désagrément, nous allons faire appel à un deuxième champ :
CODE
SELECT tbl_Exemple.ID, tbl_Exemple.ChampExemple,
DSum("ChampExemple","tbl_Exemple","ID <=" & [ID]) AS Cumul
FROM tbl_Exemple
ORDER BY tbl_Exemple.ID;


********************************************************************************

Ou, ma préférence, avec un peu de VBA.
Dans un module :
CODE
Function CumulQry(Clef As String, ClefValeur, _
        ChampCumul As String, Table As String)
  Dim RS As DAO.Recordset
  On Error GoTo Err_CumulQry
CumulQry = 0
  Set RS = CurrentDb().OpenRecordset(Table, dbOpenDynaset)

Select Case RS.Fields(Clef).Type
    ' La clef est Numérique?
    Case DB_INTEGER, DB_LONG, DB_CURRENCY, DB_SINGLE, _
        DB_DOUBLE, DB_BYTE
        RS.FindFirst "[" & Clef & "] = " & ClefValeur
    ' La clef est de type Date/Heure?
    Case DB_DATE
        RS.FindFirst "[" & Clef & "] = #" & Format(ClefValeur, _
        "mm/dd/yyyy") & "#"
    ' La clef est de type Texte?
    Case DB_TEXT
        RS.FindFirst "[" & Clef & "] = '" & ClefValeur & "'"
    Case Else
        MsgBox "ERREUR : Le type de données de la clef n'est pas valide!"
        Exit Function
   End Select

Do Until RS.BOF
    CumulQry = CumulQry + RS(ChampCumul)
    RS.MovePrevious
   Loop
  Set RS = Nothing
Stop_CumulQry:
    Exit Function
Err_CumulQry:
    Resume Stop_CumulQry
End Function

La requête-->qry_Exemple4 :
CODE
SELECT tbl_Exemple.ID, tbl_Exemple.ChampExemple,
    CumulQry("ID",[ID],"ChampExemple","qry_Exemple4") AS Cumul
FROM tbl_Exemple
ORDER BY tbl_Exemple.ID;

Cordialement.
Ceci une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquez ici.
Invision Power Board © 2001-2008 Invision Power Services, Inc.