Grille de données (dbgrid) comportant une liste déroulante

Soyez le premier à donner votre avis sur cette source.

Vue 13 436 fois - Téléchargée 2 903 fois

Description

Permet de créer une liste de choix dans une DbGrid, de sélectionner une valeur dans cette liste, avec mise à jour de la grille sous-jacente, du contrôle data et de la base de données liée (.mdb).
Je pense avoir commenté cette source assez correctement. J'espère que ce petit bout de code sera utile à l'un ou l'autre. J'ai vu peu de sources sur ce thème sur le site, mais peut-être ai-je mal charché. Si elle est redondante, supprimez-la, pas de problème.

Source / Exemple :


Private Sub Form_Resize()

' Crée la requète du "DataPays" et remplit la liste des pays
    With DataPays
    .RecordSource = "SELECT * FROM NomsPays ORDER BY Pays ASC"
    .Refresh
    
    For i = 1 To .Recordset.RecordCount
      List1.AddItem (.Recordset("Pays"))
      .Recordset.MoveNext
    Next i
  End With
  
' Crée la requète du "DataClubs"
  With DataClubs
    .RecordSource = "SELECT * FROM NomsClubs ORDER BY Club ASC"
    .Refresh
  End With
  
End Sub

Private Sub List1_DblClick()

' Met à jour le DataClubs quand on clique 2x sur la liste des pays.
  With DataClubs
    .Recordset.Edit
    .Recordset("Pays") = Trim(List1.Text)
    .Recordset.Update
  End With
  
  ' Rend la liste invisible
  List1.Visible = False
  
End Sub

Private Sub DBGrid1_ButtonClick(ByVal ColIndex As Integer)

' Si on clique sur le bouton qui apparaît dans la colonne 2 (celle des pays).
  If DBGrid1.Col = 2 Then
    
    ' Calcul du TOP de la liste: ajouter les valeurs suivantes ...
    ' Le top de la DBGrid1 +
    ' La hauteur de chaque ligne multipliée par le n° de la ligne sur laquelle on est
    ' La hauteur du titre: 225 x le HeadLines de la DBGrid1 ...
    '    ... (225 = la hauteur standard d'une ligne)
    ' Plus 225 qui est la hauteur du bouton lorsqu'il apparaît quand on clique sur la
    ' case de la grille.
    With List1
      .Top = DBGrid1.Top + _
             (DBGrid1.RowHeight * DBGrid1.Row) + _
             (DBGrid1.HeadLines * 225) + _
             225
      .Left = DBGrid1.Columns(ColIndex).Left + 140  ' Calcul du Left de la liste
      .Width = DBGrid1.Columns(2).Width             ' Calcul de la largeur de la liste
      .Visible = True                               ' La liste devient visible
      .SetFocus                                     ' On lui donne le focus
      .Text = DataClubs.Recordset("Pays")           ' Sélectionne dans la liste
                                                    ' le nom du pays présent dans
                                                    ' la DbGrid => on est directement
                                                    ' positionné dessus.
    End With
    
  End If
  
End Sub

Private Sub Form_Load()

' Initialise le chemin de la base de données pour chaque contrôle Data.
  DataClubs.DatabaseName = App.Path & "/" & "Dbase.mdb"
  DataPays.DatabaseName = App.Path & "/" & "Dbase.mdb"
  
End Sub

Private Sub List1_LostFocus()

' Quand la liste perd le focus, elle devient invisible.
  List1.Visible = False
  
End Sub

Private Sub DBGrid1_Click()

' Quand on clique sur la grille, alors que la liste est visible, celle-ci devient
' invisible.
  List1.Visible = False
  
End Sub

Private Sub Form_Click()

' Quand on clique sur la Form, alors que la liste est visible, celle-ci devient
' invisible.
  List1.Visible = False
  
End Sub

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
3
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
29 mars 2006

Il y a un petit bug dans ton code, si on clique sur un élément en fin de tableau, la liste ne s'affiche pas complètement, elle s'arrête au bas de la fenêtre.
Messages postés
4
Date d'inscription
jeudi 27 mars 2003
Statut
Membre
Dernière intervention
14 mars 2006

kikoo pim
ton code a l'air interessant, merci a toi et tous ceux ki font partager leur savoir a des gens coment moi ki débute ( enfin qui reprenne doucement le train lol)
bye bye
Messages postés
100
Date d'inscription
vendredi 20 décembre 2002
Statut
Membre
Dernière intervention
1 février 2009

Salut PIM,
T'as source est cool est en plus elle va beaucoup me servir.
Merci Beaucoup.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.