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 :

Créer un formulaire de sélection d'une table vers une autre


Sujet :

IHM

  1. #1
    Membre du Club
    Profil pro
    autre
    Inscrit en
    Octobre 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Octobre 2005
    Messages : 135
    Points : 62
    Points
    62
    Par défaut Créer un formulaire de sélection d'une table vers une autre
    Bonjour,

    je dispose d'un état qui affiche des courbes basées sur les résultats d'analyses de différents types de PO. Ces Types de PO sont dans une table (T_Types_PO composée d'un cd_PO et d'un Lbl_PO).

    Lors de l'affichage de l'état, je voudrai qu'il n'affiche qu'une sélection de ces PO. Cette sélection serait stockée (à l'aide d'un formulaire) dans une table spécifique (T_PO_sélec) qui est intégrée à la requête source de mon état.

    Sur le principe c'est simple, mais je ne sait pas trop comment m'y prendre pour le formulaire de sélection.

    Je pense avoir à droite une zone de liste avec tous mes PO et à gauche une zone de liste avec les PO sélectionnés. Au milieu 2 boutons: le premier "fait passer" dans la sélection le PO que j'ai sélectionné à droite avec la souris, le 2ème supprime de la sélection le PO que j'ai sélectionné à gauche avec le souris.

    J'ai fait un petit schéma de ce que je souhaite.

    Pouvez-vous m'aider sur le code de ces 2 boutons ?

    Merci d'avance.

    PS: évidemment, le table T_PO_selec est vidée lorsque je ferme le formulaire (ou l'état ?) là, pas de problème, j'ai déjà la réponse :
    http://www.developpez.net/forums/d90...der-table-vba/
    Images attachées Images attachées  

  2. #2
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 169
    Points
    12 169
    Billets dans le blog
    5
    Par défaut
    bonjour,
    il y a plusieurs solutions pour faire ce que tu veux réaliser;
    En voici une...

    En fait, le principe consiste à envoyer les éléments que tu souhaites exploiter dans ton état vers une table dédiée. Ton état aura donc sa source sur cette table.
    C'est dans cette table que seront envoyés tous les éléments et pour savoir qu'ils ont été envoyés dedans, la solution consiste à ajouter dans la table source un champ de type oui/non qui prend la valeur True ou False en conséquence du fait qu'il est envoyé ou non dans la table de destination;



    Comme tu peux le voir, dans l'image ci-dessus, la table source porte le nom de ta table et la table destination porte le même nom suivi du mot Report;
    La table source possède un champ supplémentaire que j'ai nommé IsSelected et qui prend la valeur True lorsque le l'enregistrement a été envoyé dans l'autre table.



    Le formulaire est très simple à réaliser puisqu'il se compose de deux listes de type ListBox.
    La liste boxe qui contient les enregistrements de la table source est une clause SQL qui sélectionne l'ensemble des enregistrements triés par ordre croissant sur l'intitulé de l'enregistrement et dont la condition WHERE est que le champ IsSelected est égal à False.
    Sur ce formulaire, j'ai posé quatre boutons qui sont respectivement
    • sélectionner l'élément,
    • sélectionner tous les éléments,
    • désélectionner tous les éléments.
    • et enfin désélectionner l'élément


    Voilà le code qui l'accompagne :
    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    Option Compare Database
    Option Explicit
     
    Private Const SOURCE_TABLE_NAME                        As String = "T_Types_PO"
    Private Const TARGET_TABLE_NAME                        As String = "T_Types_PO_Report"
     
    Private Sub cmdSelectAll_Click()
    Dim SQL                                                As String
     
        InitButtons False, False, True, True
        SQL = "INSERT INTO " & TARGET_TABLE_NAME & " SELECT CD_PO, Lbl_PO FROM " & SOURCE_TABLE_NAME
        CurrentDb.Execute SQL, dbSeeChanges
        lboTarget.Requery
        SQL = "UPDATE " & SOURCE_TABLE_NAME & " SET IsSelected = -1"
        CurrentDb.Execute SQL, dbSeeChanges
        lboSource.Requery
    End Sub
     
    Private Sub cmdSelectItem_Click()
    Dim SQL                                                As String
    Dim lngItemSelected                                    As Long
    Dim strItemSelected                                    As String
     
        InitButtons True, True, True, True
        If Not IsNull(Me!lboSource) Then
            lngItemSelected = Me!lboSource
            strItemSelected = Me!lboSource.Column(1)
     
            SQL = "INSERT INTO " & TARGET_TABLE_NAME & " (CD_PO, Lbl_PO) VALUES (" & lngItemSelected & ", '" & strItemSelected & "')"
            CurrentDb.Execute SQL, dbSeeChanges
            lboTarget.Requery
            SQL = "UPDATE " & SOURCE_TABLE_NAME & " SET IsSelected = -1 WHERE CD_PO = " & lngItemSelected
            CurrentDb.Execute SQL, dbSeeChanges
            lboSource.Requery
        End If
    End Sub
     
    Private Sub cmdUnselectAll_Click()
    Dim SQL                                                As String
     
        InitButtons True, True, False, False
        DeleteDataBefore
        SQL = "UPDATE " & SOURCE_TABLE_NAME & " SET IsSelected = 0"
        CurrentDb.Execute SQL, dbSeeChanges
        lboSource.Requery
    End Sub
     
    Private Sub cmdUnselectItem_Click()
    Dim SQL                                                As String
    Dim lngItemSelected                                    As Long
     
        InitButtons True, True, True, True
        If Not IsNull(Me!lboTarget) Then
            lngItemSelected = Me!lboTarget
            SQL = "DELETE * FROM " & TARGET_TABLE_NAME & " WHERE CD_PO = " & lngItemSelected
            CurrentDb.Execute SQL, dbSeeChanges
            lboTarget.Requery
            SQL = "UPDATE " & SOURCE_TABLE_NAME & " SET IsSelected = 0 WHERE CD_PO = " & lngItemSelected
            CurrentDb.Execute SQL, dbSeeChanges
            lboSource.Requery
        End If
    End Sub
     
    Private Sub Form_Load()
        DeleteDataBefore
        InitButtons False, False, False, False
    End Sub
     
    Private Sub DeleteDataBefore()
    Dim SQL                                                As String
        CurrentDb.Execute "DELETE * FROM " & TARGET_TABLE_NAME, dbSeeChanges
        lboTarget.Requery
        SQL = "UPDATE " & SOURCE_TABLE_NAME & " SET IsSelected = 0"
        CurrentDb.Execute SQL, dbSeeChanges
        lboSource.Requery
    End Sub
     
    Private Sub InitButtons(ByVal SelectItem As Boolean, ByVal SelectAll As Boolean, ByVal UnselectItem As Boolean, ByVal UnselectAll As Boolean)
        lboTarget.SetFocus
        cmdSelectItem.Enabled = SelectItem
        cmdSelectAll.Enabled = SelectAll
        cmdUnselectItem.Enabled = UnselectItem
        cmdUnselectAll.Enabled = UnselectAll
    End Sub
     
    Private Sub lboSource_AfterUpdate()
        InitButtons True, True, False, False
    End Sub
    Bien entendu, il y a du peaufinage à mettre en oeuvre pour finaliser ce formulaire et notamment des gestions d'erreur pour gérer les NULL et éventuellement d'inclure les événements Double_Click sur les zones de liste de manière à court-circuiter les événements des boutons, propriété événementielle commune dans ce type de contrôle;

    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

  3. #3
    Membre du Club
    Profil pro
    autre
    Inscrit en
    Octobre 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Octobre 2005
    Messages : 135
    Points : 62
    Points
    62
    Par défaut
    Bonjour et merci Argy

    C'est effectivement tout à fait ce que je recherche. J'ai fait l'essai de ton code et tout fonctionne bien SAUF la commande pour une seule sélection. (cmdSelectItem)

    Je dois dire très humblement que je ne suis pas très rapide dans le déchiffrage des codes (et que lorsqu'ils sont commentés c'est mieux pour moi !) mais j'ai cru comprendre que la commande vérifie que la liste source n'est pas "Null"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     If Not IsNull(Me!lboSource) Then
    Or au débogage il s'avère que cette liste apparait comme "Null", pourtant il y a bien 10 enregistrements dont au moins un est sélectionné avant que je ne clique sur le bouton.

    Quel est le problème ?

  4. #4
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 169
    Points
    12 169
    Billets dans le blog
    5
    Par défaut
    Je ne commente jamais les codes sauf sur ordre...

    J'ai la prétention de dire qu'un bloc code comme celui-ci presque correctement écrit avec
    des noms de contrôles bien pensés et des variables dûment nommées
    permet une lecture aisée de ce dernier, sauf biensûr pour le néophyte.


    Non, ce bloc If vérifie si tu as cliqué sur un élément...
    C'est là qu'il faut poser une gestion d'erreur en amont pour éviter de planter le code en mode débogage...

    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

  5. #5
    Membre du Club
    Profil pro
    autre
    Inscrit en
    Octobre 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Octobre 2005
    Messages : 135
    Points : 62
    Points
    62
    Par défaut
    Ne prend pas mal ma petite observation sur les commentaires je pense faire encore un peu partie des néophytes que tu cites

    Bon, je viens de m'apercevoir que mon problème est résolu lorsque je change le paramétrage de mes ListBox: Sélection multiple : Aucun.

    J'ai pas trop compris, mais puisque ça marche, ça va rester comme ça pour l'instant.

    Merci beaucoup

  6. #6
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 169
    Points
    12 169
    Billets dans le blog
    5
    Par défaut
    Oui, je me suis douté car le code n'est pas prévu pour une sélection multiple.
    Ce serait simple à mettre en oeuvre par le biais de la propriété Selected mais un peu plus long à écrire avec davantage de vérifications...

    Argy

    P.S. Je ne le prends pas mal, voyons, je te donne mon . de vue...
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

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

Discussions similaires

  1. copier une table d'une BDD dans une table d'une autre BDD
    Par faniette dans le forum C++Builder
    Réponses: 2
    Dernier message: 15/05/2013, 10h17
  2. [VB.Net] Comment copier une DataRow d'une table vers une autre ?
    Par YLF dans le forum Accès aux données
    Réponses: 7
    Dernier message: 05/09/2012, 23h23
  3. Réponses: 1
    Dernier message: 19/10/2011, 12h13
  4. Copier les enregistrements d'une table vers une table d'une autre DB
    Par karinette21 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 18/11/2008, 21h50
  5. [VB.NET] Copie d'une table d'une DB vers une autre
    Par SergeF dans le forum Windows Forms
    Réponses: 9
    Dernier message: 20/11/2004, 09h54

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