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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
| dim db as DAO.Database
dim rsQuest as DAO.Recordset, rsChoixQuest as DAO.Recordset
Dim nbType1 as long, nbType2 as long, nbGenre1 as long, nbGenre2 as long
Dim indiceT as long, stType as string
' Détermination des nombres de chaque type:
nbType1=PrctType1*nbQuestions ' nombre de questions du type 1
nbType2=PrctType2*nbQuestions ' nombre de questions du type 2
nbGenre1=PrctGenre1*nbQuestions ' nombre de questions du genre 1
nbGenre2=PrctGenre2*nbQuestions ' nombre de questions du genre 2
' Constitution de l'échantillon représentatif : on doit avoir nbQuestions = nbType1 + nbType2 + nbGenre1 + nbGenre2
set db=currentdb ' référence à la base courante
DoCmd.RunSQL "delete from T_QuestionTmp;" ' vide la table temporaire
DoCmd.RunSQL "insert into T_QuestionTmp select * from T_Question;" ' rempli la table temporaire avec toutes les questions
set rsQuest = db.OpenrecordSet("T_QuestionTmp") ' référence à la table T_QuestionTmp
set rsChoixQuest = db.OpenrecordSet("T_ChoixQuestion") ' référence à la table T_ChoixQuestion
' Vous initialisez le générateur de nombres aléatoires avec :
Randomize
Do while nbQuestions>0 ' on tire les nbquestions au hasard
rsQuest.MoveLast
rsQuest.MoveFirst
Do
indice = Int((rsQuest.RecordCount * Rnd) + 1 ' tire au hasard un indice de question compris entre 1 et rsQuest.RecordCount (le nombre total d'éléments)
rsQuest.Move (indice-1) ' se positionne sur la question de même indice
if (rsQuest!TypeQuest="Type 1") and (NbType1>0) Then ' si la question est du même type que celui tiré au hasard dans l'échantillon on sort
NbType1=NbType1-1
exit do
else
if (rsQuest!TypeQuest="Type 2") and (NbType2>0) Then ' si la question est du même type que celui tiré au hasard dans l'échantillon on sort
NbType2=NbType2-1
exit do
end if
...
end if
Loop
' Ajout de la question choisie à la table T_ChoixQuestion
rsChoixQuest.addnew
rsChoixQuest!IdQuestion=rsQuest!IdQuestion ' ajout du numéro de la question d'indice indice à la table des choix
rsChoixQuest.update
rsQuest.Delete ' suppression de l'enregistrement déjà choisi
nbQuestions=nbQuestions-1 ' on décrémente le nb. de questions
Loop
' On libère les variables
rsChoixQuest.Close
rsQuest.Close
set rsChoixQuest = nothing
set rsQuest = nothing |
Partager