Le contrôle Grille - CtrlGrid

Thierry GASPERMENT

Ce contrôle affiche une grille de données.

Retour à la page d'accueil.

Commentez

- Titre : Le contrôle Grille - CtrlGrid

- Auteur : Thierry GASPERMENT

- Parution : 2 décembre 2009

- Mise à jour : 18 mai 2018

- Licence : Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2009 Thierry GASPERMENT. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Droits de diffusion permanents accordés à Developpez LLC.

Sommaire

- I. Préparation du contrôle

- II. Propriétés

- III. Méthodes

- III-A. ColumnAdd

- III-B. ColumnRemove

- III-C. RowAdd

- III-D. RowRemove

- III-E. Refresh

- III-F. RefreshCell

- III-G. Clear

- III-H. AutoSize

- III-I. HeaderAutoSize

- III-J. SortRowsByValue

- III-K. GetRowByValue

- III-L. Requery

- III-M. ImageListAdd

- III-N. ImageListAddFromArray

- III-O. ImageListAddFromPicture

- III-P. ImageListAddFromControl

- III-Q. ImageListAddFromAttachment

- III-R. ImageListExists

- III-S. ImageListRemove

- III-T. ImageListRemoveAll

- IV. Evénements

- IV-A. SelectionChanged

- IV-B. ActiveRowChanged

- IV-C. BeforeDrawCell

- IV-D. MouseMove

- IV-E. MouseDown

- IV-F. MouseUp

- IV-G. MouseDblClick

- IV-H. KeyDown

- V. Exemple

I - Préparation du contrôle

Pour un formulaire qui contient un sous-formulaire ou cadre subFormGrid.

Préparation de l'objet contrôle

Option Explicit

Private WithEvents oGrid As CtrlGrid

Private Sub Form_Load() ' UserForm_Initialize pour Excel
Set oGrid = CreateTGLControl(CtrlGrid, Me.subFormGrid)
End Sub

II - Propriétés

La colonne Get indique si la propriété est disponible en lecture.

La colonne Set indique si la propriété est disponible en écriture.

Propriété

Get

Let

Type

Explication

FontName

X

X

String

Nom de la police de caractères.

FontColor

X

X

Long

Couleur de la police de caractères.

FontColorSelected

X

X

Long

Couleur de la police de caractères d’une ligne sélectionnée.

FontSize

X

X

Long

Couleur de la police de caractères, en points.

BackColor

X

X

Long

Couleur de fond du contrôle.

MultipleSelection

X

X

Boolean

Définit si la sélection multiple est possible.

MultiSelectWithoutCtrl

X

X

Boolean

Définit si la sélection multiple se fait avec ou sans appui sur la touche Control.

SelectionColor

X

X

Long

Couleur de surlignage des éléments sélectionnés.

AntialisingLevel

X

X

ETGLAntialiase

Niveau de lissage des images.
LibTGLplus propose plus de niveaux de lissage que LibTGL32.

FirstVisibleRow

X

X

Long

Numéro de la première ligne visible.
Utilisez ensuite Refresh pour mettre à jour l'affichage.

LastVisibleRow

X

Long

Numéro de la dernière ligne visible.

ActiveRow

X

CtrlGridRow

Ligne active.
La ligne active n'est pas forcément sélectionnée.

ActiveColumn

X

CtrlGridColumn

Colonne active.

CountVisible

X

Long

Nombre d'éléments affichables sur le contrôle.
Dépend de la taille du contrôle et de la taille des éléments.

Rows

X

Collection d'objets CtrlGridRow

Collection de lignes contenues dans la grille.

Columns

X

Collection d'objets CtrlGridColumn

Collection de colonnes contenues dans la grille.

SelectedRow

X

CtrlGridRow

Ligne sélectionnée.
Renvoie la première ligne trouvée.

MultipleSelectedRows

X

Collection d'objets CtrlGridRow

Collection de lignes sélectionnées.

RowByPos

X

CtrlGridRow

Recherche une ligne par sa position.

ColumnByName

X

CtrlGridColumn

Recherche une colonne par son nom.

FixedColumns

X

X

Long

Nombre de colonnes figées.

ColumnHeader

X

X

Boolean

Définit si les en-têtes de colonnes sont affichés.

HeaderHeight

X

X

Long

Hauteur des en-têtes de colonnes, en pixels.

DisplayHorizontalLine

X

X

Long

Définit l'affichage des lignes horizontales de séparation.

RowHeight

X

X

Long

Hauteur d'un élément, en pixels.

RowSource

X

X

String

Source de données de la grille.
Peut être le nom d'une requête ou d'une table, ou du SQL.
Utilisez Requery pour charger les données dans la grille.

(Access uniquement)

MouseScrollStep

X

X

Long

Pas de défilement de la molette de la souris.

(Access uniquement)

Gdi

X

clGdiplus ou clGdi32

Objet de gestion du graphisme du contrôle.

ContainerControl

X

Access.SubForm ou MSForms.Frame

Contrôle Container.

Cadre ou Sous-Formulaire.

Container

Access.Form ou MSForms.Frame

Container.

Cadre ou Formulaire.
Pour Excel, ContainerControl et Container sont identiques.

III - Méthodes

III-A - ColumnAdd

Ajoute une colonne à la grille.

Paramètre

Type

Explication

pName

String

Nom identifiant la colonne.

pType

ECtrlGridColumnType

Type de colonne.

pBefore

String

Nom de la colonne avant laquelle insérer la nouvelle colonne.

pAfter

String

Nom de la colonne après laquelle insérer la nouvelle colonne.

Valeur renvoyée

CtrlGridColumn

Colonne ajoutée.

III-B - ColumnRemove

Retire une colonne.

Paramètre

Type

Explication

pName

String

Nom identifiant la colonne.

III-C - RowAdd

Ajoute une ligne à la grille.

Paramètre

Type

Explication

pKey

String

Identifiant de la ligne.
Laisser vide pour générer automatiquement un identifiant unique.

Valeur renvoyée

CtrlGridRow

Ligne ajoutée.

III-D - RowRemove

Retire une ligne de la grille.

Paramètre

Type

Explication

pKey

String

Identifiant la ligne.

III-E - Refresh

Redessine le contrôle.

III-F - RefreshCell

Redessine une cellule.

Paramètre

Type

Explication

pRow

CtrlGridRow

Ligne contenant la cellule à redessiner.

pColumn

String

Identifiant de la colonne à redessiner.

III-G - Clear

Vide la liste.

Utilisez ensuite Refresh pour mettre à jour l'affichage.

III-H - AutoSize

Définit le redimensionnement automatique de toutes les colonnes.

III-I - HeaderAutoSize

Définit le redimensionnement automatique des colonnes en fonction des libellés de colonnes.

III-J - SortRowsByValue

Trie les lignes par valeur.

Paramètre

Type

Explication

pValueName

String

Identifiant de la valeur sur laquelle s'effectue le tri.

pDescending

Boolean

Si Vrai, le tri est descendant, sinon il est ascendant par défaut.

III-K - GetRowByValue

Recherche une ligne par une valeur.

Paramètre

Type

Explication

pValueName

String

Identifiant de la valeur sur laquelle s'effectue la recherche.

pValue

Variant

Valeur à rechercher.

Valeur renvoyée

CtrlImageListElement

Le premier élément trouvé est renvoyé.
Si aucun élément n'est trouvé, la fonction renvoie Nothing

III-L - Requery

Pour Access.

Recharge la grille avec les données de la requête SQL définie par la propriété RowSource.

III-M - ImageListAdd

Ajoute une image à la liste d'images du contrôle.

Paramètre

Type

Explication

pKey

String

Identifiant de l'image.

pFile

String

Chemin du fichier de l'image.

pThumbNail

Boolean

Si Vrai, utilise la miniature Exif pour un affichage plus rapide.
Ne fonctionne qu'avec Gdi+.

pIcon

ETGLIconType

Type d'icône à charger.

pPersistent

String

Si Vrai, l'image est persistante et ne sera pas supprimée par la fonction Clear.

Valeur renvoyée

Boolean

Vrai si l'image a été ajoutée avec succès.

III-N - ImageListAddFromArray

Ajoute une image à la liste d'images du contrôle.

L'image est définie par le contenu d'un tableau de byte.

Pour Gdi32, le tableau contient un bitmap tel que défini dans la propriété PictureData d'un contrôle image.

Pour Gdi+, le tableau contient une image telle qu'on peut la trouver dans un fichier (jpeg, png, ...).

Paramètre

Type

Explication

pKey

String

Identifiant de l'image.

pArray

Tableau de Byte

Contenu de l'image.

pPersistent

String

Si Vrai, l'image est persistante et ne sera pas supprimée par la fonction Clear.

Valeur renvoyée

Boolean

Vrai si l'image a été ajoutée avec succès.

III-O - ImageListAddFromPicture

Ajoute une image à la liste d'images du contrôle.

L'image est définie par une image et un masque gdi32.

Paramètre

Type

Explication

pKey

String

Identifiant de l'image.

pPicture

Long

