Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/06/2011, 16h18   #1
Invité régulier
 
Femme Virginie Duboc
Étudiant
Inscription : juin 2011
Messages : 29
Détails du profil
Informations personnelles :
Nom : Femme Virginie Duboc
Âge : 20
Localisation : France, Oise (Picardie)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2011
Messages : 29
Points : 7
Points : 7
Par défaut Problème de soustraction toute simple entre deux heures

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 :

Code :
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
J'ai pris soin de bien commenter les lignes en question.

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.
voyel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2011, 21h45   #2
Rédacteur

 
Avatar de ClaudeLELOUP
 
Homme Claude LELOUP
Chercheur de loisirs (ayant trouvé !)
Inscription : novembre 2006
Messages : 5 242
Détails du profil
Informations personnelles :
Nom : Homme Claude LELOUP
Âge : 66
Localisation : Belgique

Informations professionnelles :
Activité : Chercheur de loisirs (ayant trouvé !)
Secteur : Finance

Informations forums :
Inscription : novembre 2006
Messages : 5 242
Points : 11 040
Points : 11 040
Bonjour,

Pour pouvoir t'aider, il faudrait avoir accès à tes données.

Peux-tu poster ta BDD ?
Attention, cette BDD ne peut contenir des données confidentielles !
ClaudeLELOUP est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/06/2011, 09h50   #3
Invité régulier
 
Femme Virginie Duboc
Étudiant
Inscription : juin 2011
Messages : 29
Détails du profil
Informations personnelles :
Nom : Femme Virginie Duboc
Âge : 20
Localisation : France, Oise (Picardie)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2011
Messages : 29
Points : 7
Points : 7
Je n'arrive pas à l'envoyer, un message s'affiche :

Citation:
Votre envoi ne peut pas être exécuté car la marque de sécurité est manquante.

Si ceci survient de façon inattendue, veuillez en informer l'administrateur en lui décrivant les actions effectuées avant de recevoir cet erreur.
Mais voici mon modèle relationnel :

