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 :

COmment borner un filtre de recherche entre 2 dates [AC-2019]


Sujet :

IHM

  1. #1
    Membre à l'essai
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Juin 2013
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Directeur commercial

    Informations forums :
    Inscription : Juin 2013
    Messages : 20
    Points : 14
    Points
    14
    Par défaut COmment borner un filtre de recherche entre 2 dates
    Bonjour à tous,

    je suis en train de développer une base de donnée utilisateur pour ma société. Mais je ne suis pas développeur et j'ai du mal dés que je dois sortir des commandes habituelles.

    Ma question porte sur comment trier les enregistrement d'un formulaire en saisissant 2 dates dans des contrôles de l'entête. Ces 2 saisies doivent trier tous les enregistrements qui ont eu lieu entre ces 2 dates ("Entre le :" "et le :"), l'information étant contenue dans le champ [MG_SIGNATURE] de la table [T_MG_INEXIA-IMMO]
    Pour plus de compréhension voici une capture d'écran de mon formulaire.
    Nom : Formulaire_MANDAT-LISTE.JPG
Affichages : 167
Taille : 93,8 Ko.

    Dans l'idéal je voudrais ensuite pouvoir effectuer un second tri sur la sélection contenue entre les 2 dates renseignées. Par exemple quel collaborateur à effectué ces signatures. J'ai déjà mis en place ce filtre qui fonction mais qui bien sur effectue la sélection sur l'ensemble des enregistrement. La macro associée à ce contrôle est ci-dessous.
    Nom : SELECT-COM.JPG
