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

Requêtes et SQL. Discussion :

Critere d'une requete dynamique croisée par une sélection multiple [AC-2010]


Sujet :

Requêtes et SQL.

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    525
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Août 2005
    Messages : 525
    Par défaut Critere d'une requete dynamique croisée par une sélection multiple
    Bonjour à tous

    Dans un formulaire (F_Stats), j'ai inséré un sous formulaire (SF_Stats) basé sur une requete croisée dynamique (R_Stats).
    Je renseigne dans F_Stats une date de départ et une date de fin afin de connaitre le nombre d'activité de chaque personne en fonction du jour.
    Pour être plus fin, je veux filtrer ma requête sur le type d'activité (CodeCreneau).

    La requete:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    TRANSFORM IIf(Count([ID_Activite]) Is Null,0,Count([ID_Activite])) AS Lavaleur
    SELECT T_Activites.User AS Praticien
    FROM T_Activites
    WHERE (((T_Activites.User)<>"-FERME ") AND ((T_Activites.DateDebutActivite) Between [Formulaires]![F_Stats]![BeginDate] And [Formulaires]![F_Stats]![EndDate]) 
    AND ((T_Activites.CodeActivite)<>"cm" And (T_Activites.CodeActivite)<>"no") AND ((T_Activites.CodeCreneau)=[Formulaires]![F_Stats]![LstActivite].[Contenu]))
    GROUP BY T_Activites.User
    ORDER BY T_Activites.User
    PIVOT WeekdayName(Weekday([DateDebutActivite],2)) In ("Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi","Dimanche");
    C'est la partie qui fait appel à une liste multicritères (LstActivite) qui ne fonctionne pas. j'ai laissé "contenu" mais parce que j'ai tout tenté:
    - j'ai d'abord essayé de passer par une zone de texte qui récupère tous les items sélectionnés et dirigé mon critère de recherche vers ce champs
    Le code vba qui rempli le champ à chaque sélection

    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
     
    Private Sub LstActivite_AfterUpdate()
        Dim var As Variant
        Dim strF As String
     
            If Me.LstActivite.ItemsSelected.Count < 1 Then
            MsgBox "Veuillez choisir une activité, SVP", vbInformation & vbOKOnly
            Forms!F_Stats.TxTactivites = "[CodeCreneau]"
     
            Else
                For Each var In Me.LstActivite.ItemsSelected
                    strF = strF & "'" & Me.LstActivite.ItemData(var) & "';"
                Next var
                Forms!F_Stats.TxTactivites = "In (" & Left(strF, Len([strF]) - 1) & ")"
            End If
     
     
    Me.SF_Stats.Form.Requery
    End Sub
    En fait cela ne fonctionne que lorsque le champ ne reçoit qu'une valeur. La requête doit considérer qu'il s'agit d'une zone de texte et rajoute systématiquement des "" ce qui fait que la requête ne fonctionne pas.

    Comment sans passer par un champ intermédiaire, sélectionner plusieurs type d'activités dans la liste multiligne et en faire des critères de requête ?
    Merci pour votre aide en espérant avoir été suffisamment clair.

  2. #2
    Membre Expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 887
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 887
    Par défaut
    Bonjour docjo,

    Sans aller plus loin, une erreur ici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strF = strF & "'" & Me.LstActivite.ItemData(var) & "';"
    Le point virgule n'est pas bon, c'est une virgule qui devrait être là.

    Bonne journée

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    525
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Août 2005
    Messages : 525
    Par défaut
    Ah merci pour cette erreur ! Malheureusement, cela n'améliore pas le résultat.

  4. #4
    Membre Expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 887
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 887
    Par défaut
    Bonjour docjo,

    Ok je viens de voir ce que tu veux dire. Voici comment je fonctionne. Supposons que le nom de ta requête est R_VUE.
    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 LstActivite_AfterUpdate()
        Dim db As DAO.Database
        Dim qdf As DAO.QueryDef
        Dim strSQL As String, strF As String
        Dim var As Variant
     
        If Me.LstActivite.ItemsSelected.Count < 1 Then
            MsgBox "Veuillez choisir une activité, SVP", vbInformation & vbOKOnly
            Exit Sub
        End If
        For Each var In Me.LstActivite.ItemsSelected
            strF = strF & "'" & Me.LstActivite.ItemData(var) & "',"
        Next var
        strF = Left(strF, Len([strF]) - 1)
     
        strSQL = "TRANSFORM IIf(Count([ID_Activite]) Is Null,0,Count([ID_Activite])) AS Lavaleur " _
        & "SELECT T_Activites.User AS Praticien FROM T_Activites WHERE (((T_Activites.User)<>""-FERME "") " _
        & "AND ((T_Activites.DateDebutActivite) Between #" & Me.BeginDate & "# And #" & Me.EndDate & "#) " _
        & "AND ((T_Activites.CodeActivite)<>""cm"" And (T_Activites.CodeActivite)<>""no"") " _
        & "AND ((T_Activites.CodeCreneau) In (" & strF & ")) " _
        & "GROUP BY T_Activites.User ORDER BY T_Activites.User " _
        & "PIVOT WeekdayName(Weekday([DateDebutActivite],2)) In (""Lundi"",""Mardi"",""Mercredi"",""Jeudi"",""Vendredi"",""Samedi"",""Dimanche"");"
        Set db = CurrentDb
        Set qdf = db.QueryDefs("R_VUE")
        qdf.SQL = strSQL
        Set qdf = Nothing
        Set db = Nothing
        Me.SF_Stats.Form.Requery
    End Sub
    Tu auras peut-être quelques ajustements à faire, je n'avais pas ton formulaire et tes tables. Mais en gros ce que tu fais c'est que tu recrées ta requête à chaque fois. Un "In" doit s'écrire comme ça et non pas "T_Activites.CodeCreneau)=[Formulaires]![F_Stats]![LstActivite].[Contenu]".

    Bonne journée

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    525
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Août 2005
    Messages : 525
    Par défaut
    Bonjour Robert1957

    Merci pour ton aide qui fonctionne mais uniquement lorsque le ferme et réouvre le formulaire.
    J'ai essayé Recalc mais cela ne change rien.
    Pour mémoire, je remets le code car il manquait juste une petite parenthèse aprés le strF

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        strSQL = "TRANSFORM IIf(Count([ID_Activite]) Is Null,0,Count([ID_Activite])) AS Lavaleur " _
        & "SELECT T_Activites.User AS Praticien FROM T_Activites WHERE (((T_Activites.User)<>'-FERME') " _
        & "AND ((T_Activites.DateDebutActivite) Between #" & Me.BeginDate & "# And #" & Me.EndDate & "#) " _
        & "AND ((T_Activites.CodeActivite)<>'cm' And (T_Activites.CodeActivite)<>'no') " _
        & "AND ((T_Activites.CodeCreneau) In (" & strF & "))) " _
        & "GROUP BY T_Activites.User ORDER BY T_Activites.User " _
        & "PIVOT WeekdayName(Weekday([DateDebutActivite],2)) In ('Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi','Dimanche');"
    J'ai parcouru les forums mais je n'ai pas trouvé la raison pour laquelle les formulaires ne se rafraîchissent pas.
    Merci encore

  6. #6
    Membre Expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 887
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 887
    Par défaut
    Bonjour docjo,

    Pour afficher le résultat dans ton sous-formulaire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.MonSousFormulaire.Form.RecordSource = "LaRequête"
    Ainsi ton sous formulaire prendra en compte ta nouvelle requête.

    Bonne journée

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    525
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Août 2005
    Messages : 525
    Par défaut
    Quitte à avoir écris la requête à reconstruire, je me suis dit que la requête R_Stats n'était plus utile et autant passer le strSQL en recordsource

    A l'ouverture du formulaire:

    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
     
    Private Sub Form_Open(Cancel As Integer)
    On Error Resume Next
        Dim strSQL As String
     
        Me.BeginDate = CDate(DateSerial(Year(Date), 1, 1))
        Me.EndDate = CDate(Date)
     
        strSQL = "TRANSFORM IIf(Count([ID_Activite]) Is Null,0,Count([ID_Activite]))AS Lavaleur " _
        & "SELECT T_Activites.User AS Praticien FROM T_Activites WHERE (((T_Activites.User)<>""-FERME"") " _
        & "AND ((T_Activites.DateDebutActivite) Between #" & Me.BeginDate & "# And #" & Me.EndDate & "#) " _
        & "AND ((T_Activites.CodeActivite)<>""cm"" And (T_Activites.CodeActivite)<>""no"") " _
        & "AND ((T_Activites.CodeCreneau)=[CodeCreneau])) " _
        & "GROUP BY T_Activites.User ORDER BY T_Activites.User " _
        & "PIVOT WeekdayName(Weekday([DateDebutActivite],2)) In (""Lundi"",""Mardi"",""Mercredi"",""Jeudi"",""Vendredi"",""Samedi"",""Dimanche"");"
     
        Me.SF_Stats.Form.RecordSource = strSQL
     
    End Sub
    Et à chaque clic sur la liste de sélection multiple:

    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
     
    Private Sub LstActivite_AfterUpdate()
    On Error Resume Next
        Dim db As DAO.Database
        Dim qdf As DAO.QueryDef
        Dim strSQL As String, strF As String
        Dim var As Variant
     
     
     
        For Each var In Me.LstActivite.ItemsSelected
            strF = strF & "'" & Me.LstActivite.ItemData(var) & "',"
        Next var
        If Me.LstActivite.ItemsSelected.Count < 1 Then
        strF = "=[CodeCreneau]"
        Else
        strF = " In (" & Left(strF, Len([strF]) - 1) & ")"
        End If
     
        strSQL = "TRANSFORM IIf(Count([ID_Activite]) Is Null,0,Count([ID_Activite]))AS Lavaleur " _
        & "SELECT T_Activites.User AS Praticien FROM T_Activites WHERE (((T_Activites.User)<>""-FERME"") " _
        & "AND ((T_Activites.DateDebutActivite) Between #" & Me.BeginDate & "# And #" & Me.EndDate & "#) " _
        & "AND ((T_Activites.CodeActivite)<>""cm"" And (T_Activites.CodeActivite)<>""no"") " _
        & "AND ((T_Activites.CodeCreneau)" & strF & ")) " _
        & "GROUP BY T_Activites.User ORDER BY T_Activites.User " _
        & "PIVOT WeekdayName(Weekday([DateDebutActivite],2)) In (""Lundi"",""Mardi"",""Mercredi"",""Jeudi"",""Vendredi"",""Samedi"",""Dimanche"");"
     
        Me.SF_Stats.Form.RecordSource = strSQL
     
    End Sub
    Au passage, j'ai remis les doubles "" à la place des " ' " mais je ne sais pas si cela à un rôle.
    Avec cette méthode cela fonctionne mais pas si la source du sous formulaire est R_Stats (pas de modification et pourtant la requête est bien modifée en arrière plan). Mystère !
    Et l'inconvénient, c'est qu'il faut faire la même chose pour la date de début et la date de fin !

  8. #8
    Membre Expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 887
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 887
    Par défaut
    Bonjour docjo,

    Je crois que je te répondais en même temps que tu avais trouvé la solution.

    Pour les doubles "" c'est pour que ton code soit interprété comme il faut. Un " seul veut dire la fin du string. Certaines fois tu peux mettre ' à la place mais dès qu'il y a la possibilité d'un nom comme "l'avenir" ça va pas fonctionner.

    Bonne journée

  9. #9
    Expert confirmé
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Billets dans le blog
    2
    Par défaut
    docjo,


    Sans reprendre toutes tes requêtes, je crois que çà a bien évolué avec Robert, un refresh voire un requery du sous formulaire devrait actualiser ta page.

    exemple : Me.SF_Stats.Refresh ou Me.SF_Stats.Requery

    JimBoLion

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    525
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Août 2005
    Messages : 525
    Par défaut
    Merci à tous les deux pour votre aide précieuse. Mais je me rends compte de la limite de placer la requête en recordsource:
    - si on veux utiliser plusieurs critères de filtre
    - si le critère du filtre se trouve dans une sous requête qui ne sera pas la source des enregistrements de la requête.
    C'est le cas si je veux compter les jours travaillés et non les activités (car si le praticien a 2 activités le lundi, pour compter le nombre de lundi, je ne dois pas compter les activités mais les lundi regroupés). Je dois passer par une requête préalable:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT T_Activites.User AS Praticien, WeekdayName(Weekday([DateDebutActivite],2)) AS [Jour Travail], T_Activites.DateDebutActivite
    FROM T_Activites INNER JOIN T_CreneauActivite ON T_Activites.CodeCreneau = T_CreneauActivite.CodeCreneau
    WHERE (((T_CreneauActivite.Activite)<>"Comment Bloc" And (T_CreneauActivite.Activite)<>"Impossibilite" And (T_CreneauActivite.Activite) In ('Cs Adulte')))
    GROUP BY T_Activites.User, WeekdayName(Weekday([DateDebutActivite],2)), T_Activites.DateDebutActivite
    ORDER BY T_Activites.User;
    puis après faire ma requête d'analyse croisée:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    TRANSFORM IIf(Count([Jour Travail]) Is Null,0,Count([Jour travail])) AS LaValeur
    SELECT R_Jours_Travailles.Praticien, Count(R_Jours_Travailles.DateDebutActivite) AS TOTAL
    FROM R_Jours_Travailles
    WHERE (((R_Jours_Travailles.DateDebutActivite) Between [Formulaires]![F_Stats]![BeginDate] And [Formulaires]![F_Stats]![EndDate]))
    GROUP BY R_Jours_Travailles.Praticien
    PIVOT R_Jours_Travailles.[Jour Travail] In ("Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi","Dimanche");
    Vous remarquez dans ce cas que le la liste des activités doit être sélectionnée dans la première requête (ici In ('Cs Adulte') de la sous requêtes "R_Jours_Travailles")
    Dans ce cas, problème identique: la sous requête ne s'actualise pas. J'ai essayé le requery, Recalc, Refresh: rien ne fonctionne. Dans ce cas, il faudrait actualiser la 2ième requête R_Stats ?

  11. #11
    Expert confirmé
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Billets dans le blog
    2
    Par défaut
    docjo,

    Je relance le débat car je ne comprends pas !

    Le recordsource de ton sous-formulaire est bien basé sur la requête suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    TRANSFORM IIf(Count([Jour Travail]) Is Null,0,Count([Jour travail])) AS LaValeur
    SELECT R_Jours_Travailles.Praticien, Count(R_Jours_Travailles.DateDebutActivite) AS TOTAL
    FROM R_Jours_Travailles
    WHERE (((R_Jours_Travailles.DateDebutActivite) Between [Formulaires]![F_Stats]![BeginDate] And [Formulaires]![F_Stats]![EndDate]))
    GROUP BY R_Jours_Travailles.Praticien
    PIVOT R_Jours_Travailles.[Jour Travail] In ("Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi","Dimanche");

    En appuyant sur shift + F9 la requête se rafrachit t'elle ?

    JimBoLion

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    525
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Août 2005
    Messages : 525
    Par défaut
    J'essaie d'être plus clair: J'ai fait un planning d'activités. J'ai donc une date, un praticien et une activité sous forme de code et de libellé (pour que le code soit mieux compris). Si je veux compter combien de lundi, mardi, ... a travaillé chaque praticien, je fais une première requête (R_Jour_Travailles) qui me liste les jours avec les dates et les noms des praticiens et je trie les activités que je veux ou que je ne veux pas (je ferai appel à cette sous requête par une liste déroulante du formulaire). J'ai fait ensuite une requête analyse croisée sans faire apparaître les activités pour pouvoir préciser combien de lundi a été travaillé avec telle ou telle activité, sans que l'activité apparaisse. Ex: si le praticien a travaillé le matin avec l'activité1 et l’après-midi avec l'activité2, je ne veux compter qu'une fois le lundi (je compte les lundi travaillé avec l'activité 1 ou l'activité 2). J'ai mis la requête analyse croisée dans un sous formulaire (SF_stats) et une liste à choix multiple dans le formulaire F_Stats. j'ai basé mon sous-formulaire sur R_Stats mais pour ne pas compter 2 fois le jour, quand je clique sur la liste de choix, cela modifie la requête R_Jours_travaillés. Le soucis, c'est qu'aprés avoir modifié la requête, il n'y a pas d'actualisation du sous _formulaire. Pourtant, derrière la requête est bien modifiée. Et rien n'y fait: Ni Me.SF_Stats.form.requery ou Me.SF_Stats.form.recalc ou Me.SF_Stats.form.refresh.
    Si je ferme le formulaire F_Stats et que je le ré-ouvre, la modification est prise en compte.
    En cherchant dans les forum, j'ai vu des problème de réinitialisation de variables où il faudrait que strSQL soit remise à zéro. J'ai essayé mais cela ne fait rien.
    Je me demande s'il existe un équivalent en SQL du .update en DAO ?

  13. #13
    Expert confirmé
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Billets dans le blog
    2
    Par défaut
    docjo,

    Tu vas tenter cette astuce !

    Tu crées un formulaire vide qui sera l'objet source de ton formulaire.
    Ensuite tu lances ton calcul via vba puis tu modifies après création de R_stats l'objet source de ton sous formulaire en passant les bonnes valeurs

    exemple : si ton ton sous formulaire s’appelle Sfrm_RStats

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            Me.nameControlssform.SourceObject = "Sfrm_RStats"
            Me.Refresh
    J'avais utilisé cette technique lorsque des enregistrements de la table parents (formulaire) et enfants regroupaient des données communes (ce qui n'est pas ton cas j'avoue mais l'artifice devrait fonctionner).

    JimBoLion

  14. #14
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    525
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Août 2005
    Messages : 525
    Par défaut
    Merci doublement Jimbolion! Non seulement pour cette astuce mais surtout pour m'avoir fait comprendre l'erreur enorme qui en fait empêchait l'actualisation du formulaire. En fait, dans une requete je demandais à ne pas tenir compte des activités de type commentaire (qui servent à mettre un commentaire sur une activité à un jour précis) ou de type impossibilité qui sert permet de ne pas mettre d'activité à celui qui à signalé une date impossible.
    Mais dans ma liste à choix multiples, j'avais tout simplement oublié de les enlever de la liste. Probablement à la source d'un conflit qui empêchait l'actualisation du sous formulaire. J'ai simplement enlevé ces activités de ma liste et cela s'actualise immédiatement.

    Au total: j'actualise la sous requête puis un requery suffit

    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
     
    Private Sub LstActivite_AfterUpdate()
    On Error Resume Next
        Dim db As DAO.Database
        Dim qdf As DAO.QueryDef
        Dim strSQL, strQry As String, strF As String
        Dim var As Variant
     
     
     
        For Each var In Me.LstActivite.ItemsSelected
            strF = strF & "'" & Me.LstActivite.ItemData(var) & "',"
        Next var
     
        If Me.LstActivite.ItemsSelected.Count < 1 Then
        strF = ""
        Else
        strF = "And ((T_CreneauActivite.Activite) In (" & Left(strF, Len([strF]) - 1) & ")) "
        End If
     
        strSQL = "SELECT T_Activites.User AS Praticien, WeekdayName(Weekday([DateDebutActivite],2)) AS [Jour Travail], T_Activites.DateDebutActivite " _
        & "FROM T_Activites INNER JOIN T_CreneauActivite ON T_Activites.CodeCreneau = T_CreneauActivite.CodeCreneau " _
        & "WHERE ((T_CreneauActivite.Activite) <> ""Comment Bloc"" And (T_CreneauActivite.Activite) <> ""Impossibilite"") " & strF & "" _
        & "GROUP BY T_Activites.User, WeekdayName(Weekday([DateDebutActivite],2)), T_Activites.DateDebutActivite " _
        & "ORDER BY T_Activites.User;"
     
     
        Set db = CurrentDb
        Set qdf = db.QueryDefs("R_Jours_Travailles")
        qdf.sql = strSQL
        db.QueryDefs.Refresh
        Set qdf = Nothing
        Set db = Nothing
     
     
        Me.SF_Stats.Form.Requery
         With Me.SF_Stats.Form
          .RecordSource = .RecordSource
        End With
     
    End Sub
    Un grand merci aussi à Robert pour son aide et ses conseils précieux.

    bonne journée à tous les deux.

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 17/10/2013, 09h53
  2. [A-03] Réunir une requete analyse croisée dynamique
    Par alaingui dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 27/10/2008, 10h46
  3. modification d'un enregistrement par une requete
    Par tzinzin dans le forum Access
    Réponses: 7
    Dernier message: 23/03/2006, 20h36
  4. Réponses: 1
    Dernier message: 13/04/2005, 14h41

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