Bonjour à tous.
Alors voilà, je suis en stage dans un lycée et je dois créer une application pour gérer les BTS MUC de l'établissement, notamment les absences.
Pour cela, j'ai un formulaire "gestapp" (gestion des apprentis) qui est composé d'une zone de liste avec la liste des noms, prénoms et classes des apprentis, et des boutons "ajouter", "modifier", "supprimer", "afficher", "retour au menu principal". Jusque là, aucun souci, tout fonctionne.
Mais j'ai aussi deux zones de texte "nbheuresabs" et "nbjoursabs" qui compte respectivement le nombre d'heures d'absence de l'apprenti sélectionné dans la zone de liste et le nombre de jours qui en découle (je compte des journées de 9h de cours (oui c'est chargé !)).
Pour les jours, aucun souci, les calculs sont bons.
En revanche, pour les heures, je ne comprends pas du tout où j'ai pu faire une erreur.
Lorsque je sélectionne l'apprenti "ADRIAENSSENS", je dois voir 22h d'absences (j’ai même vérifié à la calculatrice pour être sûre !), mais il m'affiche 18...
Voici un extrait de mon code :
J'ai pris soin de bien commenter les lignes en question.
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
26
27
28
29
30 For i = 0 To listeapp.ListCount - 1 If Me.listeapp.Selected(i) = True Then numapp = listeapp.Column(0, i) End If Next i nbabs = "SELECT COUNT(numabs) AS nbAbs FROM absences WHERE numapp = " & numapp & ";" exeAbs = CurrentDb.OpenRecordset(nbabs)!nbabs If exeAbs > 0 Then ' liste des "heuredeb" de l'apprenti sélectionné heuredeb = CurrentDb.OpenRecordset("SELECT heuredeb FROM absences WHERE numapp = " & numapp & ";")!heuredeb ' liste des "heurefin" de l'apprenti sélectionné heurefin = CurrentDb.OpenRecordset("SELECT heurefin FROM absences WHERE numapp = " & numapp & ";")!heurefin ' faire la différence entre les "heuredeb" et "heurefin" diffHeures = DateDiff("h", heuredeb, heurefin) ' additionner les nombres d'heures d'absence pour l'apprenti sélectionné calcul_heures = "SELECT SUM(" & diffHeures & ") AS nbHeures FROM absences WHERE numapp = " & numapp & ";" ' afficher dans "nbheuresabs" le nombre d'heures d'absences nbheuresabs = CurrentDb.OpenRecordset(calcul_heures)!nbHeures ' compter le nombre de journées (de 9h) d'absence nbJours = nbheuresabs / 9 ' arrondir au dixième nbJoursArr = Format(nbJours, "#0.0") ' remplacer la virgule par le point nbJoursPt = Replace(nbJoursArr, ",", ".") ' afficher dans "nbjoursabs" le nombre de jours d'absence nbjoursabs = nbJoursPt Else nbheuresabs = "0" nbjoursabs = "0" End If
Merci d'avance à ceux qui me répondront, car j'avoue galérer là dessus, alors que ça parait si simple !
PS : Pour information, je suis en première année de BTS IG (et je passe en 2nde année option DA), et on a fait même pas 1 mois de VBA... Mon stage se termine le 24 juin et j'ai encore pas mal de choses à faire grâce à ces calculs.
Partager