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 :

Filtrage de Formulaire sur Textbox.Change [AC-365]


Sujet :

Access

  1. #1
    Membre habitué Avatar de Le Sage
    Homme Profil pro
    Formateur Conseil en Bureautique et CMS, Développeur VBA, Power Query, Power Pivot
    Inscrit en
    Novembre 2009
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Formateur Conseil en Bureautique et CMS, Développeur VBA, Power Query, Power Pivot
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2009
    Messages : 215
    Points : 171
    Points
    171
    Par défaut Filtrage de Formulaire sur Textbox.Change
    Bonjour.

    Contexte :
    • 1 formulaire continu
    • Plusieurs contrôles de filtrages en entête de formulaire, dont 1 Textbox
    • 1 module standard contenant notamment les procédures ci-dessous


    Fonctionnement attendu :
    Filtrage du formulaire sur changement du Textbox (donc en temps réel, sur chaque saisie de caractère)

    Problème :
    La saisie d'un caractère dans le Textbox filtre bien le sous-formulaire, mais le caractère saisi se trouve sélectionné après le filtrage, ce qui entraîne le remplacement dudit caractère au lieu de la complétion de la saisie lors de la frappe du caractère suivant (Saisie de "ABC" donne "C").

    Besoin :
    Le curseur doit se placer en fin de saisie, en attente d'un nouveau caractère, et non pas en sélection du contenu actuel du Textbox.

    Merci d'avance pour vos lumières !

    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    Option Compare Database
    Option Explicit
     
     
     
    Private p_strFiltreMontant As String, _
            p_strFiltreLibelle As String
     
     
     
    Private Sub txtFiltreLibelle_Change()
        p_strFiltreLibelle = Nz(Me.txtFiltreLibelle.Text, "")
     
        FiltrerFormulaire
    End Sub
     
     
     
     
    Private Sub FiltrerFormulaire()
        Dim strFiltreDebut As String, _
            strFiltreFin As String, _
            strFiltrePeriode As String, _
            strFiltreLibelle As String, _
            strFiltreCategorie As String, _
            strFiltreSousCategorie As String, _
            strFiltre As String
     
        With Me
            strFiltreDebut = Nz(.txtDateDebut.Value, DMin("DateValeur", "T_CCP_0291511637Y"))
            strFiltreFin = Nz(.txtDateFin.Value, Date)
            strFiltrePeriode = "([DateValeur] Between #" & strFiltreDebut & "# And #" & strFiltreFin & "#)"
     
            strFiltreLibelle = IIf(p_strFiltreLibelle <> "", "([Libelle] Like '*" & p_strFiltreLibelle & "*')", "")
     
            strFiltreCategorie = Nz(.cboFiltreCategories.Value, "")
            strFiltreCategorie = IIf(strFiltreCategorie <> "", "([Categorie]=" & Chr(34) & strFiltreCategorie & Chr(34) & ")", "")
     
            strFiltreSousCategorie = Nz(.cboFiltreSousCategorie.Value, "")
            strFiltreSousCategorie = IIf(strFiltreSousCategorie <> "", "([SousCategorie]=" & Chr(34) & strFiltreSousCategorie & Chr(34) & ")", "")
     
            strFiltre = strFiltrePeriode
            strFiltre = strFiltre & IIf(strFiltreLibelle <> "", " AND ", "") & strFiltreLibelle
            strFiltre = strFiltre & IIf(p_strFiltreMontant <> "", " AND ", "") & p_strFiltreMontant
            strFiltre = strFiltre & IIf(strFiltreCategorie <> "", " AND ", "") & strFiltreCategorie
            strFiltre = strFiltre & IIf(strFiltreSousCategorie <> "", " AND ", "") & strFiltreSousCategorie
     
            .Filter = strFiltre
            .FilterOn = True
        End With
     
    End Sub

  2. #2
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 064
    Points : 24 673
    Points
    24 673
    Par défaut
    Bonjour,

    S j'ai bien compris tu veux positionner le curseur à la fin du texte.

    Comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .txtFiltreLibelle.SelStart = .txtFiltreLibelle.SelLength
    Cordialement,

  3. #3
    Membre habitué Avatar de Le Sage
    Homme Profil pro
    Formateur Conseil en Bureautique et CMS, Développeur VBA, Power Query, Power Pivot
    Inscrit en
    Novembre 2009
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Formateur Conseil en Bureautique et CMS, Développeur VBA, Power Query, Power Pivot
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2009
    Messages : 215
    Points : 171
    Points
    171
    Par défaut
    Bonjour loufab, et merci.

    Comme d'habitude, tu as très bien compris.

    Pour ceux que la question intéresse, et afin qu'ils évitent quelques écueils supplémentaires :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub txtFiltreLibelle_Change()
        With Me.txtFiltreLibelle
            p_strFiltreLibelle = Nz(.Text, "")
     
            FiltrerFormulaire
     
            .SetFocus
            .SelStart = .SelLength
        End With
    End Sub
    Le filtrage est lancé avant le repositionnement car j'y ai ajouté un replacement de la liste en fin de procédure qui fait perdre le focus à txtFiltreLibelle (qui doit l'avoir pour exécuter le .SelStart) :

    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
    42
    43
    44
    Private Sub FiltrerFormulaire()    Dim strFiltreDebut As String, _
            strFiltreFin As String, _
            strFiltrePeriode As String, _
            strFiltreLibelle As String, _
            strFiltreCategorie As String, _
            strFiltreSousCategorie As String, _
            strFiltre As String
     
        With Me
            strFiltreDebut = Format(Nz(.txtDateDebut.Value, DMin("DateValeur", "T_CCP_0291511637Y")), "mm/dd/yyyy")
            strFiltreFin = Format(Nz(.txtDateFin.Value, Date), "mm/dd/yyyy")
            strFiltrePeriode = "([DateValeur] Between #" & strFiltreDebut & "# And #" & strFiltreFin & "#)"
     
            strFiltreLibelle = IIf(p_strFiltreLibelle <> "", "([Libelle] Like '*" & p_strFiltreLibelle & "*')", "")
     
            strFiltreCategorie = Nz(.cboFiltreCategories.Value, "")
            strFiltreCategorie = IIf(strFiltreCategorie <> "", "([Categorie]=" & Chr(34) & strFiltreCategorie & Chr(34) & ")", "")
     
            strFiltreSousCategorie = Nz(.cboFiltreSousCategorie.Value, "")
            strFiltreSousCategorie = IIf(strFiltreSousCategorie <> "", "([SousCategorie]=" & Chr(34) & strFiltreSousCategorie & Chr(34) & ")", "")
     
            strFiltre = strFiltrePeriode
            strFiltre = strFiltre & IIf(strFiltreLibelle <> "", " AND ", "") & strFiltreLibelle
            strFiltre = strFiltre & IIf(p_strFiltreMontant <> "", " AND ", "") & p_strFiltreMontant
            strFiltre = strFiltre & IIf(strFiltreCategorie <> "", " AND ", "") & strFiltreCategorie
            strFiltre = strFiltre & IIf(strFiltreSousCategorie <> "", " AND ", "") & strFiltreSousCategorie
     
            .Filter = strFiltre
            .FilterOn = True
     
            .cmdRazFiltresChamps.ForeColor = IIf(strFiltreLibelle <> "" Or _
                                                 p_strFiltreMontant <> "" Or _
                                                 strFiltreCategorie <> "" Or _
                                                 strFiltreSousCategorie <> "", _
                                                 RGB(255, 0, 0), _
                                                 RGB(0, 0, 0))
        End With
     
        DoCmd.GoToRecord , , acLast
        On Error Resume Next
            DoCmd.GoToRecord , , acPrevious, 20
        On Error GoTo 0
        DoCmd.GoToRecord , , acLast
    End Sub
    Encore merci pour ce coup de main aussi rapide qu'efficace.

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

Discussions similaires

  1. [AC-2013] Filtrage multi-critères sur un sous formulaire
    Par papoupa31 dans le forum IHM
    Réponses: 3
    Dernier message: 08/08/2018, 18h46
  2. [AC-2013] Filtrage sur champ multivalué dans formulaire sur requête
    Par Lari81 dans le forum IHM
    Réponses: 2
    Dernier message: 18/07/2018, 19h18
  3. Réponses: 3
    Dernier message: 11/09/2017, 08h12
  4. [AC-2010] Filtrage d'un formulaire sur 6 critères
    Par katlo dans le forum VBA Access
    Réponses: 11
    Dernier message: 15/04/2017, 13h35
  5. Question sur formulaire et textbox
    Par Cheorches dans le forum IHM
    Réponses: 1
    Dernier message: 05/09/2007, 13h22

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