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

VB 6 et antérieur Discussion :

affichage listbox vb 6


Sujet :

VB 6 et antérieur

  1. #1
    Membre à l'essai
    Inscrit en
    Novembre 2008
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 38
    Points : 12
    Points
    12
    Par défaut affichage listbox vb 6
    Bonjour,
    j'ai un gros souci au niveau de mon code. Il ne veut pas afficher correctement mes données.
    En effet, je crée pour moi personnellement une vidéothèque. Mon programme, j'essaye de le faire le plus simple possible mais là je patauge car en plus pour courronner le tout je débute donc je galère pas mal.

    Voilà, j'ai créé une feuille me permettant de sélectionner un emprunteur. Le principe de la feuille est celui-ci :
    -une listbox fonction permet de regrouper toutes les catégories socio-professionnelle
    -une listbox emprunteur permet d'afficher en fonction de la listbox fonction les membres issus d'une catégorie socio-professionnelle.

    Un exemple : si je décide de rechercher (dans la listbox fonction ) une personne exerçant la profession de retraitée, la listbox emprunteur m'affichera tous les noms inscrit en tant que retraité et par ordre alphabétique.

    Ensuite, ma feuille se compose d'une frame emprunteur qui permet de rappeller les infos d'un membre lorsque l'on choisit un type de fonction.

    Après, c'est la que je rame grave. J'ai à nouveau deux frames : une frame sélection film et une frame sélection série

    La frame sélection film comporte deux listbox : une permettant d'afficher tous les films figurant dans la bdd (lst_film), la seconde permet d'afficher les films déjà empruntés (lst_filmEmpruntés). Il y a deux boutons commandes : un pour rajouter des films dans la deuxième listbox (autrement dit, si un membre veut un film il sera affiché dans les films empruntés). Le deuxième bouton permet au contraire de retirer des films empruntés pour les remettre dans la listbox film (c'est-à-dire lorsqu'un membre ne veut plus du film on le remet dans la listbox film)

    La frame sélection séries fonctionne exactement pareil

    Malheureusement, je n'arrive pas à afficher les films dispo de ma bdd dans la listbox films. Et lorsque, je sélectionne un membre selon sa catégorie socio-pro. il ne m'affiche que le n°de référence du film inscrit dans la bdd et non le titre ( ex: si Million dollar baby possède l'identifiant n°1 et bien il m'affiche ceci et non le titre)

    j'espère avoir donné un max de renseignements sur ce que je voulais faire et désolé si cela peut paraitre redondant.

    Voici, mon code concernant cette feuille, si quelqu'un pouvait me dire le pourquoi de ces erreurs cela serait super.

    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
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    Option Explicit
    Dim num As String
     
    Public Sub Liste_Fonction()
    'début
        'remplissage de la liste des fonctions
        Lst_Fonction.Clear
        sql = "SELECT FONCTION_LIBELLE FROM FONCTION"
        rst_fonction.Open sql, cnx
        If Not (rst_fonction.EOF) Then
            Do
                Lst_Fonction.AddItem rst_fonction.Fields("FONCTION_LIBELLE")
                rst_fonction.MoveNext
            Loop Until rst_fonction.EOF
        End If
        rst_fonction.Close
    End Sub
     
    Public Sub Liste_Emprunteur()
    'début
        'remplissage de la liste des noms Emprunteurs
        Lst_Emprunteur.Clear
        sql = "SELECT EMP_NOM FROM EMPRUNTEUR, FONCTION WHERE EMP_FONCTION = FONCTION_NUM"
        sql = sql & " AND FONCTION_LIBELLE = '" & Lst_Fonction.Text & "'"
     
        rst_emprunteur.Open sql, cnx
     
        If Not (rst_emprunteur.EOF) Then
            Do
                Lst_Emprunteur.AddItem rst_emprunteur.Fields("EMP_NOM")
                rst_emprunteur.MoveNext
            Loop Until rst_emprunteur.EOF
        Else
        End If
        rst_emprunteur.Close
    End Sub
     
    Public Sub liste_films()
    'début
        'remplissage de la liste des films empruntés par une personne
        Lst_Film.Clear
        sql = "SELECT FILMS_TITRE FROM FILMS"
        rst_films.Open sql, cnx
        If Not (rst_films.EOF) Then
            Do
                Lst_Film.AddItem rst_films.Fields("FILMS_TITRE")
                rst_films.MoveNext
            Loop Until rst_films.EOF
        End If
        rst_films.Close
    End Sub
     
    Public Sub liste_series()
    'début
        'remplissage de la liste des séries empruntées par une personne
        Lst_Serie.Clear
        sql = "SELECT SERIES_NOM FROM SERIES"
        rst_series.Open sql, cnx
        If Not (rst_series.EOF) Then
            Do
                Lst_Serie.AddItem rst_series.Fields("SERIES_NOM")
                rst_series.MoveNext
            Loop Until rst_series.EOF
        End If
        rst_series.Close
    End Sub
    Private Sub Cmd_Attribuer_Click()
    MsgBox "Les dvd ont bien été attribués"
    End Sub
     
    Private Sub Cmd_Fermer_Click()
        Unload Me
    End Sub
     
    Private Sub Cmd_RetirerFilm_click()
    'début
        'rechercher le code du dvd
        sql = "SELECT FILMS_NUM FROM FILMS WHERE FILMS_TITRE = '" & Lst_FilmEmprunté & "'"
        rst_films.Open sql, cnx
        If Not rst_films.EOF Then
            num = rst_films.Fields("FILMS_NUM")
     
            'suppression du dvd dans la table utiliserdvd
            sql = "DELETE FROM UTILISERDVD"
            sql = sql & " WHERE UTI_FILMS = '" & num & "'"
            sql = sql & " AND UTI_EMPRUNTEUR " & Val(Lbl_NumEmprunteur.Caption)
            cnx.Execute sql
     
            'enlever à présent le dvd de la liste
            i = Lst_FilmEmprunté.ListIndex
            Lst_FilmEmprunté.RemoveItem (i)
        End If
        rst_films.Close
    End Sub
     
    Private Sub Cmd_AjouterFilm_click()
    'début
        If Lst_Film.Text <> "" Then
        'vérifier d'abord si le dvd existe bien
        verifDVD
     
            If verifok Then
                'insérer le dvd dans la liste films_emprunté
                Lst_FilmEmprunté.AddItem Lst_Film.Text
                'rechercher ensuite le code du dvd
                sql = " SELECT FILMS_NUM FROM FILMS WHERE FILMS_TITRE = '" & Lst_Film & "' "
                rst_films.Open sql, cnx
                If Not rst_films.EOF Then
                    num = rst_films.Fields("FILMS_NUM")
                    'enregistrer à présent le dvd dans la bdd (son emprunt)
                    sql = " INSERT INTO UTILISERDVD (UTI_FILMS, UTI_EMPRUNTEUR)"
                    sql = sql & " VALUES ( '" & num & "', " & Val(Lbl_NumEmprunteur) & ")"
                    cnx.Execute sql
                End If
                rst_films.Close
            End If
        End If
    End Sub
     
    'Private Sub verifDVD()
    ''debut
    '    verifok = True
    '    i = 0
    '    If Lst_FilmEmprunté.ListCount > 0 Then
    '        Do
    '            If Lst_FilmEmprunté.List(i) = Lst_Film.Text Then
    '                verifok = False
    '            End If
    '            i = i + 1
    '        Loop Until (i = Lst_FilmEmprunté.ListCount) Or (verifok = False)
    '    End If
    'End Sub
     
    Private Sub verifDVD()
    ' debut
        sql = "SELECT * FROM UTILISERDVD "
        sql = sql + " WHERE UTI_FILMS = '" & num & "'"
        sql = sql + " AND UTI_EMPRUNTEUR = " & Val(Lbl_NumEmprunteur)
        rst_films.Open sql, cnx
        If rst_films.EOF Then
            verifok = True
        Else
            verifok = False
        End If
        rst_films.Close
    End Sub
     
    Private Sub Form_Load()
    'début
        'connexion avec la bdd pour alimenter les listbox
        Connec
         ' alimenter les labels de l'emprunteur dans la frame emprunteur
         If NomFonction <> "" Then
            Lbl_NumEmprunteur.Caption = NumEmp
            Lbl_NomEmprunteur.Caption = NomEmp
            Lbl_PrenomEmprunteur.Caption = PrenomEmp
     
            ' alimenter la fonction
            Lbl_FonctionEmprunteur.Caption = NomFonction
            Lst_Fonction.AddItem NomFonction
            Lst_Fonction.Text = NomFonction
     
            ' alimenter les films déjà utilisés
            Liste_FilmEmpruntés
     
            'alimenter les séries déjà utilisées
            Liste_SérieEmpruntées
     
        Else
            Liste_Fonction
        End If
     
        'remplir la liste des dvd empruntés
    '    Liste_DvdEmprunteur
     
        'remplir la liste fonction
        Liste_Fonction
    End Sub
     
    Private Sub Lst_Emprunteur_Click()
    'début
        'd'abord alimenter la frame emprunteur
         ' alimenter la frame de l'emprunteur
         sql = "SELECT * FROM EMPRUNTEUR WHERE EMP_NOM = '" & Lst_Emprunteur.Text & "'"
         rst_emprunteur.Open sql, cnx
     
         If Not (rst_emprunteur.EOF) Then
            Lbl_NumEmprunteur.Caption = rst_emprunteur.Fields("Emp_Num")
            Lbl_NomEmprunteur.Caption = rst_emprunteur.Fields("Emp_Nom")
            Lbl_PrenomEmprunteur.Caption = rst_emprunteur.Fields("Emp_Prenom")
            Lbl_FonctionEmprunteur.Caption = Lst_Fonction.Text
         End If
            rst_emprunteur.Close
     
            ' afficher tous les films empruntés
            Liste_FilmEmpruntés
     
            ' afficher les séries empruntées
            Liste_SérieEmpruntées
     
            ' afficher tous les dvd empruntés
            'liste_DVDEmprunté
     
    End Sub
    Private Sub Lst_Fonction_Click()
    ' debut
        ' alimenter la liste emprunteurs
         Liste_Emprunteur
     
    End Sub
     
    Private Sub Liste_FilmEmpruntés()
    ' debut
            Lst_FilmEmprunté.Clear
            sql = " SELECT UTI_FILMS FROM UTILISERDVD"
            sql = sql & " WHERE UTI_EMPRUNTEUR = " & Val(Lbl_NumEmprunteur.Caption)
            rst_films.Open sql, cnx
            If Not (rst_films.EOF) Then
                Do
                    Lst_FilmEmprunté.AddItem rst_films.Fields("UTI_FILMS")
                    rst_films.MoveNext
                Loop Until rst_films.EOF
            End If
            rst_films.Close
    End Sub
     
    Private Sub Liste_SérieEmpruntées()
    'début
            Lst_SérieEmpruntée.Clear
            sql = "SELECT UTI_SERIES FROM UTILISERDVD"
            sql = sql & " WHERE UTI_EMPRUNTEUR = " & Val(Lbl_NumEmprunteur.Caption)
            rst_series.Open sql, cnx
            If Not (rst_series.EOF) Then
                Do
                    Lst_SérieEmpruntée.AddItem rst_series.Fields("UTI_SERIES")
                    rst_series.MoveNext
                Loop Until rst_series.EOF
            End If
            rst_series.Close
    End Sub

  2. #2
    Membre éclairé
    Inscrit en
    Décembre 2007
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 512
    Points : 671
    Points
    671
    Par défaut
    Bonjour Kitty,

    Il y a plusieurs demandes dans ta question, alors une chose à la fois.

    1.D'abord, il y a redondance dans ton code,exemple:
    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
     
    Public Sub liste_films()
    'début
        'remplissage de la liste des films empruntés par une personne
        Lst_Film.Clear
        sql = "SELECT FILMS_TITRE FROM FILMS"
        rst_films.Open sql, cnx
        If Not (rst_films.EOF) Then
            Do
                Lst_Film.AddItem rst_films.Fields("FILMS_TITRE")
                rst_films.MoveNext
            Loop Until rst_films.EOF
        End If
        rst_films.Close
    End Sub
    Tu emploies un 'if non nécessaire avec deux fois un 'EOF : tu pourrais faire ceci
    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
     
    Public Sub liste_films()
    'début
        'remplissage de la liste des films empruntés par une personne
        Lst_Film.Clear
        'sql = "SELECT FILMS_TITRE FROM FILMS"
        sql = "FILMS" 
       'le nom de la table est suffisant,mais l'autre solution fonctionne
        rst_films.Open sql, cnx
        Do While Not (rst_films.EOF)
                Lst_Film.AddItem rst_films.Fields("FILMS_TITRE")
                rst_films.MoveNext
        Loop
        rst_films.Close
    End Sub
    J'ai testé ton code sur un BDD (en changeant bien sûr le nom de la Table , du Champs et de la listbox).
    Ton code fonctionne bien et affiche tous les champs convenablement, donc l'erreur ne provient pas de la.
    2.Est-ce que la BDD est bien construite?
    3.Ton code n'est certainement pas complet car je ne vois nulle part la variable 'sql définie.
    4.Cherche d'abord à remplir correctement ta 'Lst_films puis le reste on peut voir après...

    A+

  3. #3
    Membre à l'essai
    Inscrit en
    Novembre 2008
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 38
    Points : 12
    Points
    12
    Par défaut
    Bonjour, ok je teste et je reposte.
    merci encore

  4. #4
    Membre à l'essai
    Inscrit en
    Novembre 2008
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 38
    Points : 12
    Points
    12
    Par défaut
    bonjour,

    j'ai essayé ton code est toujours pareil. Ensuite, pour ce qui est de la variable sql, je l'ai déclaré en public dans un module afin d'alléger un peu le programme.
    Enfin, j'ai refait ma bdd cet après-midi mais rien à faire, j'ai toujours les mêmes problèmes.

  5. #5
    Membre éclairé
    Inscrit en
    Décembre 2007
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 512
    Points : 671
    Points
    671
    Par défaut
    Bonjour Kitty,

    As-tu vérifier ta sub
    C'est peut-être là-bas le problème?
    A+

  6. #6
    Membre à l'essai
    Inscrit en
    Novembre 2008
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 38
    Points : 12
    Points
    12
    Par défaut
    coucou,
    je ne comprend pas trop ta réponse iclic. Le connec je l'ai bien mis dans le form load. Si je l'enlève de là, je ne pourrais pas exécuter ma page.

  7. #7
    Membre éclairé
    Inscrit en
    Décembre 2007
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 512
    Points : 671
    Points
    671
    Par défaut
    Bonjour Kitty,

    Non il ne faut pas l'enlever,ce que je voulais dire c'est voir
    le code du Connec

    Amitiés

  8. #8
    Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 077
    Points : 17 177
    Points
    17 177
    Par défaut
    Citation Envoyé par *kitty* Voir le message
    coucou,
    je ne comprend pas trop ta réponse iclic. Le connec je l'ai bien mis dans le form load. Si je l'enlève de là, je ne pourrais pas exécuter ma page.
    Dans le code que tu as mis dans ton premier message, il n'y a pas la Sub Connec, donc on se demande si ce n'est pas la qu'il y a ton probléme, de plus on ne voit aucune declaration des variables, mis a part Dim num As String dans le Form.
    Je pense que tu devrais nous mettre le code de ton module, on y verrait un peu plus clair (peut être )

    Motif de l'edit:
    iclic (salut), tu as été plus rapide que moi, je laisse mon message, on devrait avoir plus de chance d'optenir toutes les informations utiles.
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Balises[C]...[/C] code intégré dans une phrase.
    Balises[C=NomDuLangage]...[/C] code intégré dans une phrase quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    ......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    👉 → → Ma page perso sur DVP ← ← 👈

  9. #9
    Membre à l'essai
    Inscrit en
    Novembre 2008
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 38
    Points : 12
    Points
    12
    Par défaut
    bonjour,
    ok désolé mais je débute alors c'est dur dur
    Voici, le code de mon module variables si cela peut aider :

    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
    Public modvar As String
    Public modvar1 As String
    Public modvar2 As String
    Public objet As Integer
    Public sql As String
    Public doublon As Boolean
    Public verifok As Boolean
    Public Nomtable  As String
    Public msg As String
    Public ligne As Integer
    Public i As Integer
    Public modif As Integer
    Public supp As Boolean
     
    ' définition des recordset
     
    Public rst_responsable As New ADODB.Recordset
    Public rst_emprunteur As New ADODB.Recordset
    Public rst_rechercheDVD As New ADODB.Recordset
    Public rst_grille As New ADODB.Recordset
    Public rst_doublon As New ADODB.Recordset
    Public rst_fonction As New ADODB.Recordset
    Public rst_genre As New ADODB.Recordset
    Public rst_films As New ADODB.Recordset
    Public rst_series As New ADODB.Recordset
    Public rst_debutLettre As New ADODB.Recordset
    Public rst_realisateurs As New ADODB.Recordset
    Public rst_nom As New ADODB.Recordset
     
     
     
    Public droit As Integer
    Public ResponsableConnec As String
    Public ResponsableNumConnec As Integer
     
    Public NomEmp As String
    Public NomFonction As String
    Public PrenomEmp As String
    Public NumEmp As String
     
    Public TitreFilm As String
    Public GenreFilm As String
    Public NumeroFilm As String

  10. #10
    Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 077
    Points : 17 177
    Points
    17 177
    Par défaut
    Un truc pratique, voir indispensable pour debuguer, pour vérifier le contenu de ta variable Sql, après chaque construction, fais un MsgBox Sql (que tu rems plus tard) ou un Debug.Print Sql (que tu n’as pas besoin de remer, car Debug.Print est ignoré lors de la compilation de l’exécutable), cela permet de voir (Ctrl+G dans l'editeur VB6) si la condition d'ouverture du recordset correspond bien à ton choix.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Public Sub Liste_Emprunteur()
    'début
        'remplissage de la liste des noms Emprunteurs
        Lst_Emprunteur.Clear
    ' ***************** cette ligne ************************************************    
    sql = "SELECT EMP_NOM FROM EMPRUNTEUR, FONCTION WHERE EMP_FONCTION = FONCTION_NUM"
    '......................................................
    '.......................................................
    End Sub
    Cette ligne va demander le renvoi, par ton recordset, de l’enregistrement d’un emprunteur ayant pour fonction égal à (litérallement) FONCTION_NUM, je pense que ce n’est pas cela que tu souhaites.
    Si FONCTION_NUM est une variable (que je n'ai pas vue declarée dans le code), que tu as initialisé quelque part (pas vue non plus) et quelle a par exemple été remplis avec le chiffre 5, la requette devient:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        Sql = "SELECT EMP_NOM FROM EMPRUNTEUR, FONCTION WHERE" _
            & " EMP_FONCTION = " & FONCTION_NUM _
            & " AND FONCTION_LIBELLE = '" & Lst_Fonction.Text & "'"
    Debug.Print Sql
    'resultat dans la fenêtre execution de l'editeur VB6
    'SELECT EMP_NOM FROM EMPRUNTEUR, FONCTION WHERE EMP_FONCTION = 5 AND FONCTION_LIBELLE = 'retaité'
    Citation Envoyé par *kitty* Voir le message
    Malheureusement, je n'arrive pas à afficher les films dispo de ma bdd dans la listbox films. Et lorsque, je sélectionne un membre selon sa catégorie socio-pro. il ne m'affiche que le n°de référence du film inscrit dans la bdd et non le titre
    Par contre, moi perso, je n'arrive pas a trouver à quel moment et par quelle ligne de code tu enclanches la demande de remplissage de ta listbox, en fait dans ton code, à aucun moment tu appelles la sub liste_films
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Balises[C]...[/C] code intégré dans une phrase.
    Balises[C=NomDuLangage]...[/C] code intégré dans une phrase quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    ......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    👉 → → Ma page perso sur DVP ← ← 👈

  11. #11
    Membre éclairé
    Inscrit en
    Décembre 2007
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 512
    Points : 671
    Points
    671
    Par défaut
    Bonsoir,
    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
     
    Private Sub Form_Load()
    'début
        'connexion avec la bdd pour alimenter les listbox
        Connec
         ' alimenter les labels de l'emprunteur dans la frame emprunteur
         If NomFonction <> "" Then
           ...       
              Else
            Liste_Fonction
        End If
     
        'remplir la liste des dvd empruntés
    '    Liste_DvdEmprunteur
     
        'remplir la liste fonction
        Liste_Fonction
    End Sub
    1.Je ne vois toujours pas le code de ta sub Connec
    2.Tu as déclaré ta variable NomFonction public, mais je ne vois nulle part dans ton code où tu l'initialises, pour moi elle esr égale à "" donc vide.
    Alors dans ta sub de départ( Private Sub Form_Load()) ,tu vas chaque fois au else donc tu ne passes jamais par les autres 'sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
              else
           Liste_Fonction
    ...
    Et puis après de nouveau à Liste_Fonction
    Pourquoi passer deux fois dans la sub Liste_Fonction?
    Après le End sub,la feuille (form) s'affiche sur l'écran.
    3.Question: A ce moment est-ce que Lst_Fonction (ta listbox)
    est bien remplie et correcte.

    4.Suis les conseils de Progelect ( que je salue au passage) pour débugger.
    Moi je mets aussi des 'stop et en pointant avec la souris on peut voir la valeur d'une variable .
    Pour éliminer les 'stop j'ai une petite astuce:
    Je fais: Edition ,Remplacer ,dans le textbox Rechercher,j'écris stop,et dans le textbox 'Remplacer par, je ne mets rien, puis je clique sur 'Remplacer tout
    et ...automatiquement tous les 'stop sont enlevés.

    5.Pourquoi ton module variables?
    Tu peux mettre directement tes variables en début de la feuille
    au même endroit que
    Salut Kitty

  12. #12
    Membre à l'essai
    Inscrit en
    Novembre 2008
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 38
    Points : 12
    Points
    12
    Par défaut
    Bonjour,
    alors voilà, j'ai potassé pas mal vos conseils et j'ai réussi à résoudre un truc.

    En premier, j'ai mis la fenêtre de l'éditeur exécution vb 6 pour m'afficher ma requête et je dois dire que c'est super ce truc. Pareil pour le msgbox sql. Par contre, j'ai essayé le débug.Print sql, cela n'affiche rien. Peut-être est-ce normal, je sais pas car je ne l'ai jamais utilisé.

    Ensuite, j'ai trouvé pourquoi ma liste de films ne s'affiche pas dans la partie où on peut en sélectionner. Comme l'a dit progElect je ne l'appelais pas donc c'est sûr qu'elle ne risquait pas de s'afficher. Donc, maintenant cela marche.

    Après, en ce qui concerne la liste des emprunteurs, la FONCTION_NUM n'est pas une variable mais le nom de la première colonne de ma table FONCTION dans access. J'ai voulu faire une jointure.

    Maintenant pour les remarques de iclic. Le code de ma sub figure dans un module intitulé connection dont voici le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Option Explicit
    'Déclaration de la variable de connexion
    Public cnx As ADODB.Connection
     
    Public Sub Connec()
        'connexion
        Set cnx = New ADODB.Connection
        'ODBC
        cnx.ConnectionString = "DSN=acc_gestionDVD"
        'Ouverture de la base de données
        cnx.Open
    End Sub
    Pour ce qui concerne la variable NomFonction, je ne vois pas comment l'initialiser. Je l'ai mis dans le form load mais je ne suis pas sûre. Je galère pour cette partie, donc j'essaye plein de trucs.

    Enfin, j'ai fais un module variable car mon projet comporte 16 feuilles mis à l'intérieures d'une MDI. C'est pour cela. On m'a appris à faire des programmes claires pas trop surchargés si les informations notamment des variables sont reprises plusieurs fois.

    La programmation c'est bien mais c'est un peu galère surtout lorsque l'on débute ... Mais bon faut bien apprendre un jour !
    Merci encore

  13. #13
    Membre éclairé
    Inscrit en
    Décembre 2007
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 512
    Points : 671
    Points
    671
    Par défaut
    Bonjour,

    1.C'est bien d'avoir un module de variables 'Public ,mais n'oublie pas que celà prend aussi de la place en mémoire car elles gardent leur valeur pendant tout le processus.
    Moi,personnellement je fais un module de variables publiques(dans une 'sub main' .J'initialise ces variables avec des paramètres que je vais charger dans des fichiers de façon à pouvoir les utiliser pendant toutes la durée de l'application.
    Mais attention de ne pas les redefinir dans une form ou une sub ,ce qui provoquerait une erreur.
    A part celà,je ne vois pas l'utilité de les avoir 'Public.

    2.
    un membre selon sa catégorie socio-pro...

    ...Pour ce qui concerne la variable NomFonction, je ne vois pas comment l'initialiser.
    Je suppose que la variable NomFonction contient la catégorie socio-pro.
    Si tu veux conserver cette valeur, avant de quitter ton programme, tu l'écris dans un simple fichier texte que tu vas relire au début de ton 'sub load et tu peux alors initialiser la variable NomFonction avec cette valeur.

    A+ et bon courage

  14. #14
    Membre à l'essai
    Inscrit en
    Novembre 2008
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 38
    Points : 12
    Points
    12
    Par défaut
    Bonjour,
    désolé de ne pas avoir répondu plus tôt mais j'avais un autre projet en cours qu'il a fallu que je finisse.
    Alors, j'ai essayé plein de solution mais cela ne donne rien de concluant.
    J'ai essayé d'initialiser la variable NomFonction pour qu'à chaque fois lorsque je sélectionne une catégorie socio-pro(CSP) et ensuite un nom cela me renvoie les bonnes valeurs mais rien toujours cette confusion entre le nom et la CSP.
    Ensuite, j'ai réussi à obtenir pour mes listbox films et filmEmprunté un début d'affichage mais j'obtiens alors un message d'erreur suivant :
    Un index ou une clé principale ne peut pas contenir une valeur Null.
    Je n'arrive pas à résoudre ce problème.

    En effet, ces deux listbox (lst_Film et Lst_FilmEmpruntés) doivent me permettre de faire glisser un élément de la lst_film vers la listbox lst_filmEmpruntés grâce à deux boutons cmd_ajouter et cmd_retirer
    Cmd_retirer permet de retirer le film de la listbox lorsque celui-ci n'est plus empruntés.

    Si quelqu'un pouvait m'aider à résoudre ces problèmes cela serait super.
    Un grand merci d'avance

  15. #15
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Points : 5 100
    Points
    5 100
    Par défaut
    Citation Envoyé par *kitty* Voir le message
    ... Et lorsque, je sélectionne un membre selon sa catégorie socio-pro. il ne m'affiche que le n°de référence du film inscrit dans la bdd et non le titre ( ex: si Million dollar baby possède l'identifiant n°1 et bien il m'affiche ceci et non le titre)
    ...[/CODE]
    Bonjour Kitty,

    Ne connaissant pas l'évolution de ton code depuis ton premier post, je me base sur ce que tu nous as donné au début pour répondre à ta question.

    Pour voir le nom du film emprunté il faut faire un lien entre tes 2 tables.
    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
    Private Sub Liste_FilmEmpruntés()
     
      On Error GoTo GereErreur
     
      Lst_FilmEmprunté.Clear
      sql = " SELECT FILMS_TITRE, UTI_FILMS FROM UTILISERDVD, FILMS"
      sql = sql & " WHERE UTI_EMPRUNTEUR = " & Val(Lbl_NumEmprunteur.Caption)
      sql = sql & " AND UTILISERDVD.UTI_FILMS = FILMS.FILMS_NUM"
      rst_films.Open sql, cnx
      Do While Not (rst_films.EOF)
        Lst_FilmEmprunté.AddItem rst_films.Fields("FILMS_TITRE")
        rst_films.MoveNext
      Loop
      rst_films.Close
     
      Exit Sub
    GereErreur:
      rst_films.Close
    End Sub
    Pour la suppression, il me semble que la requette devrait ressembler à celle-ci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            'suppression du dvd dans la table utiliserdvd
            sql = "DELETE FROM UTILISERDVD"
            sql = sql & " WHERE UTI_FILMS = " & num
            sql = sql & " AND UTI_EMPRUNTEUR = " & Val(Lbl_NumEmprunteur.Caption)
            cnx.Execute sql

    Enfin, il faut connaitre le numéro du film avant d'effectuer l'ajout

    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
    Private Sub Cmd_AjouterFilm_click()
      ' un film et un emprunteur
      If Lst_Film.Text <> "" And Lst_Emprunteur.ListIndex <> -1 Then
        num = 0
        'rechercher ensuite le code du dvd
        sql = " SELECT FILMS_NUM FROM FILMS WHERE FILMS_TITRE = '" & Lst_Film & "' "
        rst_films.Open sql, cnx
        If Not rst_films.EOF Then num = rst_films.Fields("FILMS_NUM")
        rst_films.Close
     
        'vérifier si le dvd a été emprunté par cet utilisateur
        If verifDVD Then
          'enregistrer à présent le dvd dans la bdd (son emprunt)
          sql = " INSERT INTO UTILISERDVD (UTI_FILMS, UTI_EMPRUNTEUR)"
          sql = sql & " VALUES ( '" & num & "', " & Val(Lbl_NumEmprunteur) & ")"
          cnx.Execute sql
          'insérer le dvd dans la liste films_emprunté
          Lst_FilmEmprunté.AddItem Lst_Film.Text
        End If
      End If
    End Sub
     
    ' renoie vrai si non trouvé, faux si trouvé
    Private Function verifDVD() As Boolean
      verifDVD = False
      sql = "SELECT * FROM UTILISERDVD "
      sql = sql + " WHERE UTI_FILMS = " & num
      sql = sql + " AND UTI_EMPRUNTEUR = " & Val(Lbl_NumEmprunteur)
      rst_films.Open sql, cnx
      'If rst_films.EOF Then
      '    verifDVD = True
      'Else
      '    verifDVD = False
      'End If
      verifDVD = rst_films.EOF   ' remplace les lignes au dessus
      rst_films.Close
    End Function
    J'ai transformé ta procédure (sub) "verifDVD" en fonction (Function) cela permet d'éliminer une variable globale. Et je renvoie directement le résultat de l'interrogation.

    Espérant que ces quelques info pourront t'aider,
    A+, Hervé.
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  16. #16
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Points : 5 100
    Points
    5 100
    Par défaut
    Citation Envoyé par *kitty* Voir le message
    J'ai essayé d'initialiser la variable NomFonction pour qu'à chaque fois lorsque je sélectionne une catégorie socio-pro(CSP) et ensuite un nom cela me renvoie les bonnes valeurs mais rien toujours cette confusion entre le nom et la CSP.
    Je ne suis pas sur d'avoir bien compris, mais
    Lorsque tu cliques sur ton controle "Lst_Fonction" tu appeles ta procedure "Liste_Emprunteur()", met à jour tes labels dans cette procédure.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        Lbl_NumEmprunteur.Caption = ""
        Lbl_NomEmprunteur.Caption = ""
        Lbl_PrenomEmprunteur.Caption = ""
        Lbl_FonctionEmprunteur.Caption = Lst_Fonction.Text
    cela te permettra déjà de voir le résultat de tes actions (clic sur Lst_fonction)

    Que veux tu faire avec la variable "NomFonction" ?

    A+, Hervé.
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  17. #17
    Membre à l'essai
    Inscrit en
    Novembre 2008
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 38
    Points : 12
    Points
    12
    Par défaut
    Bonjour,
    merci hervé pour votre réponse détaillée. En tout cas, je ne connaissais pas la fonction On Error merci

    De plus, pour mon problème de fonction voici ce que je voudrais faire.
    J'ai une listbox lst_fonction et une listbox lst_Emprunteur. En fait, lorsque je choisis une CSP, j'ai tous les noms qui s'affichent dans la lst_Emprunteur appartenant à cette CSP choisie et lorsque je sélectionne un nom, la listbox lst_FilmEmpruntés doit pouvoir m'afficher tous les films que la personne a pris. Ensuite, je dois pouvoir soit les enlever avec la commande cmd_retirer soit en rajouter avec la commande cmd_ajouter dans la listbox lst_films.

    Mon programme m'affiche bien la liste complète de CSP, les noms lorsque je sélectionne une CSP ainsi que les films. Mais, lorsque je change de CSP et choisis un même nom de famille, j'obtiens le résultat du premier
    Ex:
    cas 1
    CSP: artisan
    Nom: Martin
    Films Empruntés: Bad Boys
    cas 2
    CSP: employé
    Nom: Martin
    Films Empruntés: Bad Boys

    Cela pose problème car quand je demande le cas 1 tout va bien mais ensuite lorsque je demande le cas 2 il m'affiche le même résultat que cas 1

    J'espère avoir éclairci mon idée .
    Merci de votre aide

    Ps : voici mon code avec vos morceaux de code

    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
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    Option Explicit
    Dim num As String
     
    Public Sub Liste_Fonction()
    'début
        'remplissage de la liste des fonctions
        Lst_Fonction.Clear
        sql = "SELECT FONCTION_LIBELLE FROM FONCTION"
        rst_fonction.Open sql, cnx
        If Not (rst_fonction.EOF) Then
            Do
                Lst_Fonction.AddItem rst_fonction.Fields("FONCTION_LIBELLE")
                rst_fonction.MoveNext
            Loop Until rst_fonction.EOF
        End If
        rst_fonction.Close
    End Sub
     
    Public Sub Liste_Emprunteur()
    'début
        'remplissage de la liste des noms Emprunteurs
        Lst_Emprunteur.Clear
        sql = "SELECT EMP_NOM FROM EMPRUNTEUR, FONCTION WHERE EMP_FONCTION = FONCTION_NUM"
        sql = sql & " AND FONCTION_LIBELLE = '" & Lst_Fonction.Text & "'"
     
        MsgBox sql
     
        rst_emprunteur.Open sql, cnx
     
        If Not (rst_emprunteur.EOF) Then
            Do
                Lst_Emprunteur.AddItem rst_emprunteur.Fields("EMP_NOM")
                rst_emprunteur.MoveNext
            Loop Until rst_emprunteur.EOF
        Else
        End If
        rst_emprunteur.Close
    End Sub
     
    Public Sub liste_films()
    'début
        'remplissage de la liste des films empruntés par une personne
        Lst_Film.Clear
        sql = "SELECT FILMS_TITRE FROM FILMS"
        rst_films.Open sql, cnx
        Do While Not (rst_films.EOF)
                Lst_Film.AddItem rst_films.Fields("FILMS_TITRE")
                rst_films.MoveNext
        Loop
        rst_films.Close
    End Sub
     
    Public Sub liste_series()
    'début
        'remplissage de la liste des séries empruntées par une personne
        Lst_Serie.Clear
        sql = "SELECT SERIES_NOM FROM SERIES"
        rst_series.Open sql, cnx
        If Not (rst_series.EOF) Then
            Do
                Lst_Serie.AddItem rst_series.Fields("SERIES_NOM")
                rst_series.MoveNext
            Loop Until rst_series.EOF
        End If
        rst_series.Close
    End Sub
    Private Sub Cmd_Attribuer_Click()
    MsgBox "Les dvd ont bien été attribués"
    End Sub
     
    Private Sub Cmd_Fermer_Click()
        Unload Me
    End Sub
     
    Private Sub Cmd_RetirerFilm_click()
    'début
        'rechercher le code du dvd
        sql = "SELECT FILMS_NUM FROM FILMS WHERE FILMS_TITRE = '" & Lst_FilmEmprunté & "'"
        rst_films.Open sql, cnx
        If Not rst_films.EOF Then
            num = rst_films.Fields("FILMS_NUM")
     
            'suppression du dvd dans la table utiliserdvd
            sql = "DELETE FROM UTILISERDVD"
            sql = sql & " WHERE UTI_FILMS = " & num
            sql = sql & " AND UTI_EMPRUNTEUR = " & Val(Lbl_NumEmprunteur.Caption)
            cnx.Execute sql
     
            'enlever à présent le dvd de la liste
            i = Lst_FilmEmprunté.ListIndex
            Lst_FilmEmprunté.RemoveItem (i)
        End If
        rst_films.Close
    End Sub
     
    Private Sub Cmd_AjouterFilm_click()
      ' un film et un emprunteur
      If Lst_Film.Text <> "" And Lst_Emprunteur.ListIndex <> -1 Then
        num = 0
        'rechercher ensuite le code du dvd
        sql = " SELECT FILMS_NUM FROM FILMS WHERE FILMS_TITRE = '" & Lst_Film & "' "
        rst_films.Open sql, cnx
        If Not rst_films.EOF Then num = rst_films.Fields("FILMS_NUM")
        rst_films.Close
     
        'vérifier si le dvd a été emprunté par cet utilisateur
        If verifDVD Then
          'enregistrer à présent le dvd dans la bdd (son emprunt)
          sql = " INSERT INTO UTILISERDVD (UTI_FILMS, UTI_EMPRUNTEUR)"
          sql = sql & " VALUES ( '" & num & "', " & Val(Lbl_NumEmprunteur) & ")"
          cnx.Execute sql
          'insérer le dvd dans la liste films_emprunté
          Lst_FilmEmprunté.AddItem Lst_Film.Text
        End If
      End If
    End Sub
     
    ' renvoie vrai si non trouvé, faux si trouvé
    Private Function verifDVD() As Boolean
      verifDVD = False
      sql = "SELECT * FROM UTILISERDVD "
      sql = sql + " WHERE UTI_FILMS = " & num
      sql = sql + " AND UTI_EMPRUNTEUR = " & Val(Lbl_NumEmprunteur)
      rst_films.Open sql, cnx
     
      verifDVD = rst_films.EOF   ' remplace les lignes au dessus
      rst_films.Close
    End Function
     
    Private Sub verifFilm()
    ' debut
        sql = "SELECT * FROM UTILISERDVD "
        sql = sql + " WHERE UTI_FILMS = '" & num & "'"
        sql = sql + " AND UTI_EMPRUNTEUR = " & Val(Lbl_NumEmprunteur)
        rst_films.Open sql, cnx
        If rst_films.EOF Then
            verifok = True
        Else
            verifok = False
        End If
        rst_films.Close
    End Sub
     
    Private Sub Form_Load()
    'début
        'connexion avec la bdd pour alimenter les listbox
        Connec
     
         ' alimenter les labels de l'emprunteur dans la frame emprunteur
         If NomFonction <> "" Then
            Lbl_NumEmprunteur.Caption = NumEmp
            Lbl_NomEmprunteur.Caption = NomEmp
            Lbl_PrenomEmprunteur.Caption = PrenomEmp
     
            ' alimenter la fonction
     
            Lbl_FonctionEmprunteur.Caption = NomFonction
            Lst_Fonction.AddItem NomFonction
            Lst_Fonction.Text = NomFonction
     
            ' alimenter les films déjà utilisés
            Liste_FilmEmpruntés
     
            'alimenter les séries déjà utilisées
            Liste_SérieEmpruntées
        Else
            Liste_Fonction
        End If
     
        'remplir la liste des dvd empruntés
    '    Liste_DvdEmprunteur
         'remplir la liste fonction
        Liste_Fonction
        liste_films
        liste_series
     
    End Sub
     
    Private Sub Lst_Emprunteur_Click()
    'début
        'd'abord alimenter la frame emprunteur
         ' alimenter la frame de l'emprunteur
         sql = "SELECT * FROM EMPRUNTEUR WHERE EMP_NOM = '" & Lst_Emprunteur.Text & "'"
         rst_emprunteur.Open sql, cnx
     
         If Not (rst_emprunteur.EOF) Then
            Lbl_NumEmprunteur.Caption = rst_emprunteur.Fields("Emp_Num")
            Lbl_NomEmprunteur.Caption = rst_emprunteur.Fields("Emp_Nom")
            Lbl_PrenomEmprunteur.Caption = rst_emprunteur.Fields("Emp_Prenom")
            Lbl_FonctionEmprunteur.Caption = Lst_Fonction.Text
         End If
            rst_emprunteur.Close
     
            ' afficher tous les films empruntés
            Liste_FilmEmpruntés
     
            ' afficher les séries empruntées
            Liste_SérieEmpruntées
     
            ' afficher tous les dvd empruntés
            'liste_DVDEmprunté
     
    End Sub
    Private Sub Lst_Fonction_Click()
    ' debut
        ' alimenter la liste emprunteurs
         Liste_Emprunteur
     
    End Sub
     
    Private Sub Liste_FilmEmpruntés()
     
      On Error GoTo GereErreur
     
      Lst_FilmEmprunté.Clear
      sql = " SELECT FILMS_TITRE, UTI_FILMS FROM UTILISERDVD, FILMS"
      sql = sql & " WHERE UTI_EMPRUNTEUR = " & Val(Lbl_NumEmprunteur.Caption)
      sql = sql & " AND UTILISERDVD.UTI_FILMS = FILMS.FILMS_NUM"
      rst_films.Open sql, cnx
      Do While Not (rst_films.EOF)
        Lst_FilmEmprunté.AddItem rst_films.Fields("FILMS_TITRE")
        rst_films.MoveNext
      Loop
      rst_films.Close
     
      Exit Sub
    GereErreur:
      rst_films.Close
    End Sub
     
    Private Sub Liste_SérieEmpruntées()
    'début
            Lst_SérieEmpruntée.Clear
            sql = "SELECT UTI_SERIES FROM UTILISERDVD"
            sql = sql & " WHERE UTI_EMPRUNTEUR = " & Val(Lbl_NumEmprunteur.Caption)
            rst_series.Open sql, cnx
            If Not (rst_series.EOF) Then
                Do
                    Lst_SérieEmpruntée.AddItem rst_series.Fields("UTI_SERIES")
                    rst_series.MoveNext
                Loop Until rst_series.EOF
            End If
            rst_series.Close
    End Sub

  18. #18
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Points : 5 100
    Points
    5 100
    Par défaut
    Sauvegarde bien ton travail avant toute manip de modification.

    L'erreur provient de la Sub "Lst_Emprunteur_Click()".
    La ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sql = "SELECT * FROM EMPRUNTEUR WHERE EMP_NOM = '" & Lst_Emprunteur.Text & "'"
    sélectionne l'emprunteur sur son nom uniquement, donc le premier trouvé est ramené.

    Tu pourrais effectivement utiliser le code fonction pour retrouver l'utilisateur, mais cela n'est pas suffisant.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    sql = "SELECT * FROM EMPRUNTEUR, FONCTION WHERE EMP_FONCTION = FONCTION_NUM"
        sql = sql & " AND FONCTION_LIBELLE = '" & Lst_Fonction.Text & "'"
        sql = sql & " AND EMP_NOM = '" & Lst_Emprunteur.Text & "'"
    Cela résout ton problème actuel (2 Martin avec fonction différentes),
    . mais,
    dans le cas ou tu aurais 2 Martin (ex:Martin Jean et Martin Paul) qui sont tous 2 de la même CSP (tous les 2 sont employés) tu ne retrouverais que le premier.
    Il te faut donc noter le code emprunteur qui est unique.

    Solution proposé

    Si "EMP_NUM" est numérique tu peux utiliser la propriété itemdata pour stocker le code emprunteur avec le nom dans la liste
    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
    Public Sub Liste_Emprunteur()
      'remplissage de la liste des noms Emprunteurs
      Lst_Emprunteur.Clear
      sql = "SELECT EMP_NOM,EMP_NUM FROM EMPRUNTEUR, FONCTION WHERE EMP_FONCTION = FONCTION_NUM"
      sql = sql & " AND FONCTION_LIBELLE = '" & Lst_Fonction.Text & "'"
     
      rst_emprunteur.Open sql, cnx
     
      If Not (rst_emprunteur.EOF) Then
        Do
          'place le nom dans la liste
          Lst_Emprunteur.AddItem rst_emprunteur.Fields("EMP_NOM")
          'place le numéro dans la propriété itemdata de la liste
          'en utilisant la propriété NewIndex de façon à ce que les numéros continuent de correspondre aux éléments (noms) de la liste
          Lst_Emprunteur.ItemData(Lst_Emprunteur.NewIndex) = rst_emprunteur.Fields("EMP_NUM")
          rst_emprunteur.MoveNext
        Loop Until rst_emprunteur.EOF
      End If
      rst_emprunteur.Close
      Lbl_NumEmprunteur.Caption = ""
      Lbl_NomEmprunteur.Caption = ""
      Lbl_PrenomEmprunteur.Caption = ""
      Lbl_FonctionEmprunteur.Caption = Lst_Fonction.Text
     
    End Sub
    La recherche
    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
    Private Sub Lst_Emprunteur_Click()
        'sql = "SELECT * FROM EMPRUNTEUR WHERE EMP_NUM = " & Lst_Emprunteur.ItemData(Lst_Emprunteur.ListIndex)
        '
      ' alimenter la frame de l'emprunteur
      ' recherche en utilisant le code emprunteur présent dans itemdata de la liste Lst_Emprunteur
      sql = "SELECT * FROM EMPRUNTEUR, FONCTION WHERE EMP_FONCTION = FONCTION_NUM"
      sql = sql & " AND FONCTION_LIBELLE = '" & Lst_Fonction.Text & "'"
      sql = sql & " AND EMP_NUM = " & Lst_Emprunteur.ItemData(Lst_Emprunteur.ListIndex)
     
      rst_emprunteur.Open sql, cnx
     
      If Not (rst_emprunteur.EOF) Then
        Lbl_NumEmprunteur.Caption = rst_emprunteur.Fields("Emp_Num")
        Lbl_NomEmprunteur.Caption = rst_emprunteur.Fields("Emp_Nom")
        Lbl_PrenomEmprunteur.Caption = rst_emprunteur.Fields("Emp_Prenom")
        Lbl_FonctionEmprunteur.Caption = Lst_Fonction.Text
      End If
      rst_emprunteur.Close
     
      ' afficher tous les films empruntés
      Liste_FilmEmpruntés
     
      ' afficher les séries empruntées
      Liste_SérieEmpruntées
     
      ' afficher tous les dvd empruntés
      'liste_DVDEmprunté
     
    End Sub
    Il est toujours préférable de rechercher par le code pour la garantie de l'unicité. (et la rapidité)

    Bon courage dans ton travail
    A+, Hervé.
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  19. #19
    Membre à l'essai
    Inscrit en
    Novembre 2008
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 38
    Points : 12
    Points
    12
    Par défaut
    Bonjour, merci beaucoup Hervé ça marche super.
    Je ne connaissais pas itemdata c'est sympa de mettre des explications pour que je comprenne c'est cool.
    Merci

  20. #20
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Points : 5 100
    Points
    5 100
    Par défaut
    De rien, bonne continuation.

    Pense au tag "résolu"
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

Discussions similaires

  1. [XL-2007] Problème affichage Listbox Filtrée
    Par cathodique dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 01/01/2015, 21h24
  2. Réponses: 24
    Dernier message: 09/04/2014, 12h03
  3. VBA: Erreur d'affichage listbox avec valeur unique
    Par polenade dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 24/07/2012, 19h34
  4. Actualisation et affichage ListBox
    Par malabarbe dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 17/06/2009, 08h29
  5. [Débutant]Problème affichage listbox
    Par erfindel dans le forum VBA Access
    Réponses: 9
    Dernier message: 17/06/2008, 15h47

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