1 – Préparation :
L'onglet comporte une propriété Style de Fond, celle-ci sera réglée à Transparent par le code. De plus chaque page de l'onglet a une propriété Remarque (TAG), dans celle-ci vous mettrez la couleur que vous souhaitez, il s'agit d'un nombre de type long, que vous pouvez récupérer en sélectionnant une couleur sur n'importe quel autre contrôle.
Sur votre formulaire positionnez un contrôle rectangle (que nous nommerons recFondOnglet), celui-ci aura un fond opaque (réglé la propriété Style de Fond à standard), et positionnez le en arrière plan (Menu : Format/Mettre en Arrière plan). La position et la taille de ce formulaire seront réglées par le code.
Sur ce formulaire vous allez positionner 4 contrôles, ce sera des boutons de commandes MS Forms 2.0, vous les trouverez sous le nom Microsoft Forms 2.0 CommandButton dans le menu : Insertion/Contrôle ActiveX …
Ces boutons seront nommés cmdOngletX avec X variant de 0 à 3, car dans l'exemple nous avons 4 onglets. La taille et la position de ces contrôles seront réglés par le code, ceux-ci se positionneront à la place des onglets.
Nous utilisons ce contrôle, car celui-ci va toujours rester au-dessus.
2 - Code :
Option Compare Database
Option Explicit
Public tabCouleur () As Long
Public Sub PrepaCouleurOnglet (frm As Form, ctrlOnglet As TabControl)
Dim intNbrPage As Integer
Dim i As Integer
Dim ctrl As Control
frm. Controls (ctrlOnglet. Name ). BackStyle = 0
With frm. recFondOnglet
. Top = frm. Controls (ctrlOnglet. Name ). Top
. Left = frm. Controls (ctrlOnglet. Name ). Left
. Height = frm. Controls (ctrlOnglet. Name ). Height
. Width = frm. Controls (ctrlOnglet. Name ). Width
End With
frm. Controls (ctrlOnglet. Name ). TabFixedWidth = frm. Controls (ctrlOnglet. Name ). Width / frm. Controls (ctrlOnglet. Name ). Pages . Count
intNbrPage = frm. Controls (ctrlOnglet. Name ). Pages . Count
ReDim tabCouleur (0 To intNbrPage - 1 )
For i = 0 To intNbrPage - 1
tabCouleur (i) = frm. Controls (ctrlOnglet. Name ). Pages (i). Tag
Next i
For Each ctrl In frm. Controls
If Left (ctrl. Name , 9 ) = " cmdOnglet " Then
ctrl. BackColor = tabCouleur (Mid (ctrl. Name , 10 ))
With ctrl
. Height = frm. Controls (ctrlOnglet. Name ). TabFixedHeight + 40
. Width = frm. Controls (ctrlOnglet. Name ). TabFixedWidth - 10
. Caption = frm. Controls (ctrlOnglet. Name ). Pages (CLng (Mid (ctrl. Name , 10 ))). Caption
. Top = frm. Controls (ctrlOnglet. Name ). Top
. Left = frm. Controls (ctrlOnglet. Name ). Left + CLng (Mid (ctrl. Name , 10 )) * frm. Controls (ctrlOnglet. Name ). TabFixedWidth + 10
End With
End If
Next ctrl
End Sub
|
Ensuite appelez ce code sur l'évènement Load du formulaire. (Dans notre cas, le contrôle onglet se nomme mstTest.
Private Sub Form_Load ()
Call PrepaCouleurOnglet (Me, Me. mstTest )
Me. recFondOnglet . BackColor = tabCouleur (0 )
End Sub
|
Ensuite mettez le code suivant sur l'évènement Change de votre formulaire.
Private Sub mstTest_Change ()
Select Case Me. mstTest . Value
Case 0
Me. recFondOnglet . BackColor = tabCouleur (0 )
Case 1
Me. recFondOnglet . BackColor = tabCouleur (1 )
Case 2
Me. recFondOnglet . BackColor = tabCouleur (2 )
Case 3
Me. recFondOnglet . BackColor = tabCouleur (3 )
End Select
End Sub
|
Ensuite ce code sur l'évènement click des boutons de commandes.
Private Sub cmdOnglet0_Click ()
Me. mstTest . Value = 0
End Sub
Private Sub cmdOnglet1_Click ()
Me. mstTest . Value = 1
End Sub
Private Sub cmdOnglet2_Click ()
Me. mstTest . Value = 2
End Sub
Private Sub cmdOnglet3_Click ()
Me. mstTest . Value = 3
End Sub
|
Voilà le résultat :
 rendu du code
3 – Remarque :
Ce code ne fonctionne que si le style d'onglet de votre contrôle n'est pas en Multi-Ligne.
Si vous rajoutez des contrôles sur vos pages, n'oubliez pas de remettre le rectangle en arrière plan.
Cet exemple est fait avec plusieurs couleurs, vous pouvez bien sûr n'en prendre qu'une.
Attention : Si vous utilisez Access 2003, il faut que l'option "Utilisez les styles Windows" soit décoché dans l'onglet Formulaire des options pour cette astuce fonctionne.
Ce code fonctionne sur les versions Access 2000, 2002 et 2003, il n'a pas été testé sur les versions 97 et 2007.
|