Datagrid: ajuster la largeurs des colonnes

Contenu du snippet

Bonjour!
Petite fonction bien pratique.
Elle ajuste la largeur des colonne de votre datagrid au contenus de celle-ci.
J'en ai pas trouvé sur le site alors je l'ajoute!

C'est ma première source alors on reste gentil hein? :D

Source / Exemple :


'--------------------------------------------------------------------------
'
' Ajuste la largeur des colonnes au contenus de la grid
'
' Parametres:
'               oDataGrid       -> le nom de la Datagrid à redimensionner
'               oForm           -> le nomn de la form
'
' Note: Si ColumnHeading est plus large que CellWidth, HeadingWidth est utilisé
'
'Pour l'utilisé vous appelez dans votre code comme ceci :
'                 DatagridColumnAutoResize nomForm.nomDataGrid, nomForm
'--------------------------------------------------------------------------
Public Sub DatagridColumnAutoResize(ByRef oDataGrid As DataGrid, _
                                    ByRef oForm As Form)
Dim i As Integer, iMax As Integer
Dim t As Integer, tMax As Integer
Dim iWidth As Integer
Dim vBMark As Variant
Dim aWidth As Variant
Dim cText As String
Dim oFont As Font

    On Error Resume Next

    
    
    oFont = oForm.Font
    oForm.Font = oDataGrid.Font

    iMax = oDataGrid.Columns.Count - 1
    ReDim aWidth(iMax)

    For i = 0 To iMax   'init maxwidth holder

        aWidth(i) = 0

    Next

    tMax = oDataGrid.VisibleRows - 1

    For t = 0 To tMax   'nombres de lignes

        vBMark = oDataGrid.GetBookmark(t)

        For i = 0 To iMax   'nombres de colonnes

            cText = oDataGrid.Columns(i).CellText(vBMark)
            iWidth = oForm.TextWidth(cText)

            If iWidth + ((12 * Len(cText)) + 220) > aWidth(i) Then

                'quelques ajustements manuels
                aWidth(i) = iWidth + ((12 * Len(cText)) + 220)

            End If

            If t = 0 Then   's'occupe des headers

                iWidth = oForm.TextWidth(oDataGrid.Columns(i).Caption)
                If iWidth + ((12 * Len(cText)) + 220) > aWidth(i) Then

                    aWidth(i) = iWidth + ((12 * Len(cText)) + 220)

                End If

            End If

        Next

    Next

    For i = 0 To iMax   ' Assigne la nouvelle largeur de colonne

        oDataGrid.Columns(i).Width = aWidth(i)

    Next

    oForm.Font = oFont

End Sub

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.