ABSENCES (numabs, numapp#, dateabs, heuredeb, heurefin) => Correspond à toutes les absences des apprentis.
VISITE (numvisite, numapp#, nument#, numform#, datevisite1, crvisite1, datevisite2, crvisite2) => Correspond aux deux visites annuelles obligatoires qu'effectuent les formateurs (les profs, si vous préférez), "crvisite" est de type booléen, s'il y a eu un comtpe rendu ou pas.
TUTEUR (numtuteur, numciv#, nomtuteur, prenomtuteur, mailtuteur, nument#) => Correspond aux tuteurs, c'est-à-dire les personnes qui s'occupent des apprentis au sein de l'entreprise.
FORMATEUR (numform, nomform, prenomform, mailform) => Correspond aux professeurs qui s'occupent chacun d'un ou plusieurs apprentis (un apprenti n'est cependant suivi que par un seul formateur).
ENTREPRISE (nument, raisonsociale, adresse1ent, adresse2ent, cpent, villeent, telfixeent, telportent, faxent, nomresp, fctresp, numcci#) => Correspond aux entreprises où les apprentis sont en alternance ; le champ "nomresp" correspond au nom du responsable de l'entreprise, et peut être différent du tuteur de l'apprenti ; "fctresp" correspond à la fonction du responsable dans l'entreprise ; "numcci" est le numéro de la Chambre consulaire (j'ai mis "cci" parce que ça signifie "chambre de commerce et de l'industrie", mais il m'a dit que ça devait être plus large, mais bref, donc j'ai laissé le nom "cci").
APPRENTI (numapp, nomapp, prenomapp, adresse1app, adresse2app, cpapp, villeapp, telapp, mailapp, numclasse#, nument#, numtuteur#, numform#, numcontrat, datevisa, datedeb, datefin) => Correspond aux apprentis ; "numclasse" fait référence à la table CLASSE ; "numcontrat" est le numéro du contrat d'alternance ; "datevisa" correspond à la date à laquelle le chef de travaux du lycée a approuvé le contrat ; "datedeb" et "datefin" correspondent aux dates de début et de fin du contrat (2 ans).
CIVILITE (numciv, nomcivabrege, nomciventier) => 3 enregistrements : "1 - Mlle - Mademoiselle", "2 - Mme - Madame" et "3 - M. - Monsieur"
CLASSE (numclasse, nomclasse) => 2 enregistrements : "1 - MUC 1" et "2 - MUC 2"
CCI (numcci, nomcci, adresse1cci, adresse2cci, cpcci, villecci, telcci, faxcci, mailcci) => Correspond aux Chambres consulaires ; une chambre consulaire peut contenir plusieurs entreprises, mais une entreprise n'appartient qu'à une seule Chambre consulaire.

Information : les champs soulignés sont les clés primaires, et ceux avec des dièses sont des clés étrangères.

Voilà, j'espère que ça vous aidera.
voyel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/06/2011, 09h59   #4
Rédacteur

 
Avatar de ClaudeLELOUP
 
Homme Claude LELOUP
Chercheur de loisirs (ayant trouvé !)
Inscription : novembre 2006
Messages : 5 242
Détails du profil
Informations personnelles :
Nom : Homme Claude LELOUP
Âge : 66
Localisation : Belgique

Informations professionnelles :
Activité : Chercheur de loisirs (ayant trouvé !)
Secteur : Finance

Informations forums :
Inscription : novembre 2006
Messages : 5 242
Points : 11 040
Points : 11 040
Bonjour,

Citation:
Je n'arrive pas à l'envoyer, un message s'affiche :
1 tu zippes le fichier de la BDD
2 tu cliques sur "Ajouter une réponse" >> tu cliques la cinquième icône (l'attache trombone) et tu suis les instructions...
ClaudeLELOUP est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/06/2011, 10h05   #5
Invité régulier
 
Femme Virginie Duboc
Étudiant
Inscription : juin 2011
Messages : 29
Détails du profil
Informations personnelles :
Nom : Femme Virginie Duboc
Âge : 20
Localisation : France, Oise (Picardie)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2011
Messages : 29
Points : 7
Points : 7
Même en la zippant, elle est trop volumineuse :/
voyel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2011, 08h53   #6
Invité régulier
 
Femme Virginie Duboc
Étudiant
Inscription : juin 2011
Messages : 29
Détails du profil
Informations personnelles :
Nom : Femme Virginie Duboc
Âge : 20
Localisation : France, Oise (Picardie)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2011
Messages : 29
Points : 7
Points : 7
Si quelqu'un d'autre pouvait répondre... ^^
(Je n'ai jamais trop de conseils !)
voyel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2011, 09h25   #7
Rédacteur

 
Avatar de ClaudeLELOUP
 
Homme Claude LELOUP
Chercheur de loisirs (ayant trouvé !)
Inscription : novembre 2006
Messages : 5 242
Détails du profil
Informations personnelles :
Nom : Homme Claude LELOUP
Âge : 66
Localisation : Belgique

Informations professionnelles :
Activité : Chercheur de loisirs (ayant trouvé !)
Secteur : Finance

Informations forums :
Inscription : novembre 2006
Messages : 5 242
Points : 11 040
Points : 11 040
Bonjour Mademoiselle,

À toutes fins utiles voici le texte de ma réponse à votre message privé, par lequel vous m'avez transmis votre BDD :

Bonjour,

1 J’ai ajouté la requête « rGestApp » pour faciliter la lecture
2 le code de « Private Sub listeapp_Click() » tient en deux lignes !
Pour te documenter sur la fonction NZ() : dans le code place le curseur de la souris sur le mot-clé NZ => l’aide Access s’ouvre à la bonne page.
Pour te documenter sur les fonctions de domaine (ici Dlookup) vois :
-Les fonctions de domaine (Philippe JOCHMANS)
http://starec.developpez.com/tuto/fonctionsdomaines/


NB. au passage, j’ai constaté une anomalie dans ta table « absences » :
numabs numapp dateabs heuredebut heurefin
58 72 1/02/11 11:30 17:30
59 71 1/02/11 8:30 17:30


Les deux périodes se recouvrent => absent 9 heures et non 15 !


PS : Prends l'habitude de demander la compression de la BDD à la sortie (outils/options/Général : cocher la case ad hoc)

Reviens si problème.
-------------------

sql de la requête

Code :
1
2
3
SELECT absences.numapp, Sum(24*([heurefin]-[heuredeb])) AS heures
FROM absences
GROUP BY absences.numapp;
Ce qui permet de remplacer votre très long code par les deux lignes que voici :

Code :
1
2
Me.nbheuresabs = Nz(DLookup("Heures", "rGestapp", "NumApp=" & Me.listeapp.Column(0)), 0)
Me.nbjoursabs = Me.nbheuresabs / 9
ClaudeLELOUP est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2011, 09h54   #8
Invité régulier
 
Femme Virginie Duboc
Étudiant
Inscription : juin 2011
Messages : 29
Détails du profil
Informations personnelles :
Nom : Femme Virginie Duboc
Âge : 20
Localisation : France, Oise (Picardie)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2011
Messages : 29
Points : 7
Points : 7
Merci pour la réponse !

Donc je dois remplacer toute l'instruction "if" par les deux lignes et enregistrer la requête ?

Merci pour l'anomalie, c'est exact ! J'avais fait des tests au hasard afin de pouvoir tout tester...

Edit : Ca marche ! Merci ! Pour ce qui est des dates d'absences, j'avais laissé toutes les mêmes, donc normal, il y a plein d'anomalies, mais ce ne sont que des tests...
voyel est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h14.


 
 
 
 
Partenaires

Hébergement Web