Partager
| More
Le site
Nos astuces

Trucs et astuces Express: Calculer un cumul dans access - Trucs et astuces Express

Aller au contenu

Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

Calculer un cumul dans access

#1 L'utilisateur est hors-ligne   Hubert Icône

  • Membre
  • Groupe : Membres
  • Messages : 1
  • Inscrit : 05-février 08

Posté 05 février 2008 - 04:19

Comment calculer et ajouter un champ cumul dans une table ou une requête (Access 2003), merci
0

#2 L'utilisateur est hors-ligne   francishop Icône

  • Membre
  • Groupe : Membres
  • Messages : 23
  • Inscrit : 14-mai 08

Posté 16 mai 2008 - 04:50

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.
Le peu que je sais, c'est à mon ignorance que je le dois.
...............................................................................Sacha Guitry
0

Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet


annuaire