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

Access Discussion :

Comptage sous conditions [AC-2013]


Sujet :

Access

  1. #1
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Novembre 2014
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Novembre 2014
    Messages : 112
    Par défaut Comptage sous conditions
    Bonjour,

    A partir d’une requête Cours ( Classe+Professeur+Matière =Cours),
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    'Requete cours actuelle
    SELECT [T_Classe].[NomClasse] & " " & [R_ProfesseurCoursMatière].[LibelléMatière] AS Cours, R_ProfesseurCoursMatière.IdProfesseur, T_Classe.NomClasse, T_Classe.Effectif, T_Classe.IdClasse, R_ProfesseurCoursMatière.LibelléMatière
    FROM R_ProfesseurCoursMatière, T_Classe
    WHERE (((R_ProfesseurCoursMatière.IdProfesseur)=[Formulaires]![F_EDTProfesseur]![IdProfesseur]))
    ORDER BY [T_Classe].[NomClasse] & " " & [R_ProfesseurCoursMatière].[LibelléMatière]
    WITH OWNERACCESS OPTION;
    je dois compter les élèves de la classe participants à ce cours pour pouvoir choisir ensuite une salle adaptée.
    Pour certaines matières,(« Maquillage » et « SoinVisage ») les élèves de deux classes peuvent être regroupés (Voir requêtes)
    Pour la classe particulière du « BTS 2 » et pour certaines matières (nombre encore non défini) les élèves peuvent être répartis en deux sous groupes « Marque » et « Management »).

    CAS GENERAL

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    'Comptage  du nombre d'élèves par cours  (aucun regroupement)
    TRANSFORM Count(T_Elève.Nom) AS CompteDeNom
    SELECT T_Elève.NomClasse, Count(T_Elève.Nom) AS Effectif
    FROM T_Elève
    GROUP BY T_Elève.NomClasse
    PIVOT T_Elève.IdElève;
    CAS Matière "Maquillage"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    'Comptage du regroupement des élèves de Première et terminale si la matière enseignée du Cours est  "Maquillage"
    SELECT T_Elève.NomClasse, DCount("*","R_GroupeMaquillage") AS Effectif, *
    FROM T_Elève
    WHERE (((T_Elève.NomClasse)="Premiere" Or (T_Elève.NomClasse)="Terminale"));
    Cas Matière "Soin Visage"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    'Comptage du regroupement des élèves de Première et seconde si la matière enseignée du Cours est  "SoinVisage"
    SELECT T_Elève.NomClasse, DCount("*","R_GroupeSoinVisage") AS Effectif, *
    FROM T_Elève
    WHERE (((T_Elève.NomClasse)="Premiere" Or (T_Elève.NomClasse)="seconde"));
    CAS Classe BTS 2

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    'Comptage du regroupement des élèves de si les matières enseignées des cours sont  "1" ou "2" ou "3"   (A définir)
    SELECT T_Groupe.IdGroupe, T_Groupe.Libellé, T_Groupe.Code DCount("*","R_Groupe") AS Effectif, *
    FROM T_Groupe;
    WHERE (((T_Elève.NomClasse)="1" Or (T_Elève.NomClasse)="2" Or (T_Elève.NomClasse)="3"));
    Je dois ensuite placer une procédure évènementielle « sur sortie» du champ « Cours » du formulaire « F_EProfesseur » mais comment écrire correctement ( If, Then, Else ??) ce choix pour remplir les 4 conditions :
    - Général
    - Maquillage
    - SoinVisage
    - BTS 2
    Par ailleurs, mes requêtes sont elles correctes ?

    Merci d’avance

    Roland

  2. #2
    Rédacteur/Modérateur


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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 754
    Billets dans le blog
    67
    Par défaut
    Bonjour,

    Il faudrait peut-être simplifier et construire les 2 requêtes "Maquillage" et "Soin visage" comme ceci:

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT Count(R_GroupeMaquillage.NomClasse) AS Effectif
    FROM R_GroupeMaquillage
    WHERE (((R_GroupeMaquillage.NomClasse)="Premiere" Or (R_GroupeMaquillage.NomClasse)="Terminale"));

    A condition bien sur que la requête R_GroupeMaquillage contienne un champ du type de NomClasse

    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
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Novembre 2014
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Novembre 2014
    Messages : 112
    Par défaut RE
    Bonjour User et merci,

    J'ai juste rectifié une erreur de ma part sur la requête initiale pour obtenir:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Count(T_Elève.NomClasse) AS Effectif
    FROM R_GroupeMaquillage
    WHERE (((R_GroupeMaquillage.NomClasse)="Premiere" Or (R_GroupeMaquillage.NomClasse)="Terminale"));
    dito pour les deux autres requêtes (BTS 2, SoinVisage, etc...)

    Tout est OK

    Roland

  4. #4
    Rédacteur/Modérateur


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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 754
    Billets dans le blog
    67
    Par défaut
    Bonjour,

    On a tous tendance à faire des détours et pour finir on en revient toujours à des solutions simples

    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

  5. #5
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Novembre 2014
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Novembre 2014
    Messages : 112
    Par défaut Re
    Bonjour c’est encore !! moi,

    Je suis maintenant pourvu de mes 5 requêtes de comptage en fonction du scénario du moment (voir image jointe).
    Ma question est :
    - Comment écrire un code qui en fonction du « Cours » choisi puis affecte la valeur « Effectif » obtenue par l’une de ces requêtes dans le champ correspondant.
    Ex : si le Cours est égal à « Seconde SoinVisage », je lance la requête « ComptageSoinVisage »

    Le début de code que j’ai écrit :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Cours_BeforeUpdate(Cancel As Integer)
    'Affiche les infos avant de faire le choix
    Cours.value = ""  
     End Sub

    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
    Private Sub Cours_Change()
     'Change la requete de calcul suivant le choix
      Select Case Cours.Value
     
      If Case Is = "Seconde SoinVisage" Or "Premiere SoinVisage" Then
           DoCmd.OpenQuery "R_ComptageSoinVisage", acViewNormal, acEdit
           Effectif.Value = ?????????
      End If
      If Case Is = "PremiereMaquillage" Or "TerminaleMaquillage" Then
           DoCmd.OpenQuery "R_ComptageMaquillage", acViewNormal, acEdit
           Effectif.Value = ?????????
      End If
      .................
      Else
    ‘ Il y a 72 cours différents, alors comment traiter les autres ?
      If Case Is <> "Seconde SoinVisage" Or "Premiere SoinVisage" Or"PremiereMaquillage" Or "TerminaleMaquillage" .......
           DoCmd.OpenQuery "R_ComptageElèvesClasse", acViewNormal, acEdit
           Effectif.Value = ?????????
      End If
     
     
      End Select
    Merci

    Roland
    Images attachées Images attachées  

  6. #6
    Rédacteur/Modérateur


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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 754
    Billets dans le blog
    67
    Par défaut
    Bonjour,

    Tu peux utiliser les fonctions de domaine ou les recordset.

    Personnellement, je préfère les fonctions de domaine dans ce cas précis.

    Il te faut mettre le code sur événement après maj (AfterUpdate) de ta liste déroulante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub Cours_AfterUpdate()
     'Change la requete de calcul suivant le choix
     
      If (Me.Cours = "Seconde SoinVisage") Or (Me.Cours="Premiere SoinVisage") Then
           Effectif.Value = DSum("Effectif","R_ComptageSoinVisage")
      elseIf (Me.Cours = "PremiereMaquillage") Or (Me.Cours ="TerminaleMaquillage") Then
           Effectif.Value = DSum("Effectif","R_ComptageMaquillage"")
      End If
     
    ...
     
    End sub
    Ici je suppose que tu as un champ effectif dans tes requêtes.

    Fais une recherche sur les fonctions de domaine dans les cours Access, ça pourrait te servir à l'avenir

    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

  7. #7
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Novembre 2014
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Novembre 2014
    Messages : 112
    Par défaut RE
    Merci, je vais tester et te tiens informé.

    Roland

  8. #8
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Novembre 2014
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Novembre 2014
    Messages : 112
    Par défaut Re
    Bonjour User,

    Cela ne fonctionne pas pour moi :

    - Dans la Table T_Classe, je dispose d’un champ vide « Effectif » actuellement
    - C’est ce champ vide « Effectif » qui est récupéré dans la Requête « Cours » ci-dessous


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT R_Classe.[NomClasse] & "                            " & R_ProfesseurCoursMatière.LibelléMatière AS Cours, R_ProfesseurCoursMatière.IdProfesseur, R_Classe.T_Classe.NomClasse, R_Classe.Effectif, R_Classe.IdClasse, R_Classe.CodeClasse, R_ProfesseurCoursMatière.CodeMatière
    FROM R_ProfesseurCoursMatière, R_Classe
    WHERE (((R_ProfesseurCoursMatière.IdProfesseur)=[Formulaires]![F_EDTProfesseur]![IdProfesseur]))
    ORDER BY R_Classe.[NomClasse] & "                            " & R_ProfesseurCoursMatière.LibelléMatière
    WITH OWNERACCESS OPTION;
    - Les 5 requêtes :
    o R_ComptageElevesClasses
    o R_ComptageSoinVisage
    o R_ComptageMaquillage
    o R_ComptageBTS2FormationMarque
    o R_ComptageBTS2FormationManagement
    - Disposent toutes d’un champ « effectif » qui donne le résultat de la requête

    Le formulaire de saisie F_EProfesseur qui contient le champ "Effectif" issu de R_Cours a les propriétés suivantes :


    Le Code exact actuel dans le champ « Cours » After Update() est le suivant :

    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
    Private Sub Cours_AfterUpdate()
     
     
     
     'Change la requete de calcul suivant le choix
     
      If (Me.Cours = "Seconde SoinVisage") Or (Me.Cours = "Premiere SoinVisage") Then
           Effectif.Value = DSum("Effectif", "R_ComptageSoinVisage")
      Else
      End If
      If (Me.Cours = "Premiere Maquillage") Or (Me.Cours = "Terminale Maquillage") Then
           Effectif.Value = DSum("Effectif", "R_ComptageMaquillage")
      Else
      End If
      If (Me.Cours = "BTS 2 Formation Management") Then
           Effectif.Value = DSum("Effectif", "R_ComptageBTS2FormationManagement")
      Else
      End If
      If (Me.Cours = "BTS 2 Formation Marque") Then
           Effectif.Value = DSum("Effectif", "R_ComptageBTS2FormationMarque")
      Else
      End If
      If (Me.Cours <> "Seconde SoinVisage") Or (Me.Cours <> "Premiere SoinVisage") Or _
         (Me.Cours <> "Premiere Maquillage") Or (Me.Cours <> "Terminale Maquillage") Or _
         (Me.Cours <> "BTS 2 Formation Management") Or (Me.Cours <> "BTS 2 Formation Marque") Then
          Effectif.Value = DSum("Effectif", "R_ComptageElevesClasse")
       Else
     
      End If
    If ((Me!Cours <> "") And Not IsNull(Me!Cours)) Then
         Me!DateRdV2.Value = Me!DateRdV1.Value
         Me!HoraireF.RowSource = "R_Horaire"
     
       End If
    End Sub
    Le résultat obtenu est toujours le même nombre 60 qui représente le total des élèves toutes classes confondues quel que soit le type de cours
    Merci

    Roland

  9. #9
    Rédacteur/Modérateur


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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 754
    Billets dans le blog
    67
    Par défaut
    Bonsoir,

    Le dernier critère est tellement large qu'il passe à tous les coups

    Il faudrait réécrire les structures de bloc avec les if en les reliant:

    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
    Private Sub Cours_AfterUpdate()
     'Change la requete de calcul suivant le choix
     
      If (Me.Cours = "Seconde SoinVisage") Or (Me.Cours = "Premiere SoinVisage") Then
           Effectif.Value = DSum("Effectif", "R_ComptageSoinVisage")
     
      ElseIf (Me.Cours = "Premiere Maquillage") Or (Me.Cours = "Terminale Maquillage") Then
           Effectif.Value = DSum("Effectif", "R_ComptageMaquillage")
     
      ElseIf (Me.Cours = "BTS 2 Formation Management") Then
           Effectif.Value = DSum("Effectif", "R_ComptageBTS2FormationManagement")
     
      ElseIf (Me.Cours = "BTS 2 Formation Marque") Then
           Effectif.Value = DSum("Effectif", "R_ComptageBTS2FormationMarque")
     
      Elseif (Me.Cours <> "Seconde SoinVisage") Or (Me.Cours <> "Premiere SoinVisage") Or _
         (Me.Cours <> "Premiere Maquillage") Or (Me.Cours <> "Terminale Maquillage") Or _
         (Me.Cours <> "BTS 2 Formation Management") Or (Me.Cours <> "BTS 2 Formation Marque") Then
          Effectif.Value = DSum("Effectif", "R_ComptageElevesClasse")
     
      End If
     
       If ((Me!Cours <> "") And Not IsNull(Me!Cours)) Then
         Me!DateRdV2.Value = Me!DateRdV1.Value
         Me!HoraireF.RowSource = "R_Horaire"
     
       End If
     
    End Sub
    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

  10. #10
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Novembre 2014
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Novembre 2014
    Messages : 112
    Par défaut RE
    Bonjour,

    Cela avance mais ne fonctionne pas encore :

    Les première et dernières requêtes retourne le nombre 60, les 3 autres du milieu fonctionnent bien (Celles ou la commande commence par "ElseIf".

    Les propriétés du champ "Effectif" sont Source de contrôle = "Effectif" et contenu = "R_Cours"

    Merci

    Roland

  11. #11
    Rédacteur/Modérateur


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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 754
    Billets dans le blog
    67
    Par défaut
    Bonjour,

    Dans ce cas, il faudrait voir le critère de la 1ère requête "R_ComptageSoinVisage" qui renvoie 60.

    Il faut déjà l'ouvrir en manuel, puis vérifier le critère avec l'éditeur de requête.

    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

  12. #12
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Novembre 2014
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Novembre 2014
    Messages : 112
    Par défaut Re
    Merci de ta prompte réponse mais après vérification, l'ensembles des cinq requêtes fonctionnement normalement.

    Les structures des requêtes "Maquillage" et "SoinVisage" sont identiques

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Count(T_Elève.NomClasse) AS Effectif
    FROM R_GroupeMaquillage
    WHERE (((R_GroupeMaquillage.NomClasse)="Premiere" Or (R_GroupeMaquillage.NomClasse)="Terminale"));

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Count(T_Elève.NomClasse) AS Effectif
    FROM R_GroupeSoinVisage
    WHERE (((R_GroupeSoinVisage.NomClasse)="Premiere" Or (R_GroupeSoinVisage.NomClasse)="Seconde"));
    J'ai tenté d'intervertir l'ordre dans AfterUp du Cours mais rien n'y fait

    Eventuellement le code de la requête Comptage des élèves d'une classe entière

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT T_Elève.NomClasse, Count(T_Elève.IdElève) AS Effectif
    FROM T_Elève
    GROUP BY T_Elève.NomClasse
    WITH OWNERACCESS OPTION;
    J'inspecte la structure générale pour voir si je n'aurais pas fait une blague

    Merci

    Roland

  13. #13
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Novembre 2014
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Novembre 2014
    Messages : 112
    Par défaut Re
    Elémentaire mon cher Watson, il faut écrire : "Soin Visage" et non "SoinVisage" et ça va de suite mieux.

    Reste à voir la dernière requête

    Roland

  14. #14
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Novembre 2014
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Novembre 2014
    Messages : 112
    Par défaut Re
    Il ne me reste que le problème de la requête suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT T_Elève.NomClasse, Count(T_Elève.IdElève) AS Effectif
    FROM T_Elève
    GROUP BY T_Elève.NomClasse
    WITH OWNERACCESS OPTION;
    qui me restitue bien le nombre d'élèves par Classe, je dispose également dans la requête "R_Cours" du total par Classe et Professeur du nombre d'élèves par cours enseignés par ce Prof.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT [R_Classe].[T_Classe.NomClasse] & " " & [R_ProfesseurCoursMatière].[LibelléMatière] AS Cours, R_ProfesseurCoursMatière.IdProfesseur, R_Classe.T_Classe.NomClasse, R_Classe.Effectif, R_Classe.IdClasse
    FROM R_ProfesseurCoursMatière, R_Classe
    WHERE (((R_ProfesseurCoursMatière.IdProfesseur)=[Formulaires]![F_EDTProfesseur]![IdProfesseur]))
    ORDER BY [R_Classe].[T_Classe.NomClasse] & " " & [R_ProfesseurCoursMatière].[LibelléMatière]
    WITH OWNERACCESS OPTION;
    Enfin et c'est là que cela me gène dans AfterUp() de R_Cours, je lui demande de sommer l'ensemble des élèves de toutes les Classes (DSum) et il me renvoie donc le nombre 60 qui correspond bien à tous les élèves


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ElseIf (Me.Cours <> "Seconde Soin Visage") Or (Me.Cours <> "Premiere Soin Visage") Or _
         (Me.Cours <> "Premiere Maquillage") Or (Me.Cours <> "Terminale Maquillage") Or _
         (Me.Cours <> "BTS 2 Formation Management") Or (Me.Cours <> "BTS 2 Formation Marque") Then
          Effectif.Value = DSum("Effectif", "ComptageElevesClasse")
    Comment lui dire que si les conditions précédentes sont remplies, la valeur "Effectif" est égale à la valeur de la classe contenue dans le cours ??

    Merci

    Roland

  15. #15
    Rédacteur/Modérateur


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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 754
    Billets dans le blog
    67
    Par défaut
    Salut,

    Dans les fonctions de domaine le troisième argument est le critère :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ...
       ElseIf (Me.Cours <> "Seconde Soin Visage") Or (Me.Cours <> "Premiere Soin Visage") Or _
       (Me.Cours <> "Premiere Maquillage") Or (Me.Cours <> "Terminale Maquillage") Or _
       (Me.Cours <> "BTS 2 Formation Management") Or (Me.Cours <> "BTS 2 Formation Marque") Then
       Effectif.Value = DSum("Effectif", "ComptageElevesClasse","[Cours] like '" & Me.Cours & "'")
       end if
    ...
    Et je suppose qu'il y a un champ "cours" dans la requête "ComptageElevesClasse".
    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

  16. #16
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Novembre 2014
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Novembre 2014
    Messages : 112
    Par défaut Re
    Merci surtout pour un samedi mais cela semble fonctionner.
    Je fermerais donc la discussion plus tard si l'essai est concluant.
    Bon fin de semaine
    Roland

  17. #17
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Novembre 2014
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Novembre 2014
    Messages : 112
    Par défaut Bonjour,
    Je confirme que le problème ci dessus est maintenant résolu et je vais donc fermer cette discussion.

    Merci encore

    Roland

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. VBA-E: Macro de comptage multiple sous condition
    Par acipolla dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 25/02/2014, 16h47
  2. [XL-2007] Macro de recherche et comptage sous condition
    Par Steph843 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 18/12/2011, 21h19
  3. Réponses: 8
    Dernier message: 14/01/2006, 15h17
  4. Pb Ouverture de formulaire sous condition.
    Par Phl98 dans le forum Access
    Réponses: 8
    Dernier message: 03/11/2005, 22h28
  5. Create function sous condition
    Par nbl dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 12/05/2005, 12h00

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