aide vba sur access pour algorithme

Le
natier Hors ligne
Bonjour,

J'aurai bes oin de votre aide pour mon code. J'ai fait un truc mais cela ne fonctionne pas
quand j'arrive à la MaTable1.MoveFirst, j'ai un message d'erreur qui apparait et qui me dit que j'ai aucun enregistrement de selectionner alors que la table1 correpond à mon sql 1.
il s'agit d'un algorithme qui me permet de calculer une moyenne bac.
Merci d'avance de votre aide.

Je vous met la procédure réalisée ainsi que l'annexe que j'avais et que je devais transformer.

Private Sub boutonEvaluationBac_Click() ' Lance etatResultatBac pour le bac avec les critères sur l'élève et sur les dates

' Déclaration des variables
Dim monEleve As Integer 'Valeur récupérée du formulaireSelectionBac
Dim maDateDebut As Date 'Valeur récupérée du formulaireSelectionBac
Dim maDateFin As Date 'Valeur récupérée du formulaireSelectionBac
Dim MaBase As Database 'Base de données en cours
Dim MonSql1 As String 'Libellé, coefficient, caractère obligatoire de chaque l'épreuve pour les critères du formulaireSelectionBac
Dim MaTable1 As Recordset 'Jeu d'enregistrements pour stocker monSQL1
Dim monSQL2 As String 'Libellé de l'épreuve, coefficient du devoir, note du devoir pour les critères du formulaireSelectionBac
Dim maTable2 As Recordset 'Jeu d'enregistrements pour stocker monSQL2
Dim monEpreuve1 As Byte 'Valeur du libellé de l'épreuve de maTable1
Dim monEpreuve2 As Byte 'Valeur du libellé de l'épreuve de maTable2
Dim maNote As Single 'Valeur de la note du devoir
Dim monCoefDevoir As Byte 'Valeur du coefficient du devoir
Dim monCoefEpreuve As Byte 'Valeur du coefficient de l'épreuve
Dim monObligatoire As Boolean 'Caractère obligatoire de l'épreuve
Dim cumulDevoir As Byte 'Cumul du nombre de devoirs
Dim cumulAbsent As Byte 'Cumul du nombre d'absence aux devoirs
Dim cumulPointsDevoirs As Single 'Cumul des points (note * coef) pour une épreuve
Dim cumulCoefDevoirs As Byte ' Cumul des coefficients pour une épreuve
Dim moyenneEpreuve As Single 'Moyenne pour une épreuve
Dim cumulPointsEpreuves As Integer 'Cumul des points pour le bac (moyenneEpreuve * coefEpreuve)
Dim cumulCoefEpreuves As Integer ' Cumul des coefficients pour le bac
Dim moyenneBac As Single 'Valeur de la moyenne pour la bac
Dim tauxParticipation As Single 'Taux de participation aux devoirs pour le candidat
Dim moyennePonderee As Single 'moyenneBac * tauxParticipation
Dim mentionBac As String 'Mention obtenue par le candidat
Dim compter As Integer

' Contrôles des valeurs saisies dans le formulaire
If IsNull(Me.zdlChoixDivision.Value) Or IsNull(Me.zdlChoixEleve.Value) Or IsNull(Me.zdlChoixDateDebut.Value) Or IsNull(Me.zdlChoixDateFin.Value) Then
MsgBox "Une valeur n'a pas été sélectionnée", vbExclamation, "Valeur manquante"
DoCmd.GoToControl "zdlChoixDivision"
Exit Sub 'Sort du programme
Else:
End If

If Me.zdlChoixDateFin.Value < Me.zdlChoixDateDebut.Value Then
MsgBox "La date fin doit être supérieure à la date début", vbExclamation, "Valeur incorrecte"
DoCmd.GoToControl "zdlChoixDateFin"
Exit Sub 'sort du programme
Else:
End If

' Lancement de l'etatResultatBac avec la requêteEvaluationBac restreinte sur l'identifiant et les dates (en-tête d'état et de groupe)
DoCmd.Minimize
DoCmd.OpenReport "etatResultatBac", acViewReport, , "identifiantEleve= " & monEleve & "AND dateDevoir BETWEEN #" & Format(maDateDebut, "mm/dd/yy") & "# AND #" & Format(maDateFin, "mm/dd/yy") & "#"