Affichages : 164
Taille : 32,3 Ko

    Merci par avance pour votre aide précieuse. J'ai une 10aine de formulaires à qui je voudrait pouvoir appliquer ces filtres donc les conseils que vous pourrez me donner seront dupliqués du moment que je comprendrais comment il faut faire. Et vous aurez également fait votre BA car cela va aussi beaucoup me faciliter la vie ainsi que celle de tous mes collaborateurs.

    Bonne journée à tous.

    Cordialement

  2. #2
    Expert éminent
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 262
    Points : 6 561
    Points
    6 561
    Par défaut
    Bonsoir,
    Une piste, mais en VBA, à insérer dans le module VBA du form
    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
    Sub FilterForm()
    Dim strWhere As String
     
    If Not IsNull(Me.txtdatedeb) And Not IsNull(Me.txtdatefin) Then
        strWhere = "AND [MG_SIGNATURE] BETWEEN " & Format(Me.txtdatedeb, "\#mm\/dd\/yyyy\#") & " AND " & Format(Me.txtdatefin, "\#mm\/dd\/yyyy\#") &""
    End If
    If Not IsNull(Me.cbocommercial) Then
        'strWhere = strWhere & " AND [MG_COMMERCIAL] = '" & Me.cbocommercial & "'" 'si alphanum
        strWhere = strWhere & " AND [MG_COMMERCIAL] = " & Me.cbocommercial & "" ' si num
    End If
    If strWhere = "" Then
        Me!FilterOn = False
    Else
        strWhere = Mid(strWhere, 5)
        Me!Filter = strWhere
        Me!FilterOn = True
    End If
    End Sub
    Et sur un évènement, ici un btn de commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub btnfiltre_Click()
    FilterForm
    End Sub
    "Le savoir est la seule matière qui s'accroit quand on la partage" (Socrate)
    UR - ESIROI - GPME/CG/DCG8
    QTH :21°19'18"S - 055°25'32"E
    Inutile de me contacter par MP
    Merci de cliquer sur si la réponse vous a permis de résoudre votre problème et n'oubliez pas de clôturer le fil en cliquant sur

  3. #3
    Membre à l'essai
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Juin 2013
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Directeur commercial

    Informations forums :
    Inscription : Juin 2013
    Messages : 20
    Points : 14
    Points
    14
    Par défaut
    Bonjour HYPERION13,


    merci pour votre réponse et désolé de répondre si tardivement à votre message.

    J'avoue que je ne sais pas me servir des modules et que votre méthode de résolution de ma problématique est largement au dessus de mes compétences ACCESS aujourd'hui. J'ai bien sur essayé quand même d'appliquer vos conseils, mais sans succès malheureusement (j'ai essayé dans tous les sens mais à chaque fois cela plantait et ça ne fonctionnait pas).

    N'y aurait il pas une méthode plus simple à mettre en œuvre comme par exemple la mise en place d'un bouton avec un code VBA qui permettrait de réaliser cette tâche ?

    Je suis très peu à l'aise avec la "grammaire" d'une rédaction de code, même si je suis pas novice dans l'approche du codage informatique. Je m'excuse donc par avance de sembler être un "assisté" dans ce domaine et de paraitre extrêmement novice.

    Par avance merci pour votre aide et vos conseils.

    Jean-Gaël

  4. #4
    Expert éminent
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 262
    Points : 6 561
    Points
    6 561
    Par défaut
    Citation Envoyé par gigap_1971 Voir le message
    ...
    N'y aurait il pas une méthode plus simple à mettre en œuvre comme par exemple la mise en place d'un bouton avec un code VBA qui permettrait de réaliser cette tâche ?
    ...
    Bonjour,
    L'exemple donné répond à votre demande pourtant.
    - btnfiltre est un bouton de commande. A insérer dans votre form. Évènenemt sur click, cliquer sur [...] "Générateur de code".
    - Sub FilterForm() est du codage VBA. A copier/coller dans le module du form. Les blocs if permettent de vérifier que des dates aient été ou non saisies, qu'un commercial ait été ou non sélectionné pour ensuite activer le filtre.
    - txtdatedeb et txtdatefin sont des textboxes indépendantes pour saisir vos dates. A adapter selon votre form puisqu'elles existent.
    - cbocommercial est une combobox indépendante pour sélectionner votre commercial ou collaborateur. A adapter selon votre form puisqu'elle existe.
    - [MG_SIGNATURE] et [MG_COMMERCIAL] sont les textboxes dépendantes de votre form. Existent déjà dans votre form.
    "Le savoir est la seule matière qui s'accroit quand on la partage" (Socrate)
    UR - ESIROI - GPME/CG/DCG8
    QTH :21°19'18"S - 055°25'32"E
    Inutile de me contacter par MP
    Merci de cliquer sur si la réponse vous a permis de résoudre votre problème et n'oubliez pas de clôturer le fil en cliquant sur

  5. #5
    Membre à l'essai
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Juin 2013
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Directeur commercial

    Informations forums :
    Inscription : Juin 2013
    Messages : 20
    Points : 14
    Points
    14
    Par défaut Toujours en difficulté pour trier les enregistrements par rapport à des critères sélectionnés.
    Bonjour HYPERION13,


    je n'arrive toujours pas à trier mes enregistrements par rapport à des dates pré-selectionnées.

    Malgré toutes vos consignes cela ne fonctionne pas.

    Je vous fais une copie d'écran des lignes de code écrites dans le module du formulaire. Pourriez-vous m'éclairer s'il vous plait ?

    J'arrive à inscrire automatiquement les infos dans les textbox : txtdatedeb et txtdatefin
    Nom : Capture-20.JPG
Affichages : 111
Taille : 17,4 Ko

    Le bouton à droite devrait pouvoir trier les enregistrements dans le champs [CONT_DATE-APPEL] afin de n'afficher que les contacts qui ont appelé dans la fourchette définie par txtdatedeb et txtdatefin.

    J'ai donc encore besoin d'un petit coup de pouce.

    Merci beaucoup^pour votre temps et votre patience.

    Cordialement

    Nom : Capture-21.JPG
Affichages : 114
Taille : 76,9 Ko

  6. #6
    Membre actif
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 335
    Points : 229
    Points
    229
    Par défaut
    Bonjour Gigap,

    Juste en passant, je lisais ton dernier message.

    Il me semble que suite à ton clic sur le bouton la seule chose que tu fais c'est de construire la partie WHERE d'une chaîne SQL (et encore ton bout de chaine qui va dans le WHERE, je suppose que tu la concatène avec quelque chose avant ? car sinon le AND de début n'est pas à sa place).
    Mais surtout, une fois que tu as ton WHERE, tu ne le rattaches à aucune commande SQL. Tu devrais avoir une string ressemblant à ceci en final "SELECT fieldlist FROM tableexpression WHERE criteria"
    Et cette string tu l'utilises pour mettre à jour ton formulaire

    A voir si ca peut t'aider...

  7. #7
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    bonjour,
    plutôt que de faire des impressions d'écran du code VBA, il est plus pratique de le poster au format texte entre les balises de codes générées par cet icone: #, c'es plus simple pour y apporter des corrections.
    Il manque 2 lignes que tu as enlevé du code que t'as donné hyperion13 et qui permettent d'appliquer le filtre sur le formulaire, celles qui sont juste après strWhere = Mid(strWhere, 5)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    If strWhere = "" Then
        Me.FilterOn = False
    Else
        strWhere = Mid(strWhere, 5)
        Me.Filter = strWhere
        Me.FilterOn = True
    End If
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  8. #8
    Membre à l'essai
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Juin 2013
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Directeur commercial

    Informations forums :
    Inscription : Juin 2013
    Messages : 20
    Points : 14
    Points
    14
    Par défaut Merci Tee_grandbois J'y suis presque
    Ce conseil m' beaucoup aidé. Le filtre est appliqué par le bouton que j'ai crée. En revanche il ne ressort aucun résultat quand on clique sur le bouton.
    C'est assez frustrant en fait car tout semble bon.

    Voici ci-dessous la capture d'écran de ma barre de sélection.

    Nom : Capture_2021.JPG
Affichages : 60
Taille : 17,5 Ko

    Dans le contrôle [SelectSem] on sélectionne le numéro de la semaine (cela fait appel à une table T_SEMAINES ou chaque semaine du calendrier indique dans un champ la date du jour du début de la semaine et le jour de fin).
    Nom : Capture_2021-2.JPG
Affichages : 60
Taille : 28,5 Ko

    Avec une procédure événementielle après avoir sélectionné la semaine choisie, les contrôles [txtdatedeb] et [txtdatefin] sont mis à jour automatiquement.
    L'idée c'est qu'en cliquant sur le bouton [BtlSelect], le Filtre isole les contacts qui ont appelé entre les bornes journalières indiquées dans [txtdatedeb] et [txtdatefin].

    Voici le code VBA actuel qui pilote tout ce petit monde.
    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
     Option Compare Database
     
    Option Explicit
     
     
     
    Sub FilterForm()
     
    Dim strWhere As String
     
    If Not IsNull(Me.txtdatedeb) And Not IsNull(Me.txtdatefin) Then
        strWhere = "AND [CONT_DATE-APPEL] BETWEEN " & Format(Me.txtdatedeb, "\#mm\/dd\/yyyy\#") & " AND " & Format(Me.txtdatefin, "\#mm\/dd\/yyyy\#") & ""
    End If
     
    If strWhere = "" Then
        Me.FilterOn = False
    Else
        strWhere = Mid(strWhere, 5)
        Me.Filter = strWhere
        Me.FilterOn = True
     
    End If
     
     
    End Sub
     
     
    Private Sub BtnSelect_Click()
     
    FilterForm
     
    End Sub
     
    Private Sub SelectSem_AfterUpdate()
     
    Me.[txtdatedeb] = Me.[SelectSem]
    Me.[txtdatefin] = Me.[SelectSem]
     
    End Sub
    J'y suis presque !!! dites moi si vous voyez ce qui ne tourne pas rond dans ces lignes de code.

    Merci par avance.

  9. #9
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    bonsoir,
    Le filtre est appliqué par le bouton que j'ai crée. En revanche il ne ressort aucun résultat quand on clique sur le bouton.
    pas très claire cette explication...

    ajoute ce code: Debug.Print strWhere après l' instruction Me.Filter = strWhere et poste le résultat qui va s'éditer dans la fenêtre d'exécution depuis la fenêtre VBA, et si elle n'est pas affichée, appuie sur Ctrl+G
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  10. #10
    Membre à l'essai
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Juin 2013
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Directeur commercial

    Informations forums :
    Inscription : Juin 2013
    Messages : 20
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par tee_grandbois Voir le message
    bonsoir,
    pas très claire cette explication...

    ajoute ce code: Debug.Print strWhere après l' instruction Me.Filter = strWhere et poste le résultat qui va s'éditer dans la fenêtre d'exécution depuis la fenêtre VBA, et si elle n'est pas affichée, appuie sur Ctrl+G
    Bonjour tee_grandbois,

    merci pour ta réponse rapide.

    Quand je dis "qu'il ne ressort rien comme résultat" c'est que le tri se fait mais qu'aucun enregistrement n'apparait (alors même que dans la table il y a des enregistrements qui devraient matcher avec la sélection faite).

    J'ai bien rajouté la ligne de code que tu m'a indiqué. Du coup on comprend mieux pourquoi rien ne sort en cliquant sur le bouton de tri.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     [CONT_DATE-APPEL] BETWEEN #01/14/1900# AND #01/14/1900#
    Dans [txtdatedeb] et [txtdatefin], les bonnes dates apparaissent bien. Mais lors de l'application du filtre ce ne sont pas celle-là qui sont prise en compte.
    Pour ces 2 contrôles, leur contenu renvoi à une requête. A tout moment le filtre "tri" sur la première colonne, celle du numéro de la semaine.
    Nom : Capture_2021-3.JPG
Affichages : 61
Taille : 17,9 Ko
    Comment peut on forcer strWhere à prendre en compte le champ SEM_DEBUT pour [txtdatedeb] et SEM_FIN pour [txtdatefin], c'est à dire la 2eme colonne de la requête et non la 1ere ?

    On y est presque et quand j'aurais réussis, je vais pouvoir appliquer cette méthode de tri à l'ensemble de mon appli : ça va nous changer la vie.

    Merci par avance pour ton retour.

  11. #11
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    bonjour,
    Comment peut on forcer strWhere à prendre en compte le champ SEM_DEBUT pour [txtdatedeb] et SEM_FIN pour [txtdatefin], c'est à dire la 2eme colonne de la requête et non la 1ere ?
    Ok, compris. Essaie avec [txtdatedeb].column(1) et [txtdatefin].column(1)
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  12. #12
    Membre à l'essai
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Juin 2013
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Directeur commercial

    Informations forums :
    Inscription : Juin 2013
    Messages : 20
    Points : 14
    Points
    14
    Par défaut EUREKA !!
    Citation Envoyé par tee_grandbois Voir le message
    bonjour,
    Ok, compris. Essaie avec [txtdatedeb].column(1) et [txtdatefin].column(1)
    Merci beaucoup tee_grandbois !!! ça marche super! Aprés plus d'un an de galère (et quelques cheveux arrachés) j'arrive enfin à ce que je voulais.

    Y a plus qu'à recopier le procédé sur une 20aine d'autres formulaires.

    Merci pour ton aide et ta clairvoyance.

    Bonne journée et bonne continuation ( et à bientôt sans doute... je ne manque pas de projet de développement de ma base).

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

Discussions similaires

  1. Réponses: 24
    Dernier message: 13/09/2015, 21h03
  2. rechercher entre 2 dates
    Par iomega dans le forum Requêtes
    Réponses: 6
    Dernier message: 04/10/2006, 14h16
  3. probleme avec des filtres de recherche sur des dates
    Par MCarole dans le forum Access
    Réponses: 2
    Dernier message: 24/07/2006, 10h22
  4. Réponses: 2
    Dernier message: 29/05/2006, 19h16
  5. Réponses: 6
    Dernier message: 06/12/2005, 16h51

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