IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Macro pour figer onglets [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite Avatar de methylene
    Profil pro
    Inscrit en
    Février 2010
    Messages
    659
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2010
    Messages : 659
    Par défaut Macro pour figer onglets
    Bonjour, est-il possible de figer des "onglets" comme l'on fige des volets ?

    Ayant une trentaine de pages j'aimerais bien que mes 3 premiers onglets restent figés quand je fais défiler la barre d'onglets, de façon à toujours avoir accès à mes 3 premières pages.

    Merci.

  2. #2
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Bonjour,

    Il n'est pas possible de figer les onglets mais je te propose un bricolage qui consiste à créer une petite barre de menu complémentaire avec 3 boutons permettant d'activer la feuille 1, 2 ou 3

    Dans un Module
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    Sub Ajout_BarreMenu()
    Dim Cbar As CommandBar, Cbut As CommandBarButton, x As Byte
     
    Set Cbar = CommandBars.Add(Name:="MaBarre", Position:=msoBarBottom, Temporary:=True)
     
    For x = 1 To 3
        Set Cbut = Cbar.Controls.Add(msoControlButton)
        With Cbut
            .Style = msoButtonCaption
            .Caption = "Feuille " & x
            .OnAction = "Select_feuil"
        End With
    Next x
     
    Cbar.Protection = msoBarNoMove + msoBarNoCustomize
    Cbar.Visible = True
     
    End Sub
     
    Sub Select_feuil()
    Select Case Application.CommandBars.ActionControl.Caption
        Case "Feuille 1"
            Sheets(1).Activate
        Case "Feuille 2"
            Sheets(2).Activate
        Case "Feuille 3"
            Sheets(3).Activate
    End Select
    End Sub
     
    Sub Supp_menu()
    On Error Resume Next
    CommandBars("MaBarre").Delete
    End Sub
    Dans Thisworkbook
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Workbook_BeforeClose(Cancel As Boolean)
        Supp_menu
    End Sub
     
    Private Sub Workbook_Open()
        Ajout_BarreMenu
    End Sub

  3. #3
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Oups...j'avais zappé un détail, ce que je t'ai proposé ne va pas être pratique sous Excel 2007 vu que la barre de menu va aller se placer dans l'onglet compléments.

    Dans ce cas je te propose d'ajouter les boutons permettant d'accéder aux feuilles dans le menu contextuel, accessible depuis n'importe quelle feuille via le clic droit.

    Dans un Module :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    Sub Ajout_MenuContextuel()
    Dim Cbar As CommandBarControls, Cbut As CommandBarButton, x As Byte
    Set Cbar = CommandBars("Cell").Controls
    For x = 1 To 3
        Set Cbut = Cbar.Add(msoControlButton, Temporary:=True)
        With Cbut
            .Caption = "Feuille " & x
            .OnAction = "Select_feuil"
        End With
    Next x
    End Sub
     
    Sub Select_feuil()
    Select Case Application.CommandBars.ActionControl.Caption
        Case "Feuille 1"
            Sheets(1).Activate
        Case "Feuille 2"
            Sheets(2).Activate
        Case "Feuille 3"
            Sheets(3).Activate
    End Select
    End Sub
     
    Sub Reset_MenuContextuel()
        CommandBars("Cell").Reset
    End Sub
    Dans Thisworkbook
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Workbook_BeforeClose(Cancel As Boolean)
        Reset_MenuContextuel
    End Sub
     
    Private Sub Workbook_Open()
        Ajout_MenuContextuel
    End Sub

  4. #4
    Membre émérite Avatar de methylene
    Profil pro
    Inscrit en
    Février 2010
    Messages
    659
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2010
    Messages : 659
    Par défaut
    C'était une des solutions que je cherchais. Je me demandais s'il y avait moyen d'avoir un menu commun à toutes les feuilles.

    Mais finalement j'ai résolu mon problème avec une combobox dans l'une des feuilles que je veux toujours accessible, puis je sélectionne la feuille que je souhaite, et donc cela m'affiche la feuille en question et déplace également les feuilles que je souhaite toujours visible.

    Merci pour ta solution, dommage qu'elle ne soit pas arrivé avant que je trouve la mienne, mais le bon coté des choses pour le prochain qui cherchera, 2 solutions, un problème !!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    Private Sub ComboBox2_Change()
     
    If Worksheets(NameSheet(ComboBox2.ListIndex)).Name = "Chef" Or Worksheets(NameSheet(ComboBox2.ListIndex)).Name = "Ouvrier" Then
     
    Worksheets("modele").Move after:=Worksheets("ouvrier")
     
    Else
     
    Worksheets(NameSheet(ComboBox2.ListIndex)).Activate
    Worksheets("modele").Move before:=ActiveSheet
    Worksheets(NameSheet(ComboBox2.ListIndex)).Activate
     
    End If
     
    End Sub
     
    Private Sub ComboBox2_DropButtonClick()
     
        Dim ws As Worksheet
        Dim i, j, nbfeuil As Integer
     
        i = 0
        j = 0
     
        nbfeuil = ThisWorkbook.Worksheets.Count - 1
     
        ReDim Search(nbfeuil) As String
        ReDim NameSheet(nbfeuil) As String
     
     
        For Each ws In ThisWorkbook.Worksheets
     
            If ws.Name = "modele" Or ws.Name = "Chef" Or ws.Name = "Ouvrier" Then
     
                Search(i) = Search(j)
                Search(j) = ws.Name
                NameSheet(i) = NameSheet(j)
                NameSheet(j) = ws.Name
                j = j + 1
     
            Else
     
                Search(i) = ws.Cells(2, 3).Value & " " & ws.Cells(4, 3).Value
                NameSheet(i) = ws.Name
     
     
            End If
     
            i = i + 1
     
        Next
     
       ComboBox2.List = Search
     
    End Sub
    Voila en gros mon code adapté à ma situation, j'ai donc uniquement ma feuille "modele" qui sera toujours à gauche de la feuille active, sauf si la feuille que je souhaite active est la feuille "ouvrier" ou la feuille "chef", qui sont mes feuilles les plus à gauche, dans ce cas là ma feuille "modèle" sera placé en 3ème position.

    Conclusion j'ai un "onglet figé".

  5. #5
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    Ayant une trentaine de pages j'aimerais bien que mes 3 premiers onglets restent figés quand je fais défiler la barre d'onglets, de façon à toujours avoir accès à mes 3 premières pages.

    Euh, sous 2003 à 2010, en cliquant droit sur les flèches de déplacement à gauche des onglets, tu a une lisbox native qui s'ouvre et qui te donne un accès direct aux 15 premières feuilles et à toutes si tu cliques "plus de feuilles"



    cordialement,

    Didier

  6. #6
    Membre émérite Avatar de methylene
    Profil pro
    Inscrit en
    Février 2010
    Messages
    659
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2010
    Messages : 659
    Par défaut
    Encore plus simple en effet lol

    Merci pour cette astuce qui est bonne à savoir.

    Je retourne au Vb.net, le vba c'est moins intuitif quand on connaît pas les méthodes (Intellisense pourri ...)

    Allez , et merci pour vos réponses.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] Macro pour les onglets désactivés SAUF le 1er
    Par Mariediny dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 02/06/2015, 15h04
  2. Réponses: 3
    Dernier message: 25/03/2010, 09h47
  3. Macro pour imprimer un onglet different suivant une date
    Par djoumusic dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 02/11/2009, 20h33
  4. Erreur d'éxécution d'une macro pour renommer un onglet
    Par cuterate dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 29/10/2009, 11h38
  5. Réponses: 4
    Dernier message: 12/12/2006, 12h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo