GRATUIT

Vos offres d'emploi informatique

Développeurs, chefs de projets, ingénieurs, informaticiens
Postez gratuitement vos offres d'emploi ici visibles par 4 000 000 de visiteurs uniques par mois

emploi.developpez.com

FAQ MS-AccessConsultez toutes les FAQ

Nombre d'auteurs : 140, nombre de questions : 926, dernière mise à jour : 30 mars 2017 

 
OuvrirSommaireFormulairesContrôlesOnglets

Il faut utiliser "Sur Changement" et tester la page active.

 
Sélectionnez

Me![CtlTab1].Value => (n° de la page sélectionnée)
Créé le 25 octobre 2004  par Rdesfx
 
Sélectionnez
Me.Texte1.Parent.Name

Où Texte1 est le nom du contrôle.

Créé le 3 septembre 2004  par Drosera

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 :

 
Sélectionnez
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 -  http://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.)

 
Sélectionnez
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.

 
Sélectionnez
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.

 
Sélectionnez
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 :

Image non disponible
rendu du code



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.

Mis à jour le 23 mai 2008  par Philippe JOCHMANS

Téléchargement : Télécharger la base exemple

  

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 © 2013 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.