Bon voila suivez les étapes et vous devriez obtenir les résultats escomptés.
Ceci étant fait nous allons configurer le checkbox.
Nous allons maintenant passer au code.
Note : Dans cet exemple le checkbox sera ajouté à la 2e colonne soit, dgTest.columns(1)
Option Explicit Private bInSetCheckboxes As Boolean Private Sub Form_Activate() SetCheckboxes 1, cbTest 'Ici 1 représente la 2e colonne du DataGrid End Sub Private Sub SetCheckboxes(ColNdx As Long, ByRef ChkboxArray As Object) bInSetCheckboxes = True On Error GoTo ErrorExit Dim i Dim obj As Object Set obj = dgTest Dim OffsetX As Long, OffsetY As Long If Not ChkboxArray(0).Container Is dgTest.Container Then CalcContainerOffset obj, OffsetX, OffsetY End If On Error Resume Next With dgTest If (ChkboxArray.UBound .VisibleRows) Then For i = ChkboxArray.UBound + 1 To .VisibleRows - 1 Load ChkboxArray(i) ChkboxArray(i).Width = 190 ChkboxArray(i).Height = 190 Next For i = .VisibleRows To ChkboxArray.UBound Unload ChkboxArray(i) Next End If OffsetX = OffsetX + (.Columns(ColNdx).Width - ChkboxArray(0).Width) / 2 OffsetY = OffsetY + 10 ''(.RowHeight - ChkboxArray(0).Height) / 2 .Columns(ColNdx).Alignment = dbgCenter .Columns(ColNdx).Locked = True ' If .LeftCol <= ColNdx Then For i = 0 To .VisibleRows - 1 ChkboxArray(i).value = Abs(.Columns(ColNdx).CellValue(.RowBookmark(i))) ChkboxArray(i).Top = .Top + .RowTop(i) + OffsetY ChkboxArray(i).Left = .Left + .Columns(ColNdx).Left + OffsetX ChkboxArray(i).Visible = True ChkboxArray(i).ZOrder Next Else i = 0 End If For i = i To ChkboxArray.UBound ChkboxArray(i).Visible = False Next End With ExitPoint: bInSetCheckboxes = False Exit Sub ErrorExit: Resume ExitPoint End Sub Private Function CalcContainerOffset(obj As Object, ByRef OffsetX As Long, ByRef OffsetY As Long) Do While Not (obj.Container Is obj.Parent) Set obj = obj.Container If Not (obj Is Nothing) Then OffsetX = OffsetX + obj.Left OffsetY = OffsetY + obj.Top If obj.BorderStyle = 1 Then '' fixed single If obj.Appearance = 1 Then '' 3d OffsetX = OffsetX + 30 OffsetY = OffsetY + 30 Else OffsetX = OffsetX + 15 OffsetY = OffsetY + 15 End If End If End If If (TypeOf obj Is Form) Or (TypeOf obj Is MDIForm) Then Exit Do End Function Private Sub dgTest_Scroll(Cancel As Integer) SetCheckboxes 1, cbTest 'Ici 1 représente la 2e colonne du DataGrid End Sub Private Sub cbTest_Click(index As Integer) Dim fr As Long On Error Resume Next fr = dgTest.FirstRow With adoTemp.Recordset 'Ici j'utilise un ado mais vous pouvez utilier n'importe quel ' type de recordset ce bout de code ne doit donc pas être recopié tel quel. ' Ce code met à jour le champs attaché au checkbox avec la bonne valeur, ' ce champs doit être de type boolean donc si vous utilisez SQL SERVER 'vous devez utiliser une colonne de type BIT. .Filter = "LineID='" & index + fr & "'" .fields("Include").value = cbTest(index).value .UpdateBatch .Filter = "LineID<>''" .Resync End With dgTest.FirstRow = fr 'Fin du code que vous devez adapter. End Sub
C'est tout ce qu'il faut.
Vous devez aussi ajouter cette ligne de code à la toute fin de la commande qui rempli votre datagrid si ceci se fait de façon dynamique tel qu'en utilisant un bouton ou autre.
SetCheckboxes 1, cbTest 'Ici 1 représente la 2e colonne du DataGrid
Ainsi si le bouton cmdGo remplie votre datagrid ajouté le code à l'évènement click.
Tel qu'indiqué ici :
Private Sub cmdGo_Click() '... votre code ici SetCheckboxes 1, cbTest 'Ici 1 représente la 2e colonne du DataGrid End Sub
Zen69 aka Ortho Le Profett