mjsm
Messages postés19Date d'inscriptionmardi 5 janvier 2010StatutMembreDernière intervention 6 avril 2016
-
12 oct. 2010 à 16:33
mjsm
Messages postés19Date d'inscriptionmardi 5 janvier 2010StatutMembreDernière intervention 6 avril 2016
-
12 oct. 2010 à 22:30
Bonjour J'ai fait une base de données pour gérer des cours.
Dans le module ??Jour de Pâques?? je dois déclarer DPannee qui est la seconde année de la période scolaire.
L'année en question se trouve dans la table [T_Vacances_Scolaires] où le champ [PerScol_Fin] contient une date du style 30/06/2011?
Cette table ne contient qu'une seule ligne.
J'ai fait ce petit bout de programme qui refuse de fonctionner : erreur 13 ? Incompatibilité de type à la ligne set rst = currentDp?.
J'ai essayé beaucoup de choses, consulté tout ce que j'ai trouvé?.
Bref : Pouvez-vous m?aider ? D'avance merci
---------------------
Private Sub Commande43_Click()
Dim DPannee As Date ? In fine sera égal à l'année N°2 de la période scolaire
Dim rst As DAO.Database
Set rst = CurrentDb.OpenRecordset("SELECT [PerScol_Fin] FROM [T_Vacances_Scolaires]WHERE [PerScol_Fin] < #01/01/2099#", dbOpenSnapshot)
DPannee = rst(Year("PerScol_Fin"))
MsgBox DPannee
End Sub ? fin provisoire le programme continue avec le calcul de la date de Pâques que j'ai trouvé sur le net.
Dim G, C, C_4, E, H, K, P, Q, I, B, J1, J2, R
Dim Dpaques as date
G = DPannee Mod 19
C = DPannee \ 100
C_4 = C \ 4
E = (8 * C + 13) \ 25
H = (19 * G + C - C_4 - E + 15) Mod 30
K = H \ 28
P = 29 \ (H + 1)
Q = (21 - G) \ 11
I = (K * P * Q - 1) * K + H
B = DPannee \ 4 + DPannee
J1 = B + I + 2 + C_4 - C
J2 = J1 Mod 7
R = 28 + I - J2
If R <= 31 Then
DPaques = DateValue(CStr(R) & "/3/" & CStr(DPannee))
Else
DPaques = DateValue(CStr(R - 31) & "/4/" & CStr(DPannee))
End If
MsgBox DPaques
Rst.Close
Set rst = Nothing
End Sub
A voir également:
Comment récupérer une valeur dans un champs d'une table.
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 12 oct. 2010 à 21:05
Salut
Erreur 13, mais sur quelle ligne ?
Si ta table n'a qu'un seul champ, pourquoi avoir utiliser une clause WHERE ?
A mon avis, tu peux l'enlever.
Un RecordSet (rst) n'est pas un tableau, c'est un RecordSet - Lapalisse (1470-1525).
Méthode de lecture d'un champ (facilement trouvable dans l'aide) :
DPannee = Year(rst.Fields("PerScol_Fin").Value)
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
mjsm
Messages postés19Date d'inscriptionmardi 5 janvier 2010StatutMembreDernière intervention 6 avril 2016 12 oct. 2010 à 22:30
Merci Jack
Votre solution a fonctionnée du premier coup ! Super !
Je mets le programme qui fonctionne ci-dessous pour info
Private Sub Commande43_Click()
Dim rst As DAO.Recordset 'Database
Set rst = CurrentDb.OpenRecordset("SELECT [PerScol_Fin] FROM [T_Vacances_Scolaires]")
DPannee = Year(rst.Fields("PerScol_Fin").Value)
'MsgBox DPannee
'MsgBox "test ok", vbInformation, "ok"
Dim G, C, C_4, E, H, K, P, Q, I, B, J1, J2, R
G = DPannee Mod 19
C = DPannee \ 100
C_4 = C \ 4
E = (8 * C + 13) \ 25
H = (19 * G + C - C_4 - E + 15) Mod 30
K = H \ 28
P = 29 \ (H + 1)
Q = (21 - G) \ 11
I = (K * P * Q - 1) * K + H
B = DPannee \ 4 + DPannee
J1 = B + I + 2 + C_4 - C
J2 = J1 Mod 7
R = 28 + I - J2
If R <= 31 Then
DPaques = DateValue(CStr(R) & "/3/" & CStr(DPannee))
Else
DPaques = DateValue(CStr(R - 31) & "/4/" & CStr(DPannee))
End If
' MsgBox DPaques
rst.Close
Set MaDate = Nothing
End Sub