FAQ MS-Access
FAQ MS-AccessConsultez toutes les FAQ
Nombre d'auteurs : 140, nombre de questions : 926, dernière mise à jour : 15 juin 2021
Il faut utiliser "Sur Changement" et tester la page active.
Me![CtlTab1].Value
=>
(
n° de la page sélectionnée)
Me.Texte1.Parent.Name
Où Texte1 est le nom du contrôle.
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églez 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 quatre contrôles, ce seront des boutons de commande 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 quatre onglets. La taille et la position de ces contrôles seront réglées 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
' ===== déclaration des variables publiques =====
Public
tabCouleur
(
) As
Long
' stockage des couleurs dans un tableau
Public
Sub
PrepaCouleurOnglet
(
frm As
Form, ctrlOnglet As
TabControl)
' ======================================================================================
' Procedure : Module :Module1 // Procédure : PrepaCouleurOnglet
' DateTime : 09/11/2007 17:43
' Auteur : Philippe JOCHMANS - https://starec.developpez.com
' Description : Cette procédure va permettre de paramétrer les couleurs du contrôle
' onglet
'=======================================================================================
' ===== déclaration =====
Dim
intNbrPage As
Integer
' nombre de pages
Dim
i As
Integer
Dim
ctrl As
Control
' Mise en transparence du contrôle onglet
frm.Controls
(
ctrlOnglet.Name
).BackStyle
=
0
' Positionnement du rectangle servant de fond
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
' Répartition des onglets automatique pour que ceux-ci soient correctement disposés.
frm.Controls
(
ctrlOnglet.Name
).TabFixedWidth
=
frm.Controls
(
ctrlOnglet.Name
).Width
/
frm.Controls
(
ctrlOnglet.Name
).Pages.Count
' Récupération du nombre de pages
intNbrPage =
frm.Controls
(
ctrlOnglet.Name
).Pages.Count
' Redimensionnement du tableau
ReDim
tabCouleur
(
0
To
intNbrPage -
1
)
' On remplit le tableau avec les couleurs de la propriété remarque (tab) des pages
For
i =
0
To
intNbrPage -
1
tabCouleur
(
i) =
frm.Controls
(
ctrlOnglet.Name
).Pages
(
i).Tag
Next
i
' On met les couleurs dans les boutons de commande on en profite pour les positionner
' et les retailler
' ceux-ci sont nommés cmdOngletX avec X de 0 au nombre d'onglets -1
For
Each
ctrl In
frm.Controls
' On teste le nom des contrôles pour trouver les boutons
If
Left
(
ctrl.Name
, 9
) =
"cmdOnglet"
Then
' On affecte la couleur
ctrl.BackColor
=
tabCouleur
(
Mid
(
ctrl.Name
, 10
))
' On change les propriétés des boutons de commande
With
ctrl
' hauteur
.Height
=
frm.Controls
(
ctrlOnglet.Name
).TabFixedHeight
+
40
' largeur
.Width
=
frm.Controls
(
ctrlOnglet.Name
).TabFixedWidth
-
10
' légende
.Caption
=
frm.Controls
(
ctrlOnglet.Name
).Pages
(
CLng
(
Mid
(
ctrl.Name
, 10
))).Caption
' position par rapport au haut du formulaire
.Top
=
frm.Controls
(
ctrlOnglet.Name
).Top
' position par rapport au bord gauche du formulaire
.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
(
)
' Préparation de l'onglet
Call
PrepaCouleurOnglet
(
Me, Me.mstTest
)
' On affecte la couleur à la première page
Me.recFondOnglet.BackColor
=
tabCouleur
(
0
)
End
Sub
Ensuite mettez le code suivant sur l'événement Change de votre formulaire.
Private
Sub
mstTest_Change
(
)
' Sur l'événement change de notre contrôle onglet on va affecter les couleurs au rectangle de fond
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 clic des boutons de commande.
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 :
3 - Remarque :
Ce code ne fonctionne que si le style d'onglet de votre contrôle n'est pas en multiligne.
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 "Utiliser les styles Windows" soit décochée dans l'onglet Formulaire des options pour que 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.
Téléchargement : Télécharger la base exemple