OVH Cloud OVH Cloud

compter cases à cocher dans état

14 réponses
Avatar
C15
Bonjour =E0 toutes et =E0 tous,

J'ai un =E9tat qui r=E9capitule, pour des membres d'une association, leur p=
r=E9sence aux Ag
Ag00, Ag01, Ag02...
sous la forme de cases =E0 cocher, coch=E9es ou pas selon leur pr=E9sence.
Du fait du nombre d'ann=E9es pour certains, cela commence =E0 prendre trop =
de place.

Je voudrais cr=E9er un contr=F4le ind=E9pendant qui me compte combien de fo=
is un membre a =E9t=E9 pr=E9sent aux Ag entre sa date d'adh=E9sion [DateAdh=
esion]et l'ann=E9e 2010.
J'ai essay=E9 avec CpteDom(...)mais je me plante dans la syntaxe.
Par mieux en essayant une requ=EAte analyse crois=E9e.
Pour info je suis sous Access 2003.

Merci de votre aide.
A+

4 réponses

1 2
Avatar
db
Le 26/02/2013 18:01, C15 a écrit :
Les Ag ont lieu tous les ans depuis 1983.




Modifier la ligne dans l'événement an ajoutant comme paramètre le
dernier champ à prendre en compte


Me.NbPrésences.Value = DonnePrésences(Me.NAdherent.Value, "Ag22")


et modifier la fonction en conséquence :

Function DonnePrésences(nAdh As Integer, lastAg as string) as byte
Dim db As DAO.Database, rst As DAO.Recordset, fld As Field, n As Byte
Set db = CurrentDb
n = 0
Set rst = db.OpenRecordset("select * from T_Adhérents where NAdhherent="
& nAdh)
For Each fld In rst.Fields
If fld.Type = dbBoolean and left(fld.name,2)="Ag" and
fld.name<=lastAg Then
n = n - fld.Value
End If
Next
Set rst = Nothing
Set db = Nothing
DonnePrésences = n
End Function


db
Avatar
C15
Le mardi 26 février 2013 18:25:55 UTC+1, db a écrit :
Le 26/02/2013 18:01, C15 a écrit :

> Les Ag ont lieu tous les ans depuis 1983.





Modifier la ligne dans l'événement an ajoutant comme paramètre le

dernier champ à prendre en compte





Me.NbPrésences.Value = DonnePrésences(Me.NAdherent.Value, "Ag22")





et modifier la fonction en conséquence :



Function DonnePrésences(nAdh As Integer, lastAg as string) as byte

Dim db As DAO.Database, rst As DAO.Recordset, fld As Field, n As Byte

Set db = CurrentDb

n = 0

Set rst = db.OpenRecordset("select * from T_Adhérents where NAdhheren t="

& nAdh)

For Each fld In rst.Fields

If fld.Type = dbBoolean and left(fld.name,2)="Ag" and

fld.name<=lastAg Then

n = n - fld.Value

End If

Next

Set rst = Nothing

Set db = Nothing

DonnePrésences = n

End Function





db



Bonjour db

Pour info la dernière version proposée donne le nb de présence entre AG00 et AG22 (Ag 2000 et Ag 2022)
De même si je change en AG05 (jusqu'à 2005).
Il semblerait par ailleurs qu'il y ait une erreur de calcul si l'on met < = mais pas si l'on se contente de = (ça, c'est moins grave).

Par contre les présence entre AG83 at AG99 (années 1983 à 1999)ne son t pas décomptées.

Merci de ton aide.

A+

C15
Avatar
db
Le 27/02/2013 09:36, C15 a écrit :
Bonjour db

Pour info la dernière version proposée donne le nb de présence entre AG00 et AG22 (Ag 2000 et Ag 2022)
De même si je change en AG05 (jusqu'à 2005).
Il semblerait par ailleurs qu'il y ait une erreur de calcul si l'on met <= mais pas si l'on se contente de = (ça, c'est moins grave).

Par contre les présence entre AG83 at AG99 (années 1983 à 1999)ne sont pas décomptées.




Il aurait fallu préciser que les deux derniers chiffres du nom du champ
indiquaient l'année (et pas un un numéro d'ordre, comme on aurait pu le
croire dans votre post du 26 à 11h11).

Modifier la ligne dans l'événement an ajoutant comme paramètre la
dernière année à prendre en compte :


Me.NbPrésences.Value = DonnePrésences(Me.NAdherent.Value, "2002")


et modifier la fonction en conséquence :

Function DonnePrésences(nAdh As Integer, lastAg as string) as byte
Dim db As DAO.Database, rst As DAO.Recordset, fld As Field, n As Byte,
cAn As String
Set db = CurrentDb
n = 0
Set rst = db.OpenRecordset("select * from T_Adhérents where nAdherent="
& nAdh)
For Each fld In rst.Fields
If fld.Type = dbBoolean And Left(fld.Name, 2) = "Ag" Then
cAn = Right(fld.Name, 2)
If cAn > "80" Then
cAn = "19" & cAn
Else
cAn = "20" & cAn
End If
If cAn <= lastAg Then
n = n - fld.Value
End If
End If
Next
Set rst = Nothing
Set db = Nothing
DonnePrésences = n
End Function


db
Avatar
C15
Le mercredi 27 février 2013 10:22:19 UTC+1, db a écrit :
Le 27/02/2013 09:36, C15 a écrit :

> Bonjour db

>

> Pour info la dernière version proposée donne le nb de présence en tre AG00 et AG22 (Ag 2000 et Ag 2022)

> De même si je change en AG05 (jusqu'à 2005).

> Il semblerait par ailleurs qu'il y ait une erreur de calcul si l'on met <= mais pas si l'on se contente de = (ça, c'est moins grave).

>

> Par contre les présence entre AG83 at AG99 (années 1983 à 1999)ne sont pas décomptées.

>



Il aurait fallu préciser que les deux derniers chiffres du nom du champ

indiquaient l'année (et pas un un numéro d'ordre, comme on aurait pu le

croire dans votre post du 26 à 11h11).



Modifier la ligne dans l'événement an ajoutant comme paramètre la

dernière année à prendre en compte :





Me.NbPrésences.Value = DonnePrésences(Me.NAdherent.Value, "2002")





et modifier la fonction en conséquence :



Function DonnePrésences(nAdh As Integer, lastAg as string) as byte

Dim db As DAO.Database, rst As DAO.Recordset, fld As Field, n As Byte,

cAn As String

Set db = CurrentDb

n = 0

Set rst = db.OpenRecordset("select * from T_Adhérents where nAdherent ="

& nAdh)

For Each fld In rst.Fields

If fld.Type = dbBoolean And Left(fld.Name, 2) = "Ag" Then

cAn = Right(fld.Name, 2)

If cAn > "80" Then

cAn = "19" & cAn

Else

cAn = "20" & cAn

End If

If cAn <= lastAg Then

n = n - fld.Value

End If

End If

Next

Set rst = Nothing

Set db = Nothing

DonnePrésences = n

End Function





db



Bonsoir db,

Désolé pour cette information que j'avais oubliée de préciser.

Malgré cela tu as pu répondre parfaitement à mon attente.
Grâce à ta procédure, j'obtiens tout à fait ce que je voulais, cela marche impeccablement bien.

Encore merci.

C15
1 2