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

IHM Discussion :

Requete ou macro ou code ?


Sujet :

IHM

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 83
    Points : 58
    Points
    58
    Par défaut Requete ou macro ou code ?
    Salut à tout le monde!
    J'ai crée une table: TblElèves avec les champs :
    [Nom], [Sexe],[Note]
    Je veux créer une requete, ou macro, ou autre chose pour:
    1)Créer un nombre (de mon choix) de tables de 2 ou meme à 10Tables avec les memes champs que la table TblElèves.
    2)Faire la répartirion des enregistrements sur les tables créeés à condition que chaque table contient:
    le meme nombre d'élèves de :
    - [sexe] = Masc et Fem et[note] >10
    - [sexe] = Masc et Fem et[note] <10
    Autrement dit, chaque table doit contenir de bons élèves et des élèves sans moyenne selon leur sexe et à égalité.
    Merci de me réserver quelques munites de votre précieux temps.
    svp aidez- moi à résoudre ce problème.

  2. #2
    Membre à l'essai
    Inscrit en
    Mars 2006
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 36
    Points : 20
    Points
    20
    Par défaut
    Salut,
    J'aimerais que vous soyez un plus explicite dans votre probleme.
    Qu'Est-ce-que vous voulez concretement?

    Cordialement

  3. #3
    Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 83
    Points : 58
    Points
    58
    Par défaut
    Salut!
    Ma table tblElèves contient par exemple 100 élèves.
    Je veux les diviser en 2 ou meme 10 groupes selon la note et le sexe. c'est moi qui choisira le nombre de groupes à créer.
    Chaque groupe doit contenir de bons élèves masculin et féminin ainsi que
    des élèves médiocres masculin et féminin. càd répartition de bons élèves sur les groupres à égalité et la meme chose pour les élèves médiocres.
    Merci. Aidez-moi.

  4. #4
    Membre confirmé
    Inscrit en
    Janvier 2005
    Messages
    529
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 529
    Points : 464
    Points
    464
    Par défaut
    Salut,
    je crois que le plus simple serait d'ajouter une table Groupe.
    un groupe contien 1-N élève, un élève appartien à 1-1 Groupe.
    bonne chance.
    Merci.
    Deux, n'apprendront pas; le timide et l'arrogant

  5. #5
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 524
    Points
    14 524
    Par défaut
    bjr,

    Quel intérêt de créer des tables et ainsi multiplier l'information avec les risques que ça génère?

    Il faut faire ça avec des requêtes en mettant un critère sur la note, ce sera de toute manière plus simple que de créer des tables.

  6. #6
    Membre expérimenté
    Avatar de Papy Turbo
    Homme Profil pro
    Développeur Office/VBA
    Inscrit en
    Mars 2004
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Office/VBA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 822
    Points : 1 709
    Points
    1 709
    Par défaut
    Bonjour,

    je ne vais même pas essayer de résoudre le problème. Je sens que ça peut devenir un petit casse-tête assez amusant pour les fans du SQL.

    Essayons d'abord de définir le problème :
    - tu pars sur la base d'une classe contenant un certain nombre d'élèves (=StudentsCount, nom de variable pour l'exemple)
    - tu veux que l'utilisateur détermine le nombre de groupes (=GroupsCount) entre lesquels seront répartis tous ces élèves.
    Si par exemple, tu as
    - 100 élèves dans la classe, (StudentsCount = 100)
    - l'utilisateur choisit de faire 5 groupes, (GroupsCount = 5)
    - tu auras 5 groupes de 20 élèves chacun.
    Déjà, on voit qu'un des groupes a moins d'élèves que les autres, dès que le calcul ne tombe pas juste : si tu as 99 élèves, c'est 4 groupes de 20 et 1 de 19. (C'est un détail, on verra ça plus tard.)
    On continue :
    - ta table d'élèves sera triée par note, sachant que chaque élève a une note (et une seule).
    Donc, si on nomme les groupes ainsi constitués 'groupeA', puis 'groupeB', etc. (pour l'exemple), on aura :
    + groupeA : les 20 élèves ayant reçu les 20 meilleures notes,
    + groupeB : les 20 élèves, en dehors de ceux qui sont dans le groupe A, ayant reçu les 20 meilleures notes,
    etc. jusqu'au
    + groupeE : les 20 élèves ayant reçu les pires notes.
    On constate :
    - qu'on ne sait pas à l'avance quelles seront les notes "charnières" (quelle sera, par exemple, la pire note du groupe A ou bien la meilleure note du groupe B),
    - qu'il faudra décider d'une tactique si, là encore, le nombre d'élèves contenus dans une certaine fourchette de notes, ne correspond pas au nombre d'élèves ayant + ou - qu'une certaine note.
    Je m'explique :
    Tu as 100 élèves, à répartir en 5 groupes de 20 élèves.
    Parmi eux, 18 élèves ont eu 16 ou + (<- ceux là sont donc obligatoirement dans le groupeA).
    Puis 3 élèves ont eu 15. Qu'est-ce que tu fais ?
    - tu mets 21 élèves dans le groupeA ?
    - tu mets 20 élèves exactement dans le groupeA, dont 2 seulement parmi ceux qui ont eu 15 ? Et, évidemment, il y aura un élève avec la note 15 en tête du groupeB.

    Mais je vais déjà trop loin. Est-ce que tes groupes correspondent à peu près à ce schéma, ou est-ce que tu peux le corriger et l'affiner ?
    Développement Office, support technique, assistance, sur place (Loire atlantique, Vendée, Maine et Loire) ou à distance.

  7. #7
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonsoir,

    Je crois que Rafikaccess cherche à faire des groupes homogènes entre eux.
    La moyenne des notes des membres de chaque groupe doit avoir le moins d'écart possible d'un groupe à l'autre.
    Et en plus il faut une repartition H/F similaire dans tous les groupes.

    Est-ce que c'est ça Rafikaccess ?

  8. #8
    Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 83
    Points : 58
    Points
    58
    Par défaut
    Bonjour! c'est encore moi!
    Merci à tous ceux qui m'ont répondu et à ceux qui ont lu mon problème.
    J'ai lu les réponses de Arkham et Papy Turbo. Il parait que mon problème est un vrai casse-tete.
    Lumière sur le cas:
    Ma TblElève contient 100 Elèves.
    Je cherche à partager les (100) élèves ou plus ou moins que ça sur les (x) tables ou groupes selon la note et le sexe. càd, je veux avoir des groupes "hétérogènes" contenant :
    - Elèves masculin note >10
    - Elèves Feminin note >10
    - Elèves masculin note <10
    - Elèves Feminin note <10
    Merci de votre aide.

  9. #9
    Membre expérimenté
    Avatar de Papy Turbo
    Homme Profil pro
    Développeur Office/VBA
    Inscrit en
    Mars 2004
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Office/VBA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 822
    Points : 1 709
    Points
    1 709
    Par défaut
    Si ce n'est que cela, c'est tout simple.
    Tu crées dans la requête un champ calculé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GroupeNotes: ([Note]>=10)
    Ce champ sera vrai pour les premiers groupes, faux pour les 2 autres.
    Tu n'as plus qu'à regrouper sur le Sexe + ce champ calculé pour obtenir les 4 groupes cherchés.

    J'avais cru comprendre que tes utilisateurs devraient pouvoir créer un nombre variable de groupes : avec les mêmes élèves et les mêmes notes, une fois 2 groupes (>=10 ou <10), une fois 3 groupes (> 12, <=12 et >6, <=6), une fois 5 groupes (...), par exemple.


    Peux tu développer et expliquer en détails ce que tu cherches ?
    Développement Office, support technique, assistance, sur place (Loire atlantique, Vendée, Maine et Loire) ou à distance.

  10. #10
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Dans tous les cas, comme l'a dit Arkham plus haut, or de question d'avoir X tables. Une seule suffit, c'est la requête qui doit présenter les données par groupe

  11. #11
    Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 83
    Points : 58
    Points
    58
    Par défaut
    Bonjour! c'est encore moi! Merci à Papy Turbo, Tofalu, Arkham, LedZeppII!
    Voici des explications de mon cas/problème/casse-tete:
    Ma TblElèves contient(100) élèves comme suit:
    -40 élèves masculin note >10
    -20 élèves Feminin note >10
    -30 élèves masculin note <10
    -10 élèves Feminin note <10
    Je veux les partager sur 4 Groupes (par exemple). J'aurai donc:
    Grp1:Contient:
    -40 élèves masculin note >10
    -5 élèves féminin note >10
    -8 élèves masculin note <10
    -2 élèves feminin note <10
    Grp2:Contient:
    -10 élèves masculin note >10
    -5 élèves féminin note >10
    -8 élèves masculin note <10
    -2 élèves feminin note <10
    Grp3:Contient:
    -10 élèves masculin note >10
    -5 élèves féminin note >10
    -7 élèves masculin note <10
    -3 élèves feminin note <10
    Grp4:Contient:
    -10 élèves masculin note >10
    -5 élèves féminin note >10
    -7 élèves masculin note <10
    -3 élèves feminin note <10
    Donc chaque grp contient 25 élèves avec une sorte (d'égalité) selon sexe et note.
    Reste à savoir que le nombre de groupes est variable!
    Merci encore!

  12. #12
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonsoir RafikAccess,

    ça rejoint ce que j'avais crû comprendre la première fois.

    La méthode (purement intuitive) à laquelle j'avais pensé pour que le code soit simple c'est :
    *On prend la liste des 'F' par ordre croissant de note et on leur attribue un numéro de groupe
    en comptant 1,2,3,4,5,5,4,3,2,1,1,2,3,... etc
    * Lorsqu'il n'y a plus de 'F' on continue la séquence avec la liste des 'M' trié dans l'ordre
    inverse (décroissant)

    Avec une table tblEleves(Nom, Sexe, Note, Groupe) ça donne :
    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
    Sub testAssigneGroup()
       ' Table tblEleves - Nbre de groupes = 6
        Call AssigneGroup("tblEleves", 6)
    End Sub
    
    Sub AssigneGroup(TBL As String, NGrp As Long)
    Dim db As DAO.Database, r As DAO.Recordset
    Dim i As Long, Direction As Long, StepCnt As Long
    Dim strSQL As String
    
    strSQL = "SELECT " & TBL & ".* FROM " & TBL & " WHERE Sexe='F' ORDER BY Note ASC"
    StepCnt = 0
    
    Set db = CurrentDb
    Set r = db.OpenRecordset(strSQL)
    
    i = 1: Direction = 1
    Do While Not r.EOF
       r.Edit
       r![Groupe] = i
       r.Update
       ' Numéro Groupe suivant
       i = i + Direction
       ' Si dernier ou premier groupe atteint, on repart dans l'autre sens
       If i > NGrp Then Direction = -1: i = NGrp
       If i = 0 Then Direction = 1: i = 1
       r.MoveNext
       ' Si affectation des 'F' terminée on continue avec les 'M'
       If r.EOF And StepCnt = 0 Then
          StepCnt = 1
          strSQL = "SELECT " & TBL & ".* FROM " & TBL & " WHERE Sexe='M' ORDER BY Note DESC"
          Set r = db.OpenRecordset(strSQL)
       End If
    Loop
    
    End Sub
    Fais de essais avec une table de test.
    Moi j'ai vérifié les résultats avec cette requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT tblEleves.Groupe, Sum(IIf([Sexe]="M",1,0)) AS M, Sum(IIf([Sexe]="F",1,0)) AS F, Avg(tblEleves.Note) AS MoyenneDeNote
    FROM tblEleves
    GROUP BY tblEleves.Groupe
    ORDER BY tblEleves.Groupe;
    Si ça convient, tant mieux. Sinon tant pis, j'aurais essayé.

    Bon courage.

  13. #13
    Membre expérimenté
    Avatar de Papy Turbo
    Homme Profil pro
    Développeur Office/VBA
    Inscrit en
    Mars 2004
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Office/VBA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 822
    Points : 1 709
    Points
    1 709
    Par défaut
    Bravo, LedZepp, ça m'a l'air tout bon, avec une répartition égale des meilleures notes et des pires notes dans chaque groupe

    J'ai juste eu du mal à "lire" ta variable StepCnt, que je te proposerai de remplacer par une
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim strSexe As String
        [...]
        strSexe = "F"
        [...]
       If r.EOF And strSexe = "F" Then
          strSexe = "M"
        [...]
    purement pour une question de lisibilité (l'exercice est déjà assez compliqué comme ça ! )

    Je ne suis pas statisticien, mais je suppose que le seul moyen d'arriver à une solution "tout SQL" passerait par de savants calculs de moyenne, pondérée ou non...
    Là, effectivement, je ne vois pas plus simple que d'écrire les groupes dans la table.
    Développement Office, support technique, assistance, sur place (Loire atlantique, Vendée, Maine et Loire) ou à distance.

  14. #14
    Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 83
    Points : 58
    Points
    58
    Par défaut
    Bonjour et Merci à LedZeppII et PapyTurbo!
    Une petite question pour LedZeppII:
    Tu as dit d'ajouter un champ [Groupe] dans TblElèves. D'accord.
    Explique-moi Svp quel sera le role de ce champ et écris moi un exemple concret pour le compléter avec 1,2,3,4,5...5,4,3,2,1...pour 'F' et le meme pour 'M'.
    Svp Ecris-moi un Exemple plus clair avec (12) élèves ou plus comme suit:
    Sexe----Note-----Groupe
    Merci une autre fois à Tous!
    Bravo à tous! Je commence à voir clairement mon casse-tete battu!

  15. #15
    Membre expérimenté
    Avatar de Papy Turbo
    Homme Profil pro
    Développeur Office/VBA
    Inscrit en
    Mars 2004
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Office/VBA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 822
    Points : 1 709
    Points
    1 709
    Par défaut
    Heu, t'as pas l'impression que tu pousses le bouchon un peu loin, Rafikaccess ?
    LedZep t'a fourni un code complet, qui marche quel que soit le nombre d'élèves, avec sexe, note et tout ce que tu veux.

    Qu'est-ce qu'il te faut de plus ?

    A toi de le tester et de le mettre au point, si nécesaire. Mais n'attends quand même pas qu'on vienne le taper chez toi...
    Développement Office, support technique, assistance, sur place (Loire atlantique, Vendée, Maine et Loire) ou à distance.

  16. #16
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bon, puisque j'avais déjà une base de test, la voici.
    J'ai intégré la modif suggérée par Papy Turbo.

    Il te reste à créer des requêtes (une par groupe) avec critère Groupe=1, Groupe=2, etc ...

    Ou alors tu exporte la table dans Excel et tu joue avec les filtres sur les colonnes.

    Bon courage
    Fichiers attachés Fichiers attachés

  17. #17
    Membre expérimenté
    Avatar de Papy Turbo
    Homme Profil pro
    Développeur Office/VBA
    Inscrit en
    Mars 2004
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Office/VBA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 822
    Points : 1 709
    Points
    1 709
    Par défaut
    Citation Envoyé par LedZeppII
    Il te reste à créer des requêtes (une par groupe) avec critère Groupe=1, Groupe=2, etc ...

    Ou alors tu exporte la table dans Excel et tu joue avec les filtres sur les colonnes.
    Ou à utiliser l'un des nombreux tutos pour faire des sélections :
    - une liste déroulante pour choisir un groupe -> affichage des membres du groupe dans une liste ou un sous-formulaire,
    - ou un état qui liste chaque groupe sur une page séparée,
    - etc.

    Bon boulot, LedZepp, (ceci dit, je n'ai pas testé ton appli, je te fais confiance).
    Développement Office, support technique, assistance, sur place (Loire atlantique, Vendée, Maine et Loire) ou à distance.

  18. #18
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Merci Papy Turbo.
    Le code n'est pas parfait, mais globalement il remplit la fonction que l'on attend de lui.
    Pour faire un truc tip top, il aurait fallu un code beaucoup plus long.

  19. #19
    Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 83
    Points : 58
    Points
    58
    Par défaut
    Merci à Papy Turbo et à LedZeppII qui m'ont encore poussé en avant!
    Merci aussi à Developpez.com!.
    Discussion promise à suivre sur ce meme theme pour l'améliorer.

  20. #20
    Membre expérimenté
    Avatar de Papy Turbo
    Homme Profil pro
    Développeur Office/VBA
    Inscrit en
    Mars 2004
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Office/VBA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 822
    Points : 1 709
    Points
    1 709
    Par défaut
    content si ça marche.

    N'oublie pas de cliquer sur Résolu, quand tu vois tes résultats.
    Développement Office, support technique, assistance, sur place (Loire atlantique, Vendée, Maine et Loire) ou à distance.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. requete sui sort des codes et macro
    Par lilil dans le forum Access
    Réponses: 1
    Dernier message: 20/03/2012, 16h29
  2. Ecrire par macro du code dans un module
    Par ouskel'n'or dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 24/09/2007, 01h50
  3. Prob pour exporter une macro en code VBA
    Par electrosat03 dans le forum Access
    Réponses: 6
    Dernier message: 04/02/2006, 19h15
  4. Enregistrer fichier .xls sans macro ni code vb
    Par alexxx69 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 08/11/2005, 17h48
  5. Fenetre Action Macro "Executer Code" pour Module
    Par beurnoir dans le forum Access
    Réponses: 16
    Dernier message: 21/10/2005, 16h15

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