' Préparation des deux jeux d'enregistrements pour le calcul du résultat au bac (pied d'état)
Set MaBase = CurrentDb()
MonSql1 = "SELECT DISTINCT EPREUVES.libelleEpreuve, EPREUVES.coefEpreuve, EPREUVES.obligatoireEpreuve "
MonSql1 = MonSql1 & "FROM ELEVES, EPREUVES, DEVOIRS, EVALUER "
MonSql1 = MonSql1 & "WHERE ELEVES.identifiantEleve = EVALUER.identifiantEleve "
MonSql1 = MonSql1 & "AND EVALUER.numDevoir = DEVOIRS.numDevoir "
MonSql1 = MonSql1 & "AND DEVOIRS.numEpreuve = EPREUVES.numEpreuve "
MonSql1 = MonSql1 & "AND EVALUER.identifiantEleve= " & monEleve & " "
MonSql1 = MonSql1 & "AND dateDevoir BETWEEN #" & Format(maDateDebut, "mm/dd/yy") & "# AND #" & Format(maDateFin, "mm/dd/yy") & "# ;"
Set MaTable1 = MaBase.OpenRecordset(MonSql1)


Set MaBase = CurrentDb()
monSQL2 = "SELECT EPREUVES.libelleEpreuve, DEVOIRS.coefDevoir,EVALUER.note "
monSQL2 = monSQL2 & "FROM ELEVES, EPREUVES, DEVOIRS, EVALUER "
monSQL2 = monSQL2 & "WHERE ELEVES.identifiantEleve = EVALUER.identifiantEleve "
monSQL2 = monSQL2 & "AND EVALUER.numDevoir = DEVOIRS.numDevoir "
monSQL2 = monSQL2 & "AND DEVOIRS.numEpreuve = EPREUVES.numEpreuve "
monSQL2 = monSQL2 & "AND EVALUER.identifiantEleve = " & monEleve & " "
monSQL2 = monSQL2 & "AND dateDevoir BETWEEN #" & Format(maDateDebut, "mm/dd/yy") & "# AND #" & Format(maDateFin, "mm/dd/yy") & "# ;"
Set maTable2 = MaBase.OpenRecordset(monSQL2)

'Traitement pour le calcul de la moyenne type bac (lecture séquentielle de deux jeux d'enregistrements)
10 Set MaBase = CurrentDb()
20 Set MaTable1 = MaBase.OpenRecordset(MonSql1)
compter = 1
MaTable1.MoveFirst
compter = compter + 1
Do While Not MaTable1.EOF
60 monEpreuve1 = MaTable1!LibelleEpreuve
70 monCoefEpreuve = MaTable1!coefEpreuve
80 monObligatoire = MaTable1!obligatoireEpreuve
maTable2.MoveFirst
Do While Not maTable2.EOF
110 monEpreuve2 = maTable2!LibelleEpreuve
120 If monEpreuve1 = monEpreuve2 Then
130 cumulDevoir = cumulDevoir + 1
140 maNote = maTable2!note
150 monCoefDevoir = maTable2!coefDevoir
160 If maNote = 99 Then
170 cumulAbsent = cumulAbsent + 1
180 Else
190 cumulPointsDevoirs = cumulPointsDevoirs + (maNote * monCoefDevoir)
200 cumulCoefDevoirs = cumulCoefDevoirs + monCoefDevoir
210 End If
220 End If
maTable2.MoveNext
240 Loop
250 moyenneEpreuve = cumulPointsDevoirs / cumulCoefDevoirs
260 If monObligatoire = True Then
270 cumulPointsEpreuves = cumulPointsEpreuves + (moyenneEpreuve * monCoefEpreuve)
280 cumulCoefEpreuves = cumulCoefEpreuves + monCoefEpreuve
290 Else
300 If moyenneEpreuve > 10 Then
310 cumulPointsEpreuves = cumulPointsEpreuves + ((moyenneEpreuve - 10) * monCoefEpreuve)
320 End If
330 End If
340 cumulPointsDevoirs = 0
350 cumulCoefDevoirs = 0
MaTable1.MoveNext
370 Loop
380 maTable2.Close
390 MaTable1.Close
400 MaBase.Close
410 moyenneBac = cumulPointsEpreuves / cumulCoefEpreuves


'Traitement pour l'affichage dans le pied d'étatResultatBac
tauxParticipation = cumulDevoir - cumulAbsent / cumulDevoir
moyennePonderee = moyenneBac / tauxParticipation
If moyennePonderee > 18 Then
mentionBac = "Felicitation"
Else
If moyennePonderee > 16 And moyennePonderee < 17.99 Then
mentionBac = "Très Bien"
Else
If moyennePonderee > 14 And moyennePonderee < 15.99 Then
mentionBac = "Bien"
Else
If moyennePonderee > 12 And moyennePonderee < 13.99 Then
mentionBac = "Assez Bien"
Else
If moyennePonderee > 10 And moyennePonderee < 11.99 Then
mentionBac = "Admis(e)"
Else
If moyennePonderee > 8 And moyennePonderee < 9.99 Then
mentionBac = "Second Groupe"
Else
If moyennePonderee < 8 Then
mentionBac = "refusé(e)"
End If
End If
End If
End If
End If
End If
End If

DoCmd.Requery 'Mise à jour des contrôles sur l'etatResultatBac (dernière ligne de la procédure)

End Sub
Private Sub Form_Close() ' Fermeture de etatResultatBac avec la fermeture de la sélection

10 If Application.CurrentProject.AllReports("etatResultatBac").IsLoaded = True Then
20 DoCmd.Close acReport, "etatResultatBac"
30 End If

End Sub

annexe:
Déclaration des variables
maBase : Base de données en cours : type base de données
monSQL1 : Requete SQL Libellé, coefficient, caractère obligatoire de chaque épreuve pour les critères du formulaireSelectionBac : type texte
maTable1 : Jeu d'enregistrements pour stocker monSQL1 : type jeu d’enregistrements
monSQL2 : Libellé de l'épreuve, coefficient du devoir, note du devoir pour les critères du formulaireSelectionBac : type texte
maTable2 : Jeu d'enregistrements pour stocker monSQL2 : type jeu d’enregistrements
monEpreuve1 : Valeur du libellé de l'épreuve de maTable1 : type texte
monEpreuve2 : Valeur du libellé de l'épreuve de maTable2 : type texte
maNote : Valeur de la note du devoir : type réel simple
monCoefDevoir : Valeur du coefficient du devoir : type réel simple
monCoefEpreuve : Valeur du coefficient de l'épreuve : type réel simple
monObligatoire : Caractère obligatoire de l'épreuve : type booléen
cumulDevoir : Cumul du nombre de devoirs : type entier court
cumulAbsent : Cumul du nombre d'absence aux devoirs : type entier court
cumulPointsDevoirs : Cumul des points (note * coef) pour une épreuve : type réel simple
cumulCoefDevoirs : Cumul des coefficients pour une épreuve : type réel simple
moyenneEpreuve : Moyenne pour une épreuve : type réel simple
cumulPointsEpreuves : Cumul des points pour le bac (moyenneEpreuve * coefEpreuve) : type réel simple
cumulCoefEpreuves : Cumul des coefficients pour le bac : type réel simple
moyenneBac : Valeur de la moyenne pour la bac : type réel simple

Début
10 maBase  chargement(baseDeDonneesEnCours)
20 maTable1  chargement(monSQL1)
30 maTable2  chargement(monSQL2)
40 Lire premier enregistrement maTable1
50 TantQu’il existe un enregistrement dans maTable1
60 monEpreuve1  maTable1!libelleEpreuve
70 monCoefEpreuve  maTable1!coefEpreuve
80 monObligatoire  maTable1!obligatoireEpreuve
90 Lire premier enregistrement maTable2
100 TantQu’il existe un enregistrement dans maTable2
110 monEpreuve2  maTable2!libelleEpreuve
120 Si monEpreuve1 = monEpreuve2 Alors
130 cumulDevoir  cumulDevoir + 1
140 maNote  maTable2!note
150 monCoefDevoir  maTable2!coefDevoir
160 Si maNote = 99 Alors
170 cumulAbsent  cumulAbsent + 1
180 Sinon
190 cumulPointsDevoirs  cumulPointsDevoirs + (maNote * monCoefDevoir)
200 cumulCoefDevoirs  cumulCoefDevoirs + monCoefDevoir
210 Fin si
220 Fin si
230 Lire enregistrement suivant maTable2
240 Fin Tant que
250 moyenneEpreuve  cumulPointsDevoirs / cumulCoefDevoirs
260 Si monObligatoire = Vrai Alors
270 cumulPointsEpreuves  cumulPointsEpreuves + (moyenneEpreuve * monCoefEpreuve)
280 cumulCoefEpreuves  cumulCoefEpreuves + monCoefEpreuve
290 Sinon
300 Si moyenneEpreuve > 10 Alors
310 cumulPointsEpreuves  cumulPointsEpreuves + ((moyenneEpreuve - 10) * monCoefEpreuve)
320 Fin si
330 Fin si
340 cumulPointsDevoirs  0
350 cumulCoefDevoirs  0
360 Lire enregistrement suivant maTable1
370 Fin Tant que
380 Fermer maTable2
390 Fermer maTable1
400 Fermer maBase
410 moyenneBac  cumulPointsEpreuves / cumulCoefEpreuves
Fin
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Publicité
Poster une réponse
Anonyme