Tutoriel pour apprendre à améliorer l'ergonomie d'une application Access

marsouin_89

Access ne propose pas nativement de pouvoir finaliser une application avec une ergonomie aboutie. À sa décharge, il faut reconnaître que Microsoft a bien amélioré l'environnement Access depuis la version 2007 et notamment avec la mise en place du ruban, ou avec la version 2010, la possibilité de personnaliser ces bons vieux boutons tout gris.
Nous allons voir comment peaufiner l'ergonomie d'une application avec quelques fonctions Access, mais surtout avec l'utilisation d'API.
Bon nombre de ces méthodes sont disponibles dans la FAQ. Nous allons simplement les mettre en application.

Commentez

- Titre : Tutoriel pour apprendre à améliorer l'ergonomie d'une application Access

- Auteur : marsouin_89

- Parution : 10 juillet 2019

- 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 ® 2019 marsouin_89. 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.

Sommaire

- I. Introduction

- II. Agrandir/Réduire la fenêtre Access

- III. Désactiver la croix rouge en haut et à droite de la fenêtre Access.

- IV. Titre de l'application

- V. Couleur d'arrière-plan

- VI. Icône de formulaire

- VII. Déroulement d'une liste

- VIII. Limiter une liste

- IX. Ajouter une valeur à une liste

- X. Texte en majuscules

- XI. Initiale d'un mot en minuscule

- XII. Caractère interdit

- XIII. Limiter la longueur d'un texte

- XIV. Changer le curseur de la souris au survol d'un bouton

- XV. Conclusion

- XVI. Remerciements

I - Introduction

Comment changer le titre de l'application, interdire à l'utilisateur de fermer l'application brutalement en cliquant sur la croix rouge située en haut et à droite de la fenêtre Access, comment changer la couleur d'arrière-plan ou encore comment dérouler une liste simplement en cliquant dans le champ. Au travers de ce tutoriel, nous allons répondre à toutes ces petites astuces qui donnent un aspect professionnel à une application. Certaines de ces méthodes ne fonctionnent pas sur Access 2007 et d'autres sont spécifiques à Office 2010 et, sans doute, valables pour Access 2013 et 2016.

II - Agrandir/Réduire la fenêtre Access

Lors de l'ouverture de l'application, il peut être intéressant de faire en sorte que l'application s'agrandisse toute seule pour occuper l'ensemble de l'écran.

Copier et coller le code suivant dans un module nommé Mod_Windows.

1. 'Dimension de la fenêtre Access

2. Public Enum TypeWindows

3. SCMINIMIZE = &HF020&

4. SCMAXIMIZE = &HF030&

5. SCRESTORE = &HF120&

6. End Enum

8. ' Déclarations

9. Const WM_SYSCOMMAND As Long = &H112