Bitmap gdi32 contenant l'image.

pMask

Long

Bitmap gdi32 contenant le masque.

pDelete

Boolean

Si Vrai, les bitmaps utilisés sont ensuite supprimés.

pPersistent

Boolean

Si Vrai, l'image est persistante et ne sera pas supprimée par la fonction Clear.

Valeur renvoyée

Boolean

Vrai si l'image a été ajoutée avec succès.

Exemple :

Ajout d'une image à partir d'un contrôle de menu

With Application.CommandBars("Database").Controls(1)
oList.ImageListAddFromPicture "monbouton", .Picture, .Mask
End With

III-P - ImageListAddFromControl

Ajoute une image à la liste d'images du contrôle.

L'image est définie par le contenu d'un contrôle.

Paramètre

Type

Explication

pKey

String

Identifiant de l'image.

pControl

Control

Contrôle contenant l’image

pPersistent

String

Si Vrai, l'image est persistante et ne sera pas supprimée par la fonction Clear.

Valeur renvoyée

Boolean

Vrai si l'image a été ajoutée avec succès.

III-Q - ImageListAddFromAttachment

A partir d’Access 2007.

Ajoute une image à la liste d'images du contrôle.

L'image est définie par le contenu d’un champ pièce-jointe.

Paramètre

Type

Explication

pKey

String

Identifiant de l'image.

pTable

String

Nom de la table

pField

String

Nom de la colonne

pWhere

String

Clause where

pPersistent

String

Si Vrai, l'image est persistante et ne sera pas supprimée par la fonction Clear.

Valeur renvoyée

Boolean

Vrai si l'image a été ajoutée avec succès.

III-R - ImageListExists

Teste si une image existe dans la liste d'images du contrôle.

Paramètre

Type

Explication

pKey

String

Identifiant de l'image.

Valeur renvoyée

Boolean

Vrai si l'image existe.

III-S - ImageListRemove

Retire une image de la liste d'images du contrôle.

Paramètre

Type

Explication

pKey

String

Identifiant de l'image.

Une erreur est levée si l'identifiant n'est pas valide (image inexistante).

III-T - ImageListRemoveAll

Retire toutes les images de la liste d'images du contrôle.

Les images qui ont été ajoutées avec le paramètre pPersistent = Vrai ne sont pas retirées.

IV - Evénements

IV-A - SelectionChanged

S’exécute lorsque la sélection des lignes est modifiée.

IV-B - ActiveRowChanged

S'exécute sur changement de la ligne active.

Paramètre

Type

Explication

pRow

CtrlGridRow

Ligne active.
Nothing si aucune ligne n'est active.

IV-C - BeforeDrawCell

S'exécute avant dessin d'une cellule de la grille.

Paramètre

Type

Explication

pRow

CtrlGridRowBeforeDraw

Ligne.

pColumn

CtrlGridColumnBeforeDraw

Colonne.

Les modifications apportées à la ligne ou à la colonne ne sont pas définitives.
Elles ne sont valables que le temps du dessin de cette cellule.

IV-D - MouseMove

S'exécute sur déplacement de la souris sur le contrôle.

Paramètre

Type

Explication

pRow

CtrlGridRow

Ligne survolée par la souris.

pColumn

CtrlGridColumn

Colonne survolée par la souris.

Button

Integer

Bouton de la souris appuyé.

Shift

Integer

Etat des touches Shift, Alt et Ctrl.

X

Single

Position de la souris sur le contrôle, en twips.

Y

Single

Position de la souris sur le contrôle, en twips.

IV-E - MouseDown

S'exécute sur souris appuyée sur le contrôle.

Paramètre

Type

Explication

pRow

CtrlGridRow

Ligne survolée par la souris.

pColumn

CtrlGridColumn

Colonne survolée par la souris.

Button

Integer

Bouton de la souris appuyé.

Shift

Integer

Etat des touches Shift, Alt et Ctrl.

X

Single

Position de la souris sur le contrôle, en twips.

Y

Single

Position de la souris sur le contrôle, en twips.

IV-F - MouseUp

S'exécute sur souris relâchée sur le contrôle.

Paramètre

Type

Explication

pRow

CtrlGridRow

Ligne survolée par la souris.

pColumn

CtrlGridColumn

Colonne survolée par la souris.

Button

Integer

Bouton de la souris relâché.

Shift

Integer

Etat des touches Shift, Alt et Ctrl.

X

Single

Position de la souris sur le contrôle, en twips.

Y

Single

Position de la souris sur le contrôle, en twips.

IV-G - MouseDblClick

S'exécute sur double-clic de la souris sur le contrôle.

