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

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

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.