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 :

Tri dans un formulaire en mode tableau


Sujet :

IHM

  1. #1
    Membre à l'essai
    Inscrit en
    Août 2007
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 17
    Points : 11
    Points
    11
    Par défaut Tri dans un formulaire en mode tableau
    Bonjour,
    après quelques recherches, je n'ai pas trouvé ce que cherche, alors voilà mon problème.

    table: tbl_geo
    champs: ID, Pays, Region, District, Ville

    depuis cette table j'ai créer un formulaire en mode tableau, ce qui m'affiche
    le nom des champs dans l'entête et les enregistrements dans détail.
    Ce que je veux faire, c'est d'utiliser le nom des champs Pays, Region, District, Ville comme bouton pour trier les enregistrements sur ce formulaire comme ceci:

    Pays: tri croissant par Pays, Region, District, ville
    Region: tri croissant par Region, District, Ville, Pays
    District: tri croissant par District, Ville, Pays, Region
    Ville: tri croissant par Ville, pays, Region, District

    Voilà, j'espère avoir été assez clair dans mes explications.
    Alors si quelqu'un a une idée ou un lien pour m'aider
    je dis merci d'avance

  2. #2
    Membre expert
    Avatar de mout1234
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 210
    Points : 3 228
    Points
    3 228
    Par défaut
    Bonsoir,

    Il y a plusieurs approches envisageables.
    Une solution simple consiste à jouer avec la propriété Order By de ton formulaire.

    Avec un code du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Me.OrderBy = "Pays, Region, District, ville"
    Me.OrderByOn = True
    à mettre dans l'évènement Click de chaque étiquette de l'entête (en adaptant la clause de tri bien sur).

    Pour ma part, je ferai plutôt une procédure dans le module du formulaire, centralisant la gestion de ce tri, que j'appellerai directement depuis le clic sur chaque étiquette... mais cela n'apporte qu'un peu de clarté de code et de facilité de maintenance.


    Bon courage

  3. #3
    Membre à l'essai
    Inscrit en
    Août 2007
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    Salut mout1234,

    par procédure, tu entends par là faire un
    Select Case sur mes différents choix
    avec une variable envoyée sur un clic depuis mon étiquette ?

    Si oui, pourrais-tu m'aider pour la syntaxe.
    Surtout pour envoyer la variable.

    Autrement ta première solution fonctionne correctement, super
    merci

  4. #4
    Membre expert
    Avatar de mout1234
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 210
    Points : 3 228
    Points
    3 228
    Par défaut
    Citation Envoyé par Grangy Voir le message
    Salut mout1234,

    par procédure, tu entends par là faire un
    Select Case sur mes différents choix
    avec une variable envoyée sur un clic depuis mon étiquette ?

    Si oui, pourrais-tu m'aider pour la syntaxe.
    Surtout pour envoyer la variable.

    Autrement ta première solution fonctionne correctement, super
    merci
    ... voila un bout de code que j'ai repiqué d'un code que j'avais fait pour un client, et simplifié pour ton utilisation: En plus du tri, je gère un affichage différent des entetes de colonnes, afin de repérer le tri actif.
    • Sur chaque étiquette d'entete de colonnes, tu tapes dans la propriété Remarque le texte ColumnHeader
    • tu places dans la propriété clic (là où tu as actuellement [event procedure]
      =ap_SetOrder("NomduChamp")
    • chaque etiquette doit etre nommée lbl+NomduChamp. Par exemple lblPays.


    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
    Sub ap_SetOrder(sFieldName As String)
    'apply an order by an selected field
     
    On Error Resume Next
        Dim oCtl As Access.Control
     
     
        'RAZ Prec tri
        For Each oCtl In Me.Controls
            If InStr(1, oCtl.Tag, "ColumnHeader") Then
                oCtl.FontItalic = False
                oCtl.BackColor = 12632256
            End If
        Next oCtl
     
        Select Case sFieldName
            Case "Pays"
                Me.OrderBy = "Pays,..."
            Case "Ville"
                Me.OrderBy = "Ville..."
        End Select
        Me.OrderByOn = True
     
        With Me("lbl" & sFieldName)
            .FontItalic = True
            .BackColor = 11645361
        End With
     
     
    End Sub
    Je n'ai pas retesté le code aprés simplification... à toi de tester et corriger si besoin est

    Bon tri

  5. #5
    Membre à l'essai
    Inscrit en
    Août 2007
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par mout1234 Voir le message
    ... voila un bout de code que j'ai repiqué d'un code que j'avais fait pour un client, et simplifié pour ton utilisation: En plus du tri, je gère un affichage différent des entetes de colonnes, afin de repérer le tri actif.
    • Sur chaque étiquette d'entete de colonnes, tu tapes dans la propriété Remarque le texte ColumnHeader
    • tu places dans la propriété clic (là où tu as actuellement [event procedure]
      =ap_SetOrder("NomduChamp")
    • chaque etiquette doit etre nommée lbl+NomduChamp. Par exemple lblPays.


    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
    Sub ap_SetOrder(sFieldName As String)
    'apply an order by an selected field
     
    On Error Resume Next
        Dim oCtl As Access.Control
     
     
        'RAZ Prec tri
        For Each oCtl In Me.Controls
            If InStr(1, oCtl.Tag, "ColumnHeader") Then
                oCtl.FontItalic = False
                oCtl.BackColor = 12632256
            End If
        Next oCtl
     
        Select Case sFieldName
            Case "Pays"
                Me.OrderBy = "Pays,..."
            Case "Ville"
                Me.OrderBy = "Ville..."
        End Select
        Me.OrderByOn = True
     
        With Me("lbl" & sFieldName)
            .FontItalic = True
            .BackColor = 11645361
        End With
     
     
    End Sub
    Je n'ai pas retesté le code aprés simplification... à toi de tester et corriger si besoin est

    Bon tri
    Salut
    j'ai essayé ta deuxième solution, mais j'ai problème, lorsque je clic sur l'étiquette, le message d'erreur suivant apparait:
    L'expression sur clic entrée comme paramètre de la propriété de type d'évenement est à l'origine d'une erreur. L'expression entrée comporte un nom de fonction que Microsoft office Access ne peut trouver.

    Voilà, si tu peux m'orienter merci.
    Je suis sous Access 2007.
    a+

  6. #6
    Membre expert
    Avatar de mout1234
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 210
    Points : 3 228
    Points
    3 228
    Par défaut
    Bonsoir,


    Vérifies les points suivants:
    - ton code passe à la compilation.
    - tu as bien orthographié le nom de la procédure dans la propriété clic, en précédant d'un = comme indiqué.

  7. #7
    Membre à l'essai
    Inscrit en
    Août 2007
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par mout1234 Voir le message
    Bonsoir,


    Vérifies les points suivants:
    - ton code passe à la compilation.
    - tu as bien orthographié le nom de la procédure dans la propriété clic, en précédant d'un = comme indiqué.
    Oui pour la compilation et oui pour la procédure
    =ap_SetOrder([pays_region])

  8. #8
    Membre expert
    Avatar de mout1234
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 210
    Points : 3 228
    Points
    3 228
    Par défaut
    Citation Envoyé par Grangy Voir le message
    Oui pour la compilation et oui pour la procédure
    =ap_SetOrder([pays_region])
    Tout d'abord, tu ne dois pas fournir une référence au champ mais le nom du champ sous forme de texte.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =ap_SetOrder("pays_region")

    Si cela ne suffit pas... fais une exécution pas à pas....


    Bon courage

  9. #9
    Membre à l'essai
    Inscrit en
    Août 2007
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par mout1234 Voir le message
    Tout d'abord, tu ne dois pas fournir une référence au champ mais le nom du champ sous forme de texte.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =ap_SetOrder("pays_region")

    Si cela ne suffit pas... fais une exécution pas à pas....


    Bon courage
    Salut, j'ai mis en guillemet le nom du champs et toujours le même problème
    voici mon code avec mes vrais noms de champs.
    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
     
     
    Sub ap_SetOrder(sFieldName As String)
    'apply an order by an selected field
     
    On Error Resume Next
        Dim oCtl As Access.Control
     
     
        'RAZ Prec tri
        For Each oCtl In Me.Controls
            If InStr(1, oCtl.Tag, "ColumnHeader") Then
                oCtl.FontItalic = False
                oCtl.BackColor = 12632256
            End If
        Next oCtl
     
        Select Case sFieldName
            Case "pays_region"
                Me.OrderBy = "pays_region, region_region, district_region"
            Case "region_region"
                Me.OrderBy = "region_region, district_region, pays_region "
            Case "district_region"
                Me.OrderBy = "district_region, pays_region, region_region "
        End Select
        Me.OrderByOn = True
     
        With Me("lbl" & sFieldName)
            .FontItalic = True
            .BackColor = 11645361
        End With
     
     
    End Sub
    par contre, je ne sais pas si c'est un problème, mais tous les Me
    dans mon code sur mon editor reste en noir et ne deviennent pas bleu
    comme dans le code si dessus.
    me manque t'il quelque chose dans ma configuration???

    A+ bye

  10. #10
    Membre expert
    Avatar de mout1234
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 210
    Points : 3 228
    Points
    3 228
    Par défaut
    Autant pour moi, il faut faire une fonction et non une procédure.



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    Function ap_SetOrder(sFieldName As String)
    ...
     
    End Function
    Citation Envoyé par Grangy Voir le message
    par contre, je ne sais pas si c'est un problème, mais tous les Me
    dans mon code sur mon editor reste en noir et ne deviennent pas bleu
    comme dans le code si dessus.
    me manque t'il quelque chose dans ma configuration???
    Pas de souci de ce côté .. c'est normal.

  11. #11
    Membre à l'essai
    Inscrit en
    Août 2007
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par mout1234 Voir le message
    Autant pour moi, il faut faire une fonction et non une procédure.



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    Function ap_SetOrder(sFieldName As String)
    ...
     
    End Function

    Pas de souci de ce côté .. c'est normal.
    Yes cette fois c'est ok, un grand merci

    J'ai encore un peu de peine avec Access et VBA dans leur logique et leur syntaxe, mais ça va venir.
    J'ai fait un peu de php et mySql et là il y a pas mal de choses qui changent.
    On va y arrivé quand même.
    Encore merci et à bientôt

  12. #12
    Membre expert
    Avatar de mout1234
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 210
    Points : 3 228
    Points
    3 228
    Par défaut
    De rien

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 24/04/2014, 14h35
  2. Réponses: 6
    Dernier message: 18/10/2012, 10h30
  3. Réponses: 5
    Dernier message: 22/01/2007, 13h40
  4. tri dans un formulaire
    Par tomas dans le forum IHM
    Réponses: 2
    Dernier message: 10/01/2007, 13h27
  5. Réponses: 1
    Dernier message: 08/12/2006, 16h00

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