Paramètre

Type

Explication

pRow

CtrlGridRow

Ligne survolée par la souris.

pColumn

CtrlGridColumn

Colonne survolée par la souris.

Button

Integer

Bouton de la souris appuyé.

Shift

Integer

Etat des touches Shift, Alt et Ctrl.

X

Single

Position de la souris sur le contrôle, en twips.

Y

Single

Position de la souris sur le contrôle, en twips.

IV-H - KeyDown

S'exécute sur touche appuyée sur le contrôle.

Paramètre

Type

Explication

pRow

CtrlGridRow

Ligne survolée par la souris.

pColumn

CtrlGridColumn

Colonne survolée par la souris.

KeyCode

Integer

Code de la touche appuyée.

Shift

Integer

Etat des touches Shift, Alt et Ctrl.

V - Exemple

Pour ACCESS :

Pour un formulaire qui contient un sous-formulaire subFormGrid.

Avec une table TGridTable :

Exemple de grille affichant les données d'une table

Option Compare Database
Option Explicit

' Objet Grille
Private WithEvents oGrid As CtrlGrid

Private Sub Form_Load()
' Initialise l'objet
Set oGrid = CreateTGLControl(CtrlGrid, Me.subFormGrid)
' Affiche les en-têtes
oGrid.ColumnHeader = True
' Source de données
oGrid.RowSource = "select false as sel,* from TGridTable"
' Ajout d'une colonne de sélection (checkbox) avec le champ sel en source
With oGrid.ColumnByName("sel")
.TypeColumn = TGLColumnTypeCheckBox
.AllowResize = False
.Caption = ""
.DisplayVertLine = False
End With
' Champ notation
oGrid.ColumnByName("note").TypeColumn = TGLColumnTypeRating
' Champ progression
oGrid.ColumnByName("progression").TypeColumn = TGLColumnTypeProgress
oGrid.ColumnByName("progression").DisplayProgressPercent = True
' Champ Valide (case à cocher)
oGrid.ColumnByName("valide").Width = -1
oGrid.ColumnByName("valide").HorzAlign = TGLAlignHorzCenter
' Date validité en gras
oGrid.ColumnByName("datevalid").Bold = True
' Nom en italique
oGrid.ColumnByName("nom").Italic = True
' Exécute la requête et rempli la grille
oGrid.Requery
' Colonnes auto-redimensionnées
oGrid.AutoSize
' En-têtes auto-redimensionnés
oGrid.HeaderAutoSize
' Redimensionne la colonne de notation
oGrid.ColumnByName("note").Width = 80
' Ajout d'un bouton dans la dernière colonne
With oGrid.ColumnAdd("Button", TGLColumnTypeImage)
.Width = 60
.AllowResize = False
.MouseCursor = IDC_HAND
.ConstantValue = "monbouton"
End With
' Couleur de fond
oGrid.BackColor = RGB(230, 230, 255)
' Couleur de sélection (aucune couleur)
oGrid.SelectionColor = -1
' Sélection multiple acceptée (touche CTRL)
oGrid.MultipleSelection = True
' Les deux premières colonnes sont fixes
oGrid.FixedColumns = 2
' Ajout de l'image du bouton à partir d'une image de menu
' Référence "Microsoft Office XX Object Library" requise
Dim o As CommandBarControl
oGrid.ImageListAddFromPicture "monbouton", CommandBars("Database").Controls(1).Picture, _
CommandBars("Database").Controls(1).Mask
' Hauteur des lignes
oGrid.RowHeight = 40
' Dessine la grille
oGrid.Refresh
End Sub

'Avant affichage d'un cellule
Private Sub oGrid_BeforeDrawCell(pRow As CtrlGridRowBeforeDraw, pColonne As CtrlGridColumnBeforeDraw)
Select Case pColonne.Name
Case "nb" ' Nombre à afficher en rouge ou vert
If pRow.Value(pColonne.Name) < 300 Then pColonne.FillColor = vbRed Else pColonne.FillColor = vbGreen
Case "sel" ' Case coché si ligne sélectionnée
pRow.Value("sel") = pRow.Selected
End Select
End Sub

' Sur click souris
Private Sub oGrid_MouseDown(pRow As CtrlGridRow, pCol As CtrlGridColumn, Button As Integer, Shift As Integer, X As Single, Y As Single)
If Not pCol Is Nothing Then
If pCol.Name = "Button" Then
' Si click sur bouton => affiche un message avec le nom de la ligne cliquée
MsgBox pRow.Value("Nom")
End If
End If
End Sub

Résultat obtenu :