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.
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
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
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
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
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
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
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
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.
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
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 :
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
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 :
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
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 :
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
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
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
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
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.
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.