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 :

form recherche Loufab avec tri sur lst_resultat


Sujet :

IHM

  1. #1
    Membre du Club Avatar de thiefer
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    94
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 94
    Points : 61
    Points
    61
    Par défaut Fusion de messages
    Bonjour à tous,

    comme un peu tout le monde, lorsqu'on en vient à vouloir utiliser un formulaire de recherche sous access, on ne va pas réinventer la poudre à couper le fil à beurre qui fond au soleil. On utilise celui de Loufab !!!
    Un immense merci.
    J'aimerai savoir s'il est possible lorsque la sélection est réalisée, comme lorsque l'on clique sur un enregistrement du champ lst_resultat on y accède en mode édition, serait-il possible de cliquer sur une des colonne de la ligne d'entête pour ajouter un order by à notre instruction sql ?
    Si quelqu'un savait comment avancer sur le sujet, sachant que je ne suis pas programmeur pour le moindre sou, merci par avance,

    @ très bientôt


    quelqu'un aurait-il déjà rencontré ce besoin.
    Sûr que oui !!

    Mais comment s'en est-il sorti ?

    C'est simple dans l'esprit mais je ne trouve aucune solution :
    comment, en me positionnant sur l'entête de ma zone de liste (cad les champs résultants de mes table, table/requête...), récupérer l'indice de la colonne cliquée pour modifier ma requête SQL avec un order by (1er click ASC, second click DESC)

    Mille mercis

    TF

  2. #2
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 768
    Points
    7 768
    Par défaut
    Bonjour,

    voici ma petite idée dans une base exemple
    Voir le code de lstResultat_MouseUp(....) dans l'unique formulaire.
    Pas si simple que ça à réaliser en fait

    A+

  3. #3
    Membre du Club Avatar de thiefer
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    94
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 94
    Points : 61
    Points
    61
    Par défaut c'est bien ça
    Salut LedZeppII,

    ah vrai dire, t'es bluffant !
    C'est exactement ce que cherche !!!
    Le blême à présent c'est de l'inclure dans mon code et là, j'avoue que je m'en vois pas mal.
    Comme mon non niveau d'informaticien ne me permet pas de comprendre tout ce qui est écrit à ton code, notamment les function préalables, j'ai de nombreux bug à l'adaptation que j'ai essayé d'en faire au tuto de recherche de Loufab.
    Pour l'instant, je ne parviens pas à la faire fonctionner mais je ne désespère pas, je teste, même si c'est pas gagné,
    Je te tiens informé,

    @+
    TF

    Long Live r'n'r

  4. #4
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 768
    Points
    7 768
    Par défaut
    Bonjour,

    Mon code pour identifier la colonne est alourdi par l'utilisation de fonctions API qui servent à évaluer la hauteur d'une ligne de zone de liste en fonction de la police de caractères.

    Tu peux simplifier dans un premier.
    Je viens de créer un formulaire "fmSelCLIENTS simple" dans ma base exemple, dans lequel j'ai codé en dur la hauteur de ligne.
    Le code devrait être plus lisible.

    Sinon, procèdes par étapes.
    J'en vois essentiellement deux.
    1. Identification de la colonne
    2. Modification du SQL de la requête

    A+

  5. #5
    Membre du Club Avatar de thiefer
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    94
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 94
    Points : 61
    Points
    61
    Par défaut ça avance plutôt bien
    Salut LedZeppII,

    Alors comme titré, j'ai réussi à adapter ton code au formulaire de recherche de Loufab et cela fonctionne plutôt bien à présent (juste un dernier point à régler avec le select paramétrable mais j'y travaille).

    en revanche une question, si la somme de la largeur totale de mes colonnes est supérieure à la largeur de ma zone de liste (barre de défilement horizontale) click X ne fonctionne plus car tout semble basé sur la taille de la zone de liste et non pas des colonnes.

    Est-ce que tu verrais une astuce pour pallier à ce dernier point stp ?

    Merci de ton aide,

    @+

    TF

  6. #6
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 768
    Points
    7 768
    Par défaut
    Bonjour Thiefer,

    Tu as raison. La position x fournie par l'événement est est relative au bord gauche de la zone de liste.
    x est par conséquent toujours compris entre 0 et la largeur de la zone de liste.
    J'ai du chercher un peu avant de trouver comment identifier le numéro de la première colonne visible la plus à gauche.
    Cela se fait en lisant la position de la barre de défilement horizontale (avec des fonctions API).
    Dans ma version d'Access (2000) le curseur de la barre de défilement horizontale va de 0 au nombre de colonnes -1

    Dans ma base exemple, j'ai modifié le formulaire "fmSelCLIENTS simple".
    J'ai ajouté les déclarations pour les fonctions API dans le module de code du formulaire,
    et modifié le code de lstResultat_MouseUp(....).
    Ajout de trois variables :
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim ctlHwnd As Long, lHzSbPos As Long, xcomp As Long
    Modification du code de recherche de colonne:
    Code vb : 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
    ' Barre de défilement horz
    ctlHwnd = GetFocus()
    lHzSbPos = GetScrollPos(ctlHwnd, SB_HORZ)
     
    ' Recherche colonne où a eu lieu le clic
    xcomp = x
    For i = 0 To UBound(colWidths)
        colRight = colRight + CLng(colWidths(i))
        ' ajoute à x la largeur des colonnes masquées suite à un défilement
        ' horizontal
        If i < lHzSbPos Then xcomp = xcomp + CLng(colWidths(i))
        ' teste si x est dans la colonne
        If xcomp < colRight Then Exit For
    Next
    If i >= Me.lstResultat.ColumnCount Then i = Me.lstResultat.ColumnCount - 1
    strCol = Me.lstResultat.Column(i, 0)
    Le principe est que je fais comme si la zone liste était aussi large que la somme de la largeur de ses colonnes.
    J'ajoute au x du clic (variable xcomp) la largeur des colonnes masquées.

    Ce que je n'arrive pas à faire par contre, c'est faire défiler la liste vers la droite après avoir changé son RowSource.

    A+

  7. #7
    Membre du Club Avatar de thiefer
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    94
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 94
    Points : 61
    Points
    61
    Par défaut
    Excellentissime !!!

    Et en plus, tout fonctionne à la perfection sous [A-03] !!!

    C'est du tout bon,

    juste une question, je n'ai pas saisi dans le code pourquoi l'affichage de lstResultat se réactualise toujours en colonne 1 plutôt que de rester sur le dernière sélection avant click pour tri.

    Merci bcp de toute ton aide, je pense qu'on devrait en faire profiter loufab pour upgrade de son outil de recherche déjà plus que bien !!

    @+

    TF

  8. #8
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 768
    Points
    7 768
    Par défaut
    Bonjour,
    juste une question, je n'ai pas saisi dans le code pourquoi l'affichage de lstResultat se réactualise toujours en colonne 1 plutôt que de rester sur le dernière sélection avant click pour tri.
    C'est le point que j'évoquai et pour lequel je n'ai pas trouvé de solution.
    Ce phénomène se produit dès que l'on change la source (requête SQL) de la liste.
    J'arrive à faire défiler la liste horizontalement avec du code placé dans des procédures événementielles de boutons,
    mais pas dans l'événement "Sur souris relâchée" de la liste.
    Là je sèche

    A+

  9. #9
    Membre du Club Avatar de thiefer
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    94
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 94
    Points : 61
    Points
    61
    Par défaut
    J'avoue ne pas pouvoir mieux faire.

    Mais comme ça, c'est déjà super donc, on se contente de ce qu'on a, parce qu'on a du bon !!!
    Je vais mettre le topic en résolu mais si jamais tu dégotes une solution, n'hésite pas à me le faire savoir ;-)

    @+ et encore mille mercis,

    TF

  10. #10
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 768
    Points
    7 768
    Par défaut
    Bonsoir,

    j'ai trouvé une solution en passant par l'événement "sur minuterie".

    J'ai ajouté une variable globale au module de code du formulaire (fmSelCLIENTS simple).
    A la fin du code de lstResultat_MouseUp(...) j'ai mis ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ' désactive la mise à jour de l'affichage si la colonne visible la plus
    ' à gauche n'est pas la 1ère colonne
    If lHzSbPos > 0 Then Application.Echo False
    Me.lstResultat.RowSource = strSQL
     
     
    If lHzSbPos > 0 Then
       lScrollPos = lHzSbPos
       Me.TimerInterval = 20
    End If
    Je mets la position de la barre de défilement avant modification de la propriété RowSource de la zone de liste dans lScrollPos.
    Puis j'arme le timer du formulaire.
    C'est le code de Form_Timer() qui remet la barre défilement à la bonne position.
    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
    Private Sub Form_Timer()
    Dim ctlHwnd As Long, lPos As Long
    ' résactive la mise à jour de l'affichage
    Application.Echo True
    ' annule le réarmement du timer
    Me.TimerInterval = 0
    ' replace la barre de défilement dans la position qu'elle avait
    ' au moment du clic
    If lScrollPos > 0 Then
       Me.lstResultat.SetFocus
       ctlHwnd = GetFocus()
       lPos = (lScrollPos * &H10000) + SB_THUMBPOSITION
       Do
          SendMessage ctlHwnd, WM_HSCROLL, ByVal lPos, ByVal 0
          DoEvents
       Loop Until GetScrollPos(ctlHwnd, SB_HORZ) = lScrollPos
    End If
     
    lScrollPos = 0
    End Sub
    Ce n'est pas la solution que j'espérais mais elle fonctionne.

    Tu peux recharger la base exemple à partir du lien posté précédemment.

    A+

  11. #11
    Membre du Club Avatar de thiefer
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    94
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 94
    Points : 61
    Points
    61
    Par défaut
    Quoi te dire...
    Ah, si !!! Merci peut-être !!!

    Bon et bien c'est parfait à présent.
    J'ai plus rien à te demander du coup.
    enfin, à ce sujet
    Parce que j'ai d'autres post avec pleins d'autres questions de newbie.
    Encore que celle là de question, c'était pas forcément du gâteau on dirait

    @+ tard

    TF

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

Discussions similaires

  1. [XL-2010] Copie de données avec tri sur doublons
    Par lilmonie dans le forum Macros et VBA Excel
    Réponses: 22
    Dernier message: 07/10/2014, 10h37
  2. Tri sur tableau excel avec recherche de champs
    Par Baltazarr dans le forum Excel
    Réponses: 8
    Dernier message: 25/10/2013, 10h39
  3. Query SQL avec tri sur une date + groupement
    Par Raphael1980 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 24/02/2009, 15h12
  4. SELECT DISTINCT avec tri sur un autre champ que celui du distinct
    Par Stephane_br dans le forum Langage SQL
    Réponses: 5
    Dernier message: 09/11/2006, 11h37
  5. requete avec tri sur date erronée
    Par olivll dans le forum Access
    Réponses: 11
    Dernier message: 20/10/2005, 15h45

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