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 :

Filtre dans un sous-formulaire


Sujet :

IHM

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 12
    Points : 4
    Points
    4
    Par défaut Filtre dans un sous-formulaire
    Bonjour,

    Dans un sous-formulaire, j'ai en entete des champs servant de critère de tri avec un bouton de filtre contenant le code 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
    Private Sub filtreOT_Click()
     
    Dim w_type As String
    Dim w_ot As String
    Dim where As String
     
    where = "[idOT] is not null"
     
    ' 1) Check if OT is null
    If IsNull([OTf]) = True Then
        w_ot = ""
    Else
        w_ot = " AND [idOT]=[Formulaires]![02 Intervention]![02 Intervention_SF_Modifier].[Formulaire]![OTf]"
    End If
     
    ' 1) Check if Type is null
    If IsNull([typef]) = True Then
        w_type = ""
    Else
        w_type = " AND [Type_maintenance]=[Formulaires]![02 Intervention]![02 Intervention_SF_Modifier].[Formulaire]![typef]"
    End If
     
     
    If (w_type = "" And w_ot = "" Then
        MsgBox "Aucun critère de tri défini", vbCritical, "Les champs de recherche sont vides ..."
    Exit Sub
     
    Else
        where = where + w_type + w_ot 
        DoCmd.ApplyFilter "", where
    End If
     
     
    End Sub
    Quand je clique sur le bouton, j'ai une erreur 2491 sur la ligne DoCmd.Applyfilter.

    Je pense que cela vient du fait que le filtre est dans un sous-formulaire mais comme je suis débutant, je ne vois comment faire.

    Merci par avance à celui ou ceux qui trouveront.

    Mathieu

    Merci

  2. #2
    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
    1- erreur 2491 : quel est le message d'erreur ?
    2- parle nous de tes formulaires + sous formulaires (leurs noms...), pour qu'on comprenne qu'est-ce qui est quoi ? où ? où est ce code ? etc.
    Développement Office, support technique, assistance, sur place (Loire atlantique, Vendée, Maine et Loire) ou à distance.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 12
    Points : 4
    Points
    4
    Par défaut Filtre dans un sous-formulaire
    Merci Papy Turbo de m'avoir répondu, voici le complément :

    1- erreur 2491 : quel est le message d'erreur ?
    L'action ou méthode n'est pas valide, car le formulaire ou l'état n'est pas lié à une requete.

    2- parle nous de tes formulaires + sous formulaires (leurs noms...), pour qu'on comprenne qu'est-ce qui est quoi ? où ? où est ce code ? etc.
    J'ai un formulaire qui s'appele 02 Intervention dans lequel se trouve un Controle onglet qui comporte le sous formulaire 02 Intervention_SF_Modifier

    C'est dans ce sous formulaire unique que j'ai en entête les champs OTf et typef suivi d'un bouton avec le code ci-dessus.

    Merci

  4. #4
    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 Re: Filtre dans un sous-formulaire
    Citation Envoyé par moto25
    L'action ou méthode n'est pas valide, car le formulaire ou l'état n'est pas lié à une requete.
    Le message me semble très explicite, surtout par rapport à la ligne de code sur laquelle il s'est produit (mais, je sais, y a rien de pire que d'interpréter ces messages, la première fois qu'on tombe dessus ) :
    Ton (sous)formulaire n'est lié à aucun jeu d'enregistrements (aucune source de données), donc tu ne pourras jamais appliquer un filtre sur cette source de données.

    Citation Envoyé par moto25
    J'ai un formulaire qui s'appele 02 Intervention dans lequel se trouve un Controle onglet qui comporte le sous formulaire 02 Intervention_SF_Modifier
    C'est dans ce sous formulaire unique que j'ai en entête les champs OTf et typef suivi d'un bouton avec le code ci-dessus.
    Bon, c'est le le sous formulaire 02 Intervention_SF_Modifier qui nous intéresse, si j'ai bien compris ?
    Et il n'a pas de source de données ?
    Comment est-ce que tu affiches les données à Modifier ?
    par du code quelque part ?

    J'ai l'impression qu'il va falloir revoir l'analyse de tes formulaires.
    Généralement, on utilise :
    - un formulaire principal sans source de données.
    Il contient
    -- les critères de choix et de filtage (OTf et typef) + un bouton filtreOT qui va créer un filtre et l'appliquer à la source du sous formulaire,
    -- un sous formulaire avec une source de données (requête ou table [Interventions]), modifiable et filtrable.

    Quelles sont tes sources de données ? liaison form principal <-> sous form ?
    Développement Office, support technique, assistance, sur place (Loire atlantique, Vendée, Maine et Loire) ou à distance.

  5. #5
    Membre éclairé
    Homme Profil pro
    Comptable
    Inscrit en
    Mars 2005
    Messages
    511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comptable

    Informations forums :
    Inscription : Mars 2005
    Messages : 511
    Points : 678
    Points
    678
    Par défaut
    dans ces cas le meilleur moyen est de d'afficher "where" avec un Msg box

    cependant tu as des variables donc tu dois mettre ton code le la manière suivante

    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 filtreOT_Click() 
     
    Dim w_type As String 
    Dim w_ot As String 
    Dim where As String 
     
    where = "[idOT] is not null" 
     
    ' 1) Check if OT is null 
    If IsNull([OTf]) = True Then 
        w_ot = "" 
    Else 
        w_ot = " AND [idOT]=" & [Formulaires]![02 Intervention]![02 Intervention_SF_Modifier].[Formulaire]![OTf]
    End If 
     
    ' 1) Check if Type is null 
    If IsNull([typef]) = True Then 
        w_type = "" 
    Else 
        w_type = " AND [Type_maintenance]=" & [Formulaires]![02 Intervention]![02 Intervention_SF_Modifier].[Formulaire]![typef]
    End If 
     
     
    If (w_type = "" And w_ot = "" Then 
        MsgBox "Aucun critère de tri défini", vbCritical, "Les champs de recherche sont vides ..." 
    Exit Sub 
     
    Else 
        where = where + w_type + w_ot 
        DoCmd.ApplyFilter "", where 
    End If 
     
     
    End Sub
    essaye

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    cependant tu as des variables donc tu dois mettre ton code le la manière suivante
    Ca ne fonctionne pas

    Le message me semble très explicite, surtout par rapport à la ligne de code sur laquelle il s'est produit (mais, je sais, y a rien de pire que d'interpréter ces messages, la première fois qu'on tombe dessus ) :
    Ton (sous)formulaire n'est lié à aucun jeu d'enregistrements (aucune source de données), donc tu ne pourras jamais appliquer un filtre sur cette source de données.
    Mon formulaire est bien lié à une requete :
    Source :
    SELECT [02 Intervention].* ...
    Filtre :
    [idOT]=Formulaires![02 Intervention]![02 Intervention_SF_Modifier].Form![OTsaisi]

    Mes données s'affichent bien avec le filtre associé au code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.DoMenuItem acFormBar, acRecordsMenu, 2, , acMenuVer70
    Mais comme je souhaite filtrer sur plusieurs critères, j'ai tapé le code (trouvé sur une appli qui fonctionne) du premier message.

    Mathieu

  7. #7
    Membre éclairé
    Homme Profil pro
    Comptable
    Inscrit en
    Mars 2005
    Messages
    511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comptable

    Informations forums :
    Inscription : Mars 2005
    Messages : 511
    Points : 678
    Points
    678
    Par défaut
    fait un test pour comprendre ce qu'il y a dans where

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Else 
        where = where + w_type + w_ot 
       msgbox where
        DoCmd.ApplyFilter "", where 
    End If
    une remarque je ne pense pas que se soit bien d'utiliser "where" comme nom car c'est un mot réservé qui peut éventuellement provoquer des interférences

    pour quelle raison le "" après ApplyFilter?

    dis nous ce qui est afficher avec ton message box

  8. #8
    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, Mathieu
    Citation Envoyé par moto25
    Mon formulaire est bien lié à une requete :
    Source :
    SELECT [02 Intervention].* ...
    Filtre :
    [idOT]=Formulaires![02 Intervention]![02 Intervention_SF_Modifier].Form![OTsaisi]
    Relis les messages + haut : apparemment ton sous formulaire n'en a pas.
    Je ne comprends pas pourquoi les boutons de filtrage sont sur un sous formulaire ? (voir + haut, d'habitude, on fait plutôt l'inverse)
    J'ai du mal à comrendre la structure de tes formulaires ?
    Peux-tu indiquer en clair :
    - chaque formulaire, son nom, sa source (si y a)
    - si sous-formulaire, sa relation au form principal (champs pères + fils)
    - où est le bouton filtreOT ?
    - où sont les contrôles de filtrage (OTf, typef...) ?

    J'ai besoin de comprendre ça pour te répondre : il n'y a très probablement pas besoin de la référence à ... [Formulaires]![02 Intervention]![02 Intervention_SF_Modifier].[Formulaire]![...]
    Citation Envoyé par moto25
    Mes données s'affichent bien avec le filtre associé au code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.DoMenuItem acFormBar, acRecordsMenu, 2, , acMenuVer70
    Peux pas te répondre : Docmd.DoMenuItem existe toujours (pour compatibilité avec anciennes applis) mais est remplacé par DoCmd.Runcommand depuis Access 2000.
    Je ne sais pas à quelle commande tu fais référence ?
    Citation Envoyé par moto25
    Mais comme je souhaite filtrer sur plusieurs critères, j'ai tapé le code (trouvé sur une appli qui fonctionne) du premier message.
    Ce code doit être bon, mais quleque chose n'est pas sur le bon (sous?) formulaire. J'attends ton exposé.
    Développement Office, support technique, assistance, sur place (Loire atlantique, Vendée, Maine et Loire) ou à distance.

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    Bonsoir,

    Désolé pour le retard de réponse mais j'ai eu qqs souci pour mettre en ligne un imprime écran



    il faut savoir que mon filtre fonctionne parfaitement si je visualise le sous formulaire 02 Intervention_SF_Modifier directement (en modifiant bien sûr l'adresse des champs à prendre en compte dans le filtre).

    si je visualise ce sous formulaire dans le formulaire 02 Intervention comme sur l'imprime écran cela bug au niveau de la commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.ApplyFilter "", where.
    Le problème vient donc OBLIGATOIREMENT de cette commande qui est perdu pour l'application du filtre dans les 2 formulaires ouvert (02 Intervention et 02 intervention_SF_modifier

    MErci

  10. #10
    Membre éclairé
    Homme Profil pro
    Comptable
    Inscrit en
    Mars 2005
    Messages
    511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comptable

    Informations forums :
    Inscription : Mars 2005
    Messages : 511
    Points : 678
    Points
    678
    Par défaut
    si tu regardes dans l'aide la commande est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DoCmd.ApplyFilter , where
    donc si ta commande where est correcte l'affichage sera ok!

    A+

  11. #11
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    Merci j'avais déja regardé l'aide.
    Avec ou sans les "" la commande fonctionne quand le sous-formulaire est ouvert directement mais pas quand il est ouvert dans le sous formulaire.

    Peut-être que cette commande ne s'applique pas pour les sous-formulaires.

  12. #12
    Membre éclairé
    Homme Profil pro
    Comptable
    Inscrit en
    Mars 2005
    Messages
    511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comptable

    Informations forums :
    Inscription : Mars 2005
    Messages : 511
    Points : 678
    Points
    678
    Par défaut
    je te propose un petit remplacement de:

    [Formulaires]![02 Intervention]![02 Intervention_SF_Modifier].[Formulaire]![OTf]
    en

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Forms![02 Intervention]![02 Intervention_SF_Modifier]![OTf]
    fait de même pour le 2ème code

    A+[/quote]

  13. #13
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    Ca y est, ca fonctionne.

    Après une recherche sur un site anglais, j'ai trouvé la parade.

    la cmd applyfilter ne fonctionne pas, il faut remplacer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.ApplyFilter , where
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Me.RecordSource = "select * from [02 Intervention] where " & where
    [02 Intervention] étant aussi le nom de ma table

    Et cela fonctionne parfaitement.

    Merci à tous pour votre aide

  14. #14
    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
    Excuse moi pour le retard. Je rentre juste :
    1- Content que ça marche, avec RecordSource
    2- Effectivement, ça ne marche pas avec Docmd.ApplyFilter prce que cette commande s'applique au formulaire actif, donc à ton formulaire principal. Elle ne peut jamais s'appliquer à un sous formulaire.

    Il n'empêche que tu peux améliorer 2 choses :
    A- Même si la modification de la source (RecordSource) marche bien, ce qu'il te faut ici, c'est modifier le filtre du sous-formulaire. (exemple ci dessous)
    B- ta clause SQL (Where - Au passage, Alexandre t'a fait remarquer qu'il faudrait changer ce nom. Il a raison.) peut être simplifiée et accélérée en mettant la valeur du contrôle à la place de la référence :

    Ce qui 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
    Private Sub filtreOT_Click() 
     
    Dim w_type As String 
    Dim w_ot As String 
     
     
        ' 1) Check if OT is null 
        If IsNull([OTf]) = True Then 
            w_ot = "[idOT] is not null" 
        Else 
            w_ot = "[idOT]=" & Me![OTf] 
        End If 
     
        ' 1) Check if Type is null 
        If IsNull([typef]) = True Then 
            w_type = "" 
        Else 
            w_type = " AND [Type_maintenance]=" & Me![typef] 
        End If 
     
     
        If (w_type + w_ot) = "" Then 
            MsgBox "Aucun critère de tri défini", vbCritical, "Les champs de recherche sont vides ..." 
            'on supprime le filtre, et on affiche tous les enregistrements
            Me.Filter  = ""
            Me.FilterOn = False
        Else        'on applique les filtres 
            Me.Filter  = w_type + w_ot 
            Me.FilterOn = True
        End If 
     
    End Sub
    Développement Office, support technique, assistance, sur place (Loire atlantique, Vendée, Maine et Loire) ou à distance.

  15. #15
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    Excellent,

    Merci papy turbo, ton code Me.Filter fonctionne mieux que recordsource.

    l'avantage de ton code et qu'il ne modifie pas le source de la requete mais juste le filtre.

    beaucoup mieux.

    merci

    sujet résolu

    je ne sais pas comment mettre le tag résolu

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

Discussions similaires

  1. [AC-2007] Filtres dans un sous formulaire en mode feuille de données
    Par pierrequimousse dans le forum IHM
    Réponses: 0
    Dernier message: 05/11/2010, 12h34
  2. Annuler un filtre dans un sous-formulaire
    Par niavlys77 dans le forum IHM
    Réponses: 2
    Dernier message: 19/03/2009, 15h06
  3. Annuler un filtre dans un sous formulaire
    Par fkasid dans le forum IHM
    Réponses: 3
    Dernier message: 24/01/2007, 11h28
  4. Requête filtrée dans des sous-formulaires
    Par Beavis Man dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 16/12/2006, 23h31
  5. Filtre dans un sous formulaire
    Par marie10 dans le forum Access
    Réponses: 8
    Dernier message: 06/02/2006, 17h35

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