11. Private Declare Function PostMessage Lib "user32.dll" Alias "PostMessageA" ( _

12. ByVal hwnd As Long, ByVal MSG As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

14. Function WindowsDimension(WindowsSCAs TypeWindows) As Boolean

16. Dim hwnd As Long

18. hwnd = Application.hWndAccessApp

20. If hwnd <> 0 Then

21. PostMessage hwnd, WM_SYSCOMMAND, WindowsSC, 0

22. WindowsDimension = True

23. Else

24. ' Fenêtre pas trouvée

25. WindowsDimension = False

26. End If

28. End Function

Pour appeler le code :

Call WindowsDimension(SCMAXIMIZE)

Il pourrait être alors envisager d'appeler ce code à partir d'une macro AutoExec.

III - Désactiver la croix rouge en haut et à droite de la fenêtre Access.

Remarque : cette fonction ne fonctionne que pour Access 2003, 2010 et supérieur.
Pour des raisons qui n'intéressent que le concepteur d'une application, il peut être judicieux d'interdire à l'utilisateur de pouvoir cliquer sur la croix rouge située en haut et à droite de la fenêtre Access. Cela permet alors au concepteur de canaliser l'utilisateur et ainsi prévoir dans le code certaines réactions lors de la fermeture de l'application.

Copier et coller le code suivant dans un module nommé Mod_RedCross.

1. ' ***** API pour désactiver la croix rouge en haut et à droite de la fenêtre Access *****

3. Private Declare Function GetSystemMenu Lib "user32" _ (ByVal hwnd As Long, ByVal bRevert As Long) As Long

5. Private Declare Function RemoveMenu Lib "user32" _

6. (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long

8. Private Declare Function GetMenuItemCount Lib "user32" (ByVal hMenu As Long) As Long

9. Private Declare Function DrawMenuBar Lib "user32" (ByVal hwnd As Long) As Long

11. Private Const MF_BYPOSITION = &H400&

12. Private Const MF_REMOVE = &H1000&

14. Private hSysMenu As Long

16. Public Sub RedCrossLock()

17. 'Désactive la croix rouge en haut et à droite de la fenêtre Access

19. hSysMenu = GetSystemMenu(Application.hWndAccessApp, False)

21. Dim oCount As Long

22. oCount = GetMenuItemCount(hSysMenu)

24. Call RemoveMenu(hSysMenu, oCount - 1, MF_REMOVE Or MF_BYPOSITION)

25. DrawMenuBar hSysMenu

27. End Sub

30. Public Sub RedCrossActive()

31. 'Réactive la croix rouge en haut et à droite de la fenêtre Access

33. hSysMenu = GetSystemMenu(Application.hWndAccessApp, True)

34. DrawMenuBar hSysMenu

36. End Sub

Pour appeler le code :

Activer la croix rouge :

Call RedCrossActive

Désactiver la croix rouge :

Call RedCrossLock

IV - Titre de l'application

Au lieu d'avoir un beau titre Microsoft Access, nous pouvons personnaliser ce titre.
Ce paramètre peut être défini dans les options Access de la base active. Toutefois, dans le cas d'une application qui travaille alternativement sur plusieurs dorsales, il peut être utile de changer ce titre. Nous pourrions alors envisager que ce titre se trouve dans un champ de table pour chaque dorsale. Cependant, ce principe d’accès alternatif à plusieurs bases de données dorsales ne sera pas abordé dans ce tutoriel afin de rester dans le contexte du tutoriel. Cela dit, on peut également imaginer utiliser ce principe à l’ouverture de chaque formulaire.

Pour exécuter ce code, il faut activer la référence : Microsoft DAO 3.x Object Library.

Copier et coller le code suivant dans un module nommé Mod_TitleApplication.

1. Public Sub TitleApplication(Optional strTitle As String = "")

2. On Error GoTo Err

4. 'Définir le titre l'application

5. Dim prp As DAO.Property

7. 'Si pas de titre

8. If strTitle = "" Then

9. 'On supprime le titre existant

10. CurrentDb.Properties.Delete "AppTitle"

11. Else

12. 'Création du titre. Cette action déclenche l'erreur 3270

13. CurrentDb.Properties("AppTitle") = strTitle

14. End If

16. 'Rafraîchit la barre de menu

17. Application.RefreshTitleBar

19. Fin: Exit Sub

21. Err:

22. If Err.Number = 3270 Then

23. 'Création du titre

24. Set prp = CurrentDb.CreateProperty("AppTitle", dbText, strTitle)

25. 'Ajout du titre à la propriété

26. CurrentDb.Properties.Append prp

27. Resume

28. End If

29. End Sub

Exemple pour appeler le code :

Call TitleApplication("Developpez.com")

V - Couleur d'arrière-plan

Jusqu'à Access 2003, une fonction API permettait de changer la bien triste couleur grise d'arrière-plan d'Access. Cette fonction n'avait plus d'effet sous Access 2007. Depuis Access 2010, une propriété des options Access permet de changer l'arrière-plan en trois couleurs : bleu, gris clair ou noir. Comme les autres options, cela demande un redémarrage de l'application.
Ces valeurs de couleurs sont inscrites dans le registre et peuvent donc être modifiées par un utilisateur qui n'aurait pas accès aux options Access.

La clé de registre est la suivante : HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Common. La clé Theme est une clé DWORD qui prend respectivement le 1 (bleu), 2 (gris clair) et 3 (noir).

Copier et coller le code suivant dans un module nommé Mod_BackGroundColor.

1. 'Couleur d'arrière-plan

2. Public Enum BackGroundColor

3. Blue = 1

4. Grey = 2

5. Black = 3

6. End Enum

8. Public Sub BackGroundColor(regValue As BackGroundColor)

9. On Error GoTo Err

10. 'Modification d'une clé de registre

12. Dim WshShell

14. Dim strReg As String

15. 'Chemin de la clé de registre

16. strReg = "HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Common\Theme"

18. 'Modifie le registre pour changer la couleur d'arrière-plan d'Access

19. Set WshShell = CreateObject("Wscript.Shell")

20. WshShell.RegWrite strReg, regValue, "REG_DWORD"

22. Set WshShell = Nothing

24. MsgBox "Vous devez fermer puis rouvrir l'application pour que la couleur d'arrière-plan soit appliquée."

26. Fin: Exit Sub

28. Err:

29. MsgBox "Le registre est verrouillé en écriture." & vbCrLf & _

30. "Inscription de la clé de registre impossible."

31. Resume Fin

32. End Sub

Pour appeler le code :

La valeur 1 mettra l'arrière-plan en bleu.

Call BackGroundColor(1)

VI - Icône de formulaire

Une belle icône sur un formulaire améliore très justement le rendu final. Créer un répertoire, nommé Icone, dans le même répertoire que l'application. Placer dedans la ou les icônes. Dans notre exemple, l'icône se nomme Icone1.ico. Cette fonction permet également de mettre une icône dans le menu de l'application en haut et à gauche.

Copier et coller le code suivant dans un module nommé Mod_BackGroundColor.

1. '********************** Api pour l'icône de l'application et des formulaires ********************************************

3. Public Declare Function LoadImage Lib "user32" Alias _

4. "LoadImageA" (ByVal hInst As Long, ByVal lpsz As String, _

5. ByVal un1 As Long, ByVal n1 As Long, ByVal n2 As Long, _

6. ByVal un2 As Long) As Long

8. Public Declare Function SendMessage Lib "user32" Alias _

9. "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, _

10. ByVal wParam As Long, lParam As Any) As Long

12. Public Const WM_GETICON = &H7F

13. Public Const WM_SETICON = &H80

14. Public Const ICON_SMALL = 0

15. Public Const ICON_BIG = 1 'LoadImage() image types

16. Public Const IMAGE_BITMAP = 0

17. Public Const IMAGE_ICON = 1

18. Public Const IMAGE_CURSOR = 2

19. Public Const IMAGE_ENHMETAFILE = 3 'LoadImage() flags

20. Public Const LR_DEFAULTCOLOR = &H0

21. Public Const LR_MONOCHROME = &H1

22. Public Const LR_COLOR = &H2

23. Public Const LR_COPYRETURNORG = &H4

24. Public Const LR_COPYDELETEORG = &H8

25. Public Const LR_LOADFROMFILE = &H10

26. Public Const LR_LOADTRANSPARENT = &H20

27. Public Const LR_DEFAULTSIZE = &H40

28. Public Const LR_LOADMAP3DCOLORS = &H1000

29. Public Const LR_CREATEDIBHeader = &H2000

30. Public Const LR_COPYFROMRESOURCE = &H4000

31. Public Const LR_SHARED = &H8000

33. Function strIcon(str As String) As String

34. 'Fonction renvoyant le chemin de l'icône

35. strIcon = CurrentProject.Path & "\Icone\" & str & ".ico"

36. End Function

38. Public Function SetFormIcon(Optional Frm As String, Optional MyIcon As String) As Boolean

40. 'Place une icône dans le menu de l'application ou dans un formulaire

42. Dim hIcon As Long

43. Dim hwnd As Long

44. Dim IconPath As String

46. IconPath = MyIcon

48. If Len(Dir(IconPath)) = 0 Then

49. SetFormIcon = False

50. Exit Function

51. Else

52. If Frm = "" Then

53. hwnd = Application.hWndAccessApp

54. Else

55. hwnd = Forms(Frm).hwnd

56. End If

57. hIcon = LoadImage(0&, IconPath, IMAGE_ICON, 16, 16, LR_LOADFROMFILE)

59. If hIcon <> 0 Then

60. Call SendMessage(hwnd, WM_SETICON, 0, ByVal hIcon)

61. SetFormIcon = True

62. End If

63. End If

65. End Function

Pour appeler le code :

Événement : Sur chargement du formulaire

Call SetFormIcon(Me.Name,strIcon(Icone1))

Au chargement de l'application :

L'appel de cette fonction peut très bien être envisagé à partir d'une macro nommée AutoExec.

Call SetFormIcon(,strIcon(Icone1))

VII - Déroulement d'une liste

Il n'est pas toujours très pratique de viser la petite flèche d'une liste déroulante pour la dérouler. Il est effectivement plus simple de pouvoir cliquer dans le champ de la liste afin qu'elle se déroule. Quelques lignes de code permettent cela.

Copier et coller le code suivant dans un module nommé Mod_List.

1. Sub DropDownlList(Button As Integer, Ctrl As Control)

3. 'Si clic sur bouton gauche

4. If Button = 1 Then

5. 'On déroule la liste

6. Ctrl.Dropdown

7. End If

9. End Sub

Pour appeler le code :

Événement : Sur souris appuyée du formulaire :

1. Private Sub MyListDeroulante_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

3. 'Déroule la liste sur clic gauche

4. Call DropDownlList(Button, Me.MyListDeroulante)

6. End Sub

VIII - Limiter une liste

Dans le même ordre d'idée, il est parfois nécessaire que l'utilisateur ne puisse sélectionner que des éléments de la liste. Contrairement à Vb.Net, Access ne verrouille pas la liste déroulante lorsque sa propriété « Limiter à liste » est définie à Oui. Le principe consiste donc à interdire la saisie au clavier. Toutefois, il faut pouvoir laisser l'utilisateur naviguer entre les champs avec les touches de déplacement du clavier et notamment la touche Tab. Également, il peut être nécessaire de laisser la possibilité à l'utilisateur de supprimer la valeur de champ afin qu'il soit vide.

Copier et coller le code suivant dans un module nommé Mod_List.

1. Public Enum TabDel

2. TouchTab = 1

3. TouchTabDel = 2

4. End Enum

6. Sub RestrictedList(KeyCode As Integer, Optional onTouch As TabDel = 2)

8. If onTouch = 1 Then

9. 'Si touche appuyée <> de Tab

10. If KeyCode <> 9 Then

11. KeyCode = 0 'Interdit la saisie au clavier

12. End If

13. Else

14. 'Si touche appuyée <> de Tab et <> de Suppr(Del)

15. If KeyCode <> 9 And KeyCode <> 46 Then

16. 'Interdit la saisie au clavier

17. KeyCode = 0

18. End If

19. End If

21. End Sub

Pour appeler le code :

Événement : Sur touche appuyée du contrôle liste déroulante :

Private Sub MyListDeroulante_KeyDown(KeyCode As Integer, Shift As Integer)

'Liste limitée, la touche Tab peut être utilisée
Call RestrictedList(KeyCode, 1)

End Sub

Ou :

1. Private Sub MyListDeroulante_KeyDown(KeyCode As Integer, Shift As Integer)

3. 'Liste limitée, les touches Tab et Suppr (Del) peuvent être utilisées

4. Call RestrictedList(KeyCode, 2)

6. End Sub

IX - Ajouter une valeur à une liste

Dans une application, il peut être nécessaire que l'utilisateur puisse enrichir ses propres listes.
Ces listes sont issues de tables.
Nous allons voir comment proposer à un utilisateur d'ajouter une valeur à une liste.
La liste déroulante doit avoir la propriété Limiter à liste définie à Oui.

Événement : Sur absence dans liste de la liste déroulante :

1. Private Sub List_AddValueList_NotInList(NewData As String, Response As Integer)

2. On Error GoTo Err

4. 'Message pour ajouter une valeur à la liste

5. If MsgBox("Souhaitez-vous ajouter cette nouvelle valeur à la liste ?", _

6. vbYesNo + vbQuestion + vbDefaultButton2, "Ajout d'une nouvelle valeur") = vbYes Then

7. DoCmd.RunSQL "INSERT INTO Tbl_List ( Tbl_ValList ) SELECT """ & NewData & """;"

8. Response = acDataErrAdded

9. Else

10. Response = acDataErrContinue

11. Me.List_AddValueList.Undo

12. End If

14. Fin: Exit Sub

16. Err:

17. MsgBox "Erreur : " & Err.Number & vbCrLf & Err.Description

18. Resume Fin

19. End Sub

X - Texte en majuscules

Dans certains cas, la saisie d'un texte doit impérativement être en majuscules.
Par exemple, par convention, et même si aucune règle ne l'impose, les noms de famille sont écrits en majuscules afin de les distinguer des prénoms, ce qui pourrait porter à confusion (ex. : Guy Michel). De plus, le manuel de typographie française élémentaire de Yves PERROUSSEAUX précise, dixit l'Académie française, qu'à partir du moment où une machine le permet, les majuscules doivent avoir leur accentuation. Or, pour pouvoir accentuer des majuscules, il faut connaître un certain nombre de raccourcis clavier. Ce qui est loin d'être le cas pour tout le monde. Cette fonction va donc simplifier la saisie des données par les utilisateurs puisque même si le clavier est en minuscules, les caractères seront convertis en majuscules et ce, avec leur accentuation.

Événement : Sur touche activée du contrôle :

1. Private Sub Tbl_TxtMajuscule_KeyPress(KeyAscii As Integer)

3. 'On convertit chaque caractère frappé en majuscule

4. KeyAscii = Asc(UCase(Chr(KeyAscii)))

6. End Sub

XI - Initiale d'un mot en minuscule

À la suite du sujet précédent, il faut parfois imposer à l'utilisateur de commencer son texte à saisir avec une initiale minuscule.
En effet, après un mot suivi de : le mot doit commencer par une minuscule.
Par défaut, dans une application, il y a une étiquette avec un titre suivi de :.
Ce même titre sera généralement employé dans l'état de l'aperçu avant impression.
La fonction suivante vérifie donc si, lors de la saisie, le curseur est sur le 1er caractère et si c'est le cas, le caractère est converti en minuscule.
Cela dit et malgré cette règle typographique, il peut arriver dans certain cas où un mot doit impérativement commencer par une initiale majuscule.
Dans ce cas, saisir un 1er caractère, puis un second, placer le curseur au début du second caractère, puis effacer le 1er caractère avec la touche Retour.

Événement : Sur touche activée du contrôle :

1. Private Sub Tbl_InitialeMinuscule_KeyPress(KeyAscii As Integer)

3. 'Si ce n'est pas un chiffre

4. If KeyAscii > 64 Then

5. 'On vérifie si on se trouve au premier caractère

6. If Me.Tbl_InitialeMinuscule.SelStart = 0 Then

7. 'La 1re lettre est convertie en minuscule

8. KeyAscii = Asc(LCase(Chr(KeyAscii)))

9. End If

10. End If

12. End Sub

XII - Caractère interdit

Dans certains cas, il est nécessaire d'imposer les caractères de saisie qui peuvent être utilisés.
Cette fonction permet de définir d'une liste de caractères autorisés.

Événement : Sur touche activée du contrôle :

1. Private Sub Tbl_CaractereLimite_KeyPress(KeyAscii As Integer)

3. 'N'autorise que les caractères de la liste ainsi que les touches Tab, Suivant, Enter

4. If InStr("1234567890abcdefghijklmnopqrstuvwxyz-" & Chr(8) & Chr(9) & Chr(13), Chr$(KeyAscii)) = 0 Then

5. MsgBox "Seules les lettres de l'alphabet, " & _

6. "les chiffres de 0 à 9 et le caractère spécial « « - » sont autorisés", , "Caractère interdit"

7. KeyAscii = 0

8. End If

10. End Sub

XIII - Limiter la longueur d'un texte

Si un champ est défini à 255 caractères dans une table, nous pourrons saisir 255 caractères dans ce même champ de formulaire même s'il ne fait que 2 cm de longueur. Se pose alors le problème de l'aperçu avant impression. En effet, dans ce cas, le texte sera tronqué et le document ne reflétera pas ce que l'on souhaite réellement présenter. Cette fonction permet de limiter la longueur du texte en fonction de la longueur de champ de formulaire.

Copier et coller le code suivant dans un module nommé Mod_LimitTextToControl.
Ne parlant anglais, vous m'excuserez si quelques commentaires ne sont pas traduits.

1. Const LOGPIXELSX = 88

2. Const LOGPIXELSY = 90

3. Const TWIPSPERINCH = 1440

5. Type Size

6. cx As Long

7. cy As Long

8. End Type

10. Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long

12. Declare Function GetDeviceCaps Lib "gdi32" (ByVal hDC As Long, _

13. ByVal nIndex As Long) As Long

15. Declare Function GetFocus Lib "user32" () As Long

17. Declare Function GetTextExtentPoint Lib "gdi32" Alias _

18. "GetTextExtentPointA" (ByVal hDC As Long, ByVal lpsz As String, _

19. ByVal cbString As Long, lpSIZE As Size) As Long

21. Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, _

22. ByVal hDC As Long) As Long

24. Private Sub ConvertPixelsToTwips(X As Long, Y As Long)

25. Dim hDC As Long, hwnd As Long, RetVal As Long

26. Dim XPIXELSPERINCH As Long, YPIXELSPERINCH As Long

28. 'Récupère le nombre actuel de pixels par pouces, dépendant de la résolution.

29. hDC = GetDC(0)

30. XPIXELSPERINCH = GetDeviceCaps(hDC, LOGPIXELSX)

31. YPIXELSPERINCH = GetDeviceCaps(hDC, LOGPIXELSY)

32. RetVal = ReleaseDC(0, hDC)

34. ' Transforme la mesure en twips.

35. X = (X / XPIXELSPERINCH) * TWIPSPERINCH

36. Y = (Y / YPIXELSPERINCH) * TWIPSPERINCH

37. End Sub

39. Sub LimitTextToControlWidth(KeyAscii As Integer)

41. Dim AC As Control

42. Dim Txt As String

43. Dim TxtWidth As Long, SpaceWidth As Long

44. Dim hwnd As Long, hDC As Long

45. Dim lpSIZE As Size

46. Dim RetVal As Long

48. ' Sortie si un caractère non imprimable est tapé

49. If KeyAscii < 32 Then Exit Sub

51. ' Déclare le contrôle actif

52. Set AC = Screen.ActiveControl

54. ' Sélectionne le contrôle texte

55. Txt = AC.Text & ""

57. ' Ajoute le caractère tapé dans le texte

58. If KeyAscii > 32 Then

59. Txt = Left(Txt, AC.SelStart)

60. Txt = Txt & Chr$(KeyAscii)

61. Txt = Txt & Mid(Txt, AC.SelStart + 1 + AC.SelLength)

62. End If

64. hwnd = GetFocus()

65. hDC = GetDC(hwnd)

67. ' Convertit la largeur du texte en Twips.

68. RetVal = GetTextExtentPoint(hDC, Txt, Len(Txt), lpSIZE)

69. ConvertPixelsToTwips lpSIZE.cx, lpSIZE.cy

70. TxtWidth = lpSIZE.cx

72. 'Convertit la largeur des espaces en Twips

73. RetVal = GetTextExtentPoint(hDC, " ", 1, lpSIZE)

74. ConvertPixelsToTwips lpSIZE.cx, lpSIZE.cy

75. SpaceWidth = lpSIZE.cx

77. ' Y a-t-il des espaces à traiter ?

78. If AC.SelStart + 1 > Len(Txt) Then

79. TxtWidth = TxtWidth + ((AC.SelStart + 1 - Len(Txt)) * SpaceWidth)

80. End If

82. ' Si largeur du texte >= à la largeur du champ

83. If (TxtWidth + (SpaceWidth / 2)) >= AC.Width Then

84. Beep

85. ' Arrêt de la saisie

86. KeyAscii = 0

87. End If

89. End Sub

Pour appeler le code :

Événement : Sur touche activée du contrôle :

1. Private Sub Tbl_LimitText_KeyPress(KeyAscii As Integer)

3. 'Limite la saisie à la longueur du champ

4. Call LimitTextToControlWidth(KeyAscii)

6. End Sub

XIV - Changer le curseur de la souris au survol d'un bouton

Access 2010 propose enfin de pouvoir animer les boutons en définissant une forme ou une couleur différente au survol ou non dudit bouton. Cela dit, il manque la possibilité de changer l'aspect du curseur au survol du bouton.

Copier et coller le code suivant dans un module nommé Mod_Cursor.

1. '32512 flèche

2. '32513 curseur en I

3. '32514 sablier

4. '32515 croix

5. '32516 flèche vers le haut

6. '32640, 32642, 32643, 32644, 32645, 32646 doubles flèches de redimensionnement

7. '32648 stationnement interdit

8. '32650 flèche sablier

10. Public Const HandCursor = 32649&

12. Public Declare Function SetCursor Lib "user32" (ByVal hCursor As Long) As Long

14. Public Declare Function LoadCursor Lib "user32" Alias "LoadCursorA" _

15. (ByVal hInstance As Long, ByVal lpCursorName As Long) As Long

17. Sub BtnHandCursor()

19. 'Curseur Main lorsque la souris arrive sur le bouton

20. Dim lHandle As Long

21. lHandle = LoadCursor(0, HandCursor)

22. If (lHandle > 0) Then SetCursor lHandle

24. End Sub

Pour appeler le code :

Événement : Sur touche déplacée du bouton :

1. Private Sub Btn_Icone_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)

3. 'Affiche une main au survol du bouton

4. Call BtnHandCursor

6. End Sub

XV - Conclusion

Au travers de toutes ces petites astuces, une application peut avoir son ergonomie nettement améliorée permettant ainsi d'obtenir un résultat de qualité.

XVI - Remerciements

Nous tenons à remercier marsouin_89 pour la rédaction de ce tutoriel, Chrtophe et Gaby277 pour la relecture technique et Claude Leloup pour la correction orthographique.