Bonjour à tous et merci de votre temps et de votre aide.
J'ai un truc assez bizarre avec le code qui suit : il plante (pas de message juste "Access va redémarrer") lorsque j'essaye de consulter le paramètre prnNoGroupeAff.
Un peu de contexte
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 Private Sub Test_AssignerPlanifGroupeActivite() Dim chrono As New clsChrono: Call chrono.Demarrer("AssignerPlanifGroupeActivite") Call AssignerPlanifGroupeActivite(2017, DateSerial(207, 1, 1)) Call chrono.Arreter: Call chrono.Afficher: Set chrono = Nothing MsgBox "Fini" End Sub
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 Private Sub AssignerPlanifGroupeActivite(prmAnnee As Long, prmDateHeureApplication As Date) 'Pour tous les groupes d'activité ' Pour tous les groupes d'affectation ' Assigne le planifié Dim db As DAO.Database: Set db = CurrentDb Dim rMAJ As DAO.Recordset: Set rMAJ = db.OpenRecordset("tblPlanif_GroupeActivite_Quotidien", dbOpenSnapshot) Dim planifie As Double Do While Not rMAJ If rMAJ![DateHeure] >= prmDateHeureApplication Then Dim noGroupeAff As Long: noGroupeAff = rMAJ![noGroupeAff] planifie = mdlPlanif_Quotidien.CalculerGroupeActivite(rMAJ![Annee], rMAJ![NoGroupeActivite], rMAJ![NoDir], rMAJ![NoTerr], noGroupeAff) rMAJ.Edit rMAJ![NbHeurePlanifieAnnuel] = planifie rMAJ.MoveNext End If Loop Call rMAJ.Close: Set rMAJ = Nothing db.Close: Set db = Nothing End Sub
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Private Sub Test_CalculerGroupeActivite() Debug.Print CalculerGroupeActivite(2017, 1, 0, 1, 1) End SubSi j'exécute CalculerGroupeActivite() à partir de Test_CalculerGroupeActivite() tout va très bien et j'ai le résultat attendu.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 Public Function CalculerGroupeActivite(prmAnnee As Long, prmNoGroupeActivite As Long, prmNoDir As Long, prmNoTerr As Long, prmNoGroupeAff As Long) As Double Dim result As Double Select Case prmNoGroupeActivite Case NO_GROUPE_ACTIVITE_DISPO result = CalculerGroupeActivite_DISPO(prmNoDir, prmNoTerr, prmNoGroupeAff) Case NO_GROUPE_ACTIVITE_INDISPONIBLE result = CalculerGroupeActivite_INDISPONIBLE(prmNoDir, prmNoTerr, prmNoGroupeAff) Case NO_GROUPE_ACTIVITE_THEORIQUE result = CalculerGroupeActivite_THEORIQUE(prmNoDir, prmNoTerr, prmNoGroupeAff) Case Else 'Si on a pas de calcul spécial, om applique le calcul habituel result = mdlPlanif.CalculerValeurPlanifGroupeActivite(prmAnnee, prmNoDir, prmNoTerr, prmNoGroupeAff, True) End Select CalculerGroupeActivite = result End Function
Si j'exécute à partir de la ligne
dans AssignerPlanifGroupeActivite() où les valeurs de paramètres sont exactement les mêmes (2017, 1, 0, 1, 1), Access plante quand j'essaye de voir la valeur de prmNoGroupeAff.
Code : Sélectionner tout - Visualiser dans une fenêtre à part planifie = mdlPlanif_Quotidien.CalculerGroupeActivite(rMAJ![Annee], rMAJ![NoGroupeActivite], rMAJ![NoDir], rMAJ![NoTerr], noGroupeAff)
Avant que je déclare une variable noGroupeAffdans AssignerPlanifGroupeActivite() je pouvais voir la valeur sans que cela plante et c'était quelque chose comme 300000 alors que cela aurait du être 1. Avant un décompile, c'était quelque chose comme 290000. On dirait l'adresse en mémoire de la variable au lieu de sa valeur.
J'ai vérifié mes paramètre au moment de l'appel dans AssignerPlanifGroupeActivite() et ce sont bien 2017, 1, 0, 1, 1. Mais rendu dans CalculerGroupeActivite() cela devient 2017, 1, 0, 1, ... Plantage.
Les 5 champs de données sont tous typés Entier Long.
Mon erreur doit être grosse comme une maison mais je ne la vois absolument pas.
Si quelqu'un la vois merci de me la pointer.
A+
Partager