IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

requete avec choix aléatoire selon des critères définis dans des champs


Sujet :

VBA Access

  1. #1
    Candidat au Club
    Homme Profil pro
    Responsable sécurité
    Inscrit en
    Octobre 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable sécurité

    Informations forums :
    Inscription : Octobre 2013
    Messages : 3
    Points : 4
    Points
    4
    Par défaut requete avec choix aléatoire selon des critères définis dans des champs
    bonjour,
    je suis actuellement en train de créer un qcm sur access.
    j'ai mes tables : questions, utilisateur etc..
    je cherche à créer une requête qui m'afficherais 10, 20 ou 30 questions aléatoires (nombre de questions à choisir dans une zdl indépendante)
    mis qui filtrerait le type et le genre selon des pourcentages définis dans des champs indépendants
    tout cela à partir d'un formulaire contenant les champs et la zdl indépendants
    et sur ce formulaire un bouton qui me lance ma requête
    à savoir qu'il y a 3 types différents dont la somme ne peut être sup à 100%
    et 2 genres dont la somme ne peut être sup à 100%
    auriez-vous une idée de comment je dois faire pour arriver à faire cela ?
    j'ai beau chercher, je bloque la dessus depuis plusieurs jours

    merci d'avance de votre aide

  2. #2
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 260
    Points : 19 423
    Points
    19 423
    Billets dans le blog
    63
    Par défaut
    Bonjour,

    J'ignore si c'est réalisable avec une requête, mais ça me semble plus simple à expliquer par code :

    Supposons que vous ayez une table T_Question(IdQuestion,...) pour les questions, une table T_QuestionTmp(IdQuestion,...) pour contenir les questions à choisir,
    et une table T_ChoixQuestion(IdQuestion) qui va contenir la liste des questions choisies :

    NbQuestions le nombre total de question voulues, PrctType1 le pourcentage voulu de questions du type1, PrctType2 le pourcentage voulu de questions du type2, etc...

    Je vous donne un exemple de code commenté à adapter, il y a certainement plein d'erreurs, mais c'est l'idée :

    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
    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
    Cdlt,
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  3. #3
    Candidat au Club
    Homme Profil pro
    Responsable sécurité
    Inscrit en
    Octobre 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable sécurité

    Informations forums :
    Inscription : Octobre 2013
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    bonjour et merci pour ce bout de code
    je vais m'empresser de le tester et voir ce que cela donne
    je reviendrai pour vous dire ce qu'il en est

    cdt

Discussions similaires

  1. [XL-2016] récupérer des valeur selon un critère défini
    Par slakhdine dans le forum Excel
    Réponses: 1
    Dernier message: 07/08/2017, 09h26
  2. [AC-2007] Requete avec choix des criteres dans un formulaire
    Par Tinien dans le forum Access
    Réponses: 1
    Dernier message: 16/07/2009, 09h54
  3. Requete avec choix de critères?
    Par Sixers33 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 10/09/2008, 21h20
  4. Réponses: 2
    Dernier message: 16/05/2006, 17h02
  5. Requete MySQL + choix aléatoire d'un enreg
    Par Steph4fun dans le forum Requêtes
    Réponses: 2
    Dernier message: 08/08/2005, 18h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo