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 :

Alimentation d'un ComboBox via une requête paramètrée par un autre ComboBox


Sujet :

VB 6 et antérieur

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Maroc

    Informations forums :
    Inscription : Juin 2008
    Messages : 6
    Points : 3
    Points
    3
    Par défaut Alimentation d'un ComboBox via une requête paramètrée par un autre ComboBox
    Bonjour tout le monde
    Alors voilà, j'ai une base de donnée access, les tables suivantes sont concernés par le problème en question:
    -Banque
    -Agence
    Une banque a plusieurs agences.

    Voilà à quoi ressemble la FORM sur laquelle je travaille :

    Ce que je veux faire c'est : N'avoir dans le ComboBox de l'agence que les agences appartenant à la banque selectionnée dans le premier ComboBox.

    Voici mon 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
    '-----------------------Declaration Des Variables Globales--------------------------
    Dim cnx As ADODB.Connection
    Dim cob As ADODB.Recordset
    Dim coa As ADODB.Recordset
    Dim VarBanque As Integer
     
    '---------------------------------
         Private Sub Form_Load()
    '---------------------------------
     
    Set cnx = New ADODB.Connection
    Set cob = New ADODB.Recordset
    Set coa = New ADODB.Recordset
     
    '----------------------------------------------------------------------------------
    VarBanque = 1
    ' Là j'ai initialisé la variable VarBanque pour éviter le msg d'erreur suivant :
    '          "L'operation demandée necessite un enregistrement actuel"
    '----------------------------------------------------------------------------------
     
    cnx.Provider = "microsoft.jet.oledb.4.0"
    cnx.ConnectionString = App.Path & "\GD.mdb"
    cnx.Open
    cob.Open "select NomBanque from Banque", cnx, adOpenDynamic, adLockOptimistic
    coa.Open "select NomAgence from Agence where  NumBanque  = " & VarBanque & "", cnx, adOpenDynamic, adLockOptimistic
     
    '------------------------------Combo Banque-------------------------------------------
     
    cob.MoveFirst
    Do
    Cb.AddItem cob("NomBanque")
     
    cob.MoveNext
    Loop Until cob.EOF
     
    '-----------------------------Combo Agence--------------------------------------------
    coa.MoveFirst
    Do
    Ca.AddItem coa("NomAgence")
    coa.MoveNext
    Loop Until coa.EOF
    End Sub
     
     
    '----------------------ComboBox Banque Click----------------------------------------
     
    Private Sub Cb_Click()
     
    cob.MoveFirst
    Do Until cob.EOF
    If Cb = cob("NomBanque") Then
     
    '--------------Historique-----------
    B.Caption = cob("NomBanque")
    '-----------------------------------
     
    VarBanque = Cb.ListIndex + 1
    End If
        cob.MoveNext
    Loop
    End Sub
     
    '----------------------ComboBox Agence Clik-----------------------------------------
     
    Private Sub Ca_Click()
     
    coa.MoveFirst
    Do Until coa.EOF
    If Ca = coa("NomAgence") Then
     
    '--------------Historique------------------------------------------------------------
    A.Caption = coa("NomAgence")
    '------------------------------------------------------------------------------------
     
    End If
    coa.MoveNext
    Loop
    End Sub
     
    '----------------------CheckBox Agence CLIK------------------------------------------
     
     
    Private Sub CheckBox1_Click()
     
    If Ca.Enabled = True Then
    Ca.Text = ""
    A.Caption = ""
    La.Visible = False
    Ca.Enabled = False
    Else: Ca.Enabled = True: La.Visible = True
    End If
    End Sub
     
    Private Sub Frame1_DragDrop(Source As Control, X As Single, Y As Single)
     
    End Sub
    Avec ce code j'ai dans le deuxième ComboBox les agences de la première Banque(Car j'ai initialisé la variable qui indique à la requête la banque 1).
    Ca fait maintenant quatre jours que je galère dessus mais en vain

    Je sais pas comment faire pour avoir à chaque fois que les agences appartenant à la banque selectionnée, autrement dit pour que la requete s'execute et aliment le ComboBox 'Agence' à chaque selection d'une banque.
    Si quelqu'un a une idée ...
    Je vous remercie d'avance pour votre collaboration

  2. #2
    Membre expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 70
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Points : 3 696
    Points
    3 696
    Par défaut
    Si la banque à plusieurs agence, on parle de relation un à plusieurs.Code
    On traite généralement ce problème en donnant dans la table agence, un champs qui contiedra le code (ou le nom) de la banque.
    Exemple :
    Table banque
    - Code Banque
    - Nom Banque
    -etc
    Table Agence
    -Code Banque
    -Code Agence
    -Nom agence
    -etc
    A partir de la, quand tu selectionne une banque, une requette du type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "Select * From Agence Where [Code Banque]=" & Combo1.Text
    trouve toutes les agences de la banque sélectionnée
    En général, on ne demande de conseils que pour ne pas les suivre ou, si on les a suivis, reprocher à quelqu'un de les avoir donnés
    (ALEXANDRE DUMAS)

    N'hésitez pas à visiter ma page de contributions

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Maroc

    Informations forums :
    Inscription : Juin 2008
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Je pense que le lien sur mon message, voilà :

    Ma base de donnée est bien construite et toutes les relations y sont, mais le problème n'est pas là. Le problème c'est dans quel endroit du code je dois insérer la bonne requête et comment ? y'a t-il d'autres modifications que je dois faire ?
    Merci

    Surtout je voudrais savoir:
    La correcte syntaxe de la requete en question (je galère avec les & " ' " && " & ) et où l'insérer pour que ça marche à chaque clik du combo box.
    Merci Monsieur Delbeke de m'aiclairer plus car j'arrive pas à tirer profit de votre requête.
    Ceci est le meilleur des forums

  4. #4
    Membre expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 70
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Points : 3 696
    Points
    3 696
    Par défaut
    Le code banque est Numérique ? alors la clause where doit être Code =Valeur
    Le code Banque est Alpha, alors çà devient Code ='Veleur'
    En général, on ne demande de conseils que pour ne pas les suivre ou, si on les a suivis, reprocher à quelqu'un de les avoir donnés
    (ALEXANDRE DUMAS)

    N'hésitez pas à visiter ma page de contributions

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Maroc

    Informations forums :
    Inscription : Juin 2008
    Messages : 6
    Points : 3
    Points
    3
    Par défaut ça ne marche toujours pas
    Au fait j'ai toujours l'erreur suivante : "L'operation demandée necessite un enregistrement actuel", signifie que le ComboBox ne retourne aucune valeur pouvant alimenter la requête
    Ce code commence à me casser la figure
    Un ptit effort les forts

  6. #6
    Membre expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 70
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Points : 3 696
    Points
    3 696
    Par défaut
    Sempiternelles questions

    Quelle ligne provoque l'erreur?
    As tu des données dans les tables ?
    Sait tu exécuter ton programme pas à pas pour voir excatement ce qu'il fait
    Suis tu le contenu des variables en cours d'exécution ?

    Autre chose, quand tu as rempli le premier combo, tu as fait une boucle de lecture de ta table, a la fin de cette boucle, le premier recordset ne pointe plus sur aucune ligne de la table (fin de fichier atteinte)
    En général, on ne demande de conseils que pour ne pas les suivre ou, si on les a suivis, reprocher à quelqu'un de les avoir donnés
    (ALEXANDRE DUMAS)

    N'hésitez pas à visiter ma page de contributions

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Maroc

    Informations forums :
    Inscription : Juin 2008
    Messages : 6
    Points : 3
    Points
    3
    Par défaut Réponse aux questions+Remarque
    D'abord voici un aperçu des deux tables en question :


    et Voici la ligne qui donne l'erreur :


    Oui je suis l'évolution des valeurs de variables par des msgbox en revanche je ne sais pas comment faire pour l'éxécution pas à pas.
    Je croie que vous avez posé le doigt sur l'endroit qui fait mal, effectivement la boucle du premier ComboBox pointe à la fin sur rien
    Je serai reconnaissant si vous me proposer comment elle pourrait à nouveau pointer sur quelque chose de mangeable

    Mes respects les plus sincères.

  8. #8
    Membre expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 70
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Points : 3 696
    Points
    3 696
    Par défaut
    On ne fera pas le boulot pour toi. Donc voici des pistes à explorer

    Au début du code Cb.ListIndex donne quoi ? cà serait pas zéro des fois ? hors tu n'a pas d'agence avec un code zéro.

    Les movefirst et movelast servent à quoi d'après toi ?

    Passer en mode debug, il faut placer un point d'arret en cliquant dans la marge sur la feuille du code source, le point d'arret est matérialisé par un surlignage brun de la ligne. une fois le programme arrété, on utilise la touche F8 pour le pas à pas
    En général, on ne demande de conseils que pour ne pas les suivre ou, si on les a suivis, reprocher à quelqu'un de les avoir donnés
    (ALEXANDRE DUMAS)

    N'hésitez pas à visiter ma page de contributions

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Maroc

    Informations forums :
    Inscription : Juin 2008
    Messages : 6
    Points : 3
    Points
    3
    Par défaut Merci Beaucoup
    Merci beaucoup pour ces précieuses indications, je vous en informerai dès que ça marchera, à bientôt

  10. #10
    Membre expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 70
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Points : 3 696
    Points
    3 696
    Par défaut
    Ben tu as beaucouo de chance aujourd'hui
    Vois ce code et comprends le. Je te conseille vivement d'etudier la collection itemdata des comboboxes avec l'aide en ligne de vb
    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
     
    Option Explicit
    Dim cnx As ADODB.Connection
    Dim RsBanque As ADODB.Recordset
    Dim RsAgence As ADODB.Recordset
     
    Private Sub cboAgence_Click()
      Dim NumLigne As Long
      Dim NumAgence As Long
      NumLigne = cboAgence.ListIndex
      NumAgence = cboAgence.ItemData(NumLigne)
    End Sub
    Private Sub cboBanque_Click()
      Dim NumLigne As Long
      Dim NumBanque As Long
      NumLigne = cboBanque.ListIndex
      NumBanque = cboBanque.ItemData(NumLigne)
      ChargeComboAgence cboBanque.ItemData(NumLigne)
    End Sub
    Private Sub Form_Load()
      Set cnx = New ADODB.Connection
      Set RsBanque = New ADODB.Recordset
      Set RsAgence = New ADODB.Recordset
      cnx.Provider = "microsoft.jet.oledb.4.0"
      cnx.ConnectionString = App.Path & "\GD.mdb"
      cnx.Open
      ChargeComboBanque
      If cboBanque.ListCount > 0 Then
        cboBanque.ListIndex = 0
      End If
    End Sub
    Private Sub ChargeComboBanque()
      cboBanque.Clear
      RsBanque.Open "select * from Banque", cnx, adOpenDynamic, adLockOptimistic
      Do While Not RsBanque.EOF
        cboBanque.AddItem RsBanque("NomBanque")  'le nom dans la liste
        cboBanque.ItemData(cboBanque.NewIndex) = RsBanque("NumBanque") 'le code dans l'itemdata
        RsBanque.MoveNext
      Loop
      RsBanque.Close
    End Sub
    Private Sub ChargeComboAgence(CodeBanque As Long)
      cboAgence.Clear
      RsAgence.Open "select * from Agence where NumBanque=" & CStr(CodeBanque), cnx, adOpenDynamic, adLockOptimistic
      Do While Not RsAgence.EOF
        cboAgence.AddItem RsAgence("NomAgence")
        cboAgence.ItemData(cboAgence.NewIndex) = RsAgence("NumAgence")
        RsAgence.MoveNext
      Loop
      RsAgence.Close
    End Sub
    En général, on ne demande de conseils que pour ne pas les suivre ou, si on les a suivis, reprocher à quelqu'un de les avoir donnés
    (ALEXANDRE DUMAS)

    N'hésitez pas à visiter ma page de contributions

  11. #11
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Maroc

    Informations forums :
    Inscription : Juin 2008
    Messages : 6
    Points : 3
    Points
    3
    Par défaut Conclusion
    L'erreur sur laquelle j'ai tardé a été pour moi d'une grande utilité, puisqu'elle m'a permis de prendre conscience de la grande utilité d'une fonction que j'ignorais jusq'uà présent : La super ItemData.
    Avec moi tous
    ItemData est vraiment utile!
    Je tiens à remercier monsieur Delbeke de sa grande patience et de la pertinence de ses remarques que j'oublierai pas.

    Ce forum est bien, prenez en soin, et surtout, restez solidaires, entraidez-vous !
    Bonne journée à tout le monde.

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

Discussions similaires

  1. [AC-2007] Alimenter un état par une requête paramétrée.
    Par JNT-GGL dans le forum VBA Access
    Réponses: 1
    Dernier message: 31/05/2013, 18h13
  2. [AC-2007] Alimenter un MS Form 2 listbox via une Requête
    Par lakhdar16 dans le forum VBA Access
    Réponses: 3
    Dernier message: 20/06/2012, 12h33
  3. Réponses: 6
    Dernier message: 04/05/2011, 10h07
  4. Difficulté d'affichage dans une comboBox via une requête
    Par moilou2 dans le forum VBA Access
    Réponses: 2
    Dernier message: 17/07/2008, 10h44
  5. [MySQL] alimenter une liste déroulante via une requête
    Par stefon dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 13/12/2006, 13h32

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