Transformer une cellule en bouton

Bonjour,

Je voudrais transformer une cellule en bouton.

L'idée c'est qu'en cliquant sur la ligne de synthèse d'un plan, on affiche les détails.

Un expert saurait-il m'indiquer comment faire ?

Merci !

Bonjour gloub, forum,

C'est possible en passant par du vba.

Peux-tu joindre un fichier afin d'adapter une solution ?

Voilà voilà.

L'idéal pour moi serait de transformer les cellules L8C1, L13C1 et L19C1 en boutons.

En cliquant sur le bouton, on afficherait les lignes situées sous le bouton (ce serait comme de cliquer sur le symbole du plan en face du titre, mais dans le cas de mon tableau, je préfèrerais un bouton directement dans la feuille de calcul).

Merci !

228exemple.xls (16.50 Ko)
32donnees-copie.xlsm (29.73 Ko)

Re,

C'est pas aussi facile que ça en a l'air

Comment différencie-t-on les titres des lignes à masquer/afficher ? Couleurs ? Police ?...

Merci de me répondre si vite !

Les lignes à garder toujours affichées sont les lignes de synthèse (où sont "TITRE 1", "TITRE 2", "TITRE 3").

Les lignes à masquer/afficher sont les lignes groupées sous ces lignes.

Je ne sais pas si j'arrive à être bien clair...

En fait, ce que je voulais dire c'est est-ce que les lignes de titres ont un format bien particuliers ? Dans ton exemple, les cellules contenant les titres sont orange et police en gras.

C'est ça que je voulais dire.

Elles n'ont pas forcément un format bien particulier, mais si ça facilite la solution, je veux bien les standardiser...

Bonsoir,

avec ce code, lorsque tu cliques sur un "Titre", tu développes le plan de ce titre..

Si tu cliques n'importe où dans la colonne A, tu regroupes tous les titres..

code à coller dans l'évènement de feuille (clic droit sur le nom de l'onglet, "Visualiser le code", et coller ce code)

Bonne soirée

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.ScreenUpdating = False
If Target.Count > 1 Then Exit Sub
If Target.Column = 1 Then
    Me.Outline.ShowLevels RowLevels:=1
    If Me.Rows(Target.Row).OutlineLevel = 1 Then
        ExecuteExcel4Macro "SHOW.DETAIL(1," & Target.Row & ",TRUE)"
    End If
End If
End Sub

Bonjour à tous,

Ne sachant pas me servir du mode Plan, qq pourrait-il me dire comment le retirer ?

voici une autre solution (un peu bâtarde)

Amicalement

Claude

54gloub.zip (15.01 Ko)

Bonjour claude, cousinhub,

Voici un autre code à mettre également dans l'évènement de la feuille, qui marche par un clic droit sur la cellule :

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
Dim prochain As Range
    With Target
        If .Cells.Count = 1 And .Interior.ColorIndex = 45 Then
            Cancel = True
            Application.FindFormat.Interior.ColorIndex = 45
            Set prochain = Cells.Find("", ActiveCell, , , xlByRows, , SearchFormat:=True)
            If prochain.Row - 1 > .Row Then
                Rows(.Row + 1 & ":" & prochain.Row - 1).Hidden = Not Rows(.Row + 1 & ":" & prochain.Row - 1).Hidden
            Else
                Rows(.Row + 1 & ":" & .End(xlDown).Row).Hidden = Not Rows(.Row + 1 & ":" & .End(xlDown).Row).Hidden
            End If
        End If
    End With
End Sub

Ce code marche également pour l'évènement BeforeDoubleClick de la feuille.

La cellule de titre doit être de couleur orange (45 en vba)

-- 25 Jan 2010 14:30 --

Pour claude :

J'ai complètement zappé ta question

Pour enlever le mode plan, va dans Données -> Grouper et créer un plan -> Effacer le plan

Réponse à cousinhub :

Merci pour ta réponse...mais je ne sais pas comment la faire fonctionner !

-- Lun Jan 25, 2010 3:39 pm --

Merci à Claude alias Dubois, mais j'ai absolument besoin de conserver le mode plan.

La solution bricolée est donc trop bricolée.

-- Lun Jan 25, 2010 3:48 pm --

Réponse à vba-new

Merci pour ta réponse, mais, là non plus, je ne sais pas comment l'utiliser...!

Pour mettre les codes, appuie sur Alt+F11, puis, dans la fenêtre de gauche, double-clique sur la feuille où se trouvent tes données puis colle le code donné. Voici deux fichier avec le code de cousinhub et le mien. (Ma solution passe par un clic-droit sur la cellule).

Pour claude, si tu n'as pas vu mon message. Pour enlever le mode plan, va dans Données -> Grouper et créer un plan -> Effacer le plan

247exemple-vba-new.zip (7.93 Ko)

Merci pour votre aide précieuse. Je sens que j'approche du but...mais c'est pas encore tout-à-fait ça !

Les deux méthodes (vba-new et cousinhub) marchent. En termes d'ergonomie, je préfère la méthode "cousinhub" (clic gauche sur le titre pour afficher les lignes masquées, plutôt que clic droit dans la version "vba-new" – mais bon, c'est juste une affaire de préférence personnelle).

D'autre part, je ne tiens pas spécialement à ce que les titres soient sur fond orange (je peux vouloir l'appliquer à d'autres feuilles, etc...).

Cela dit, une fois transposé à Ma Grande Feuille de Calcul, il me reste des mises au point que je ne sais pas faire pour que ça marche tout-à-fait :

  • comment faire pour déclencher l'action du "bouton" à partir d'un clic sur une cellule de la colonne 3 (par exemple), et non de la 1 ?
  • comment faire pour qu'en recliquant sur le même "bouton", ça masque les lignes que je viens d'afficher ?

Re,

En fait, si je suis passé par un clic droit, c'est parce que le problème avec le code de cousinhub c'est que le code ne se déclenche que si on clique sur une cellule différente de celle où on est. Un clic sur la même cellule n'activera donc pas le code. Ne sachant pas s'il est possible de contourner le problème, je suis passé par un clic droit.

On peut également passer par un double-clic avec le même code.

Sinon, pour la colonne 3 avec le code de cousinhub, tu peux remplacer :

If Target.Column = 1 Then

par

If Target.Column = 3 Then

Ça marche, super !

Merci beaucoup !!!

Bonsoir,

vba-new, merci j'ai vu pour supprimer le plan

gloub, résolu ?

a resolu2

...après un peu de mise en pratique, il reste encore un petit souci : j'ai collé le code de cousinhub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.ScreenUpdating = False
If Target.Count > 1 Then Exit Sub
If Target.Column = 1 Then
    Me.Outline.ShowLevels RowLevels:=1
    If Me.Rows(Target.Row).OutlineLevel = 1 Then
        ExecuteExcel4Macro "SHOW.DETAIL(1," & Target.Row & ",TRUE)"
    End If
End If
End Sub

mais du coup, je ne peux plus rien faire dans la colonne 1 sans déclencher instantanément l'affichage ou le masquage des lignes du plan.

L'idéal pour moi serait que l'action ne s'applique que quand on clique dans la ligne de synthèse du plan, mais pas dans une des lignes de "détails" (je pense que ça parlera à ceux qui sont familiers du maniement des plans).

Bonsoir,

tu n'as juste qu'à permuter 2 lignes dans le code :

Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.ScreenUpdating = False
If Target.Count > 1 Then Exit Sub
If Target.Column = 1 Then
    If Me.Rows(Target.Row).OutlineLevel = 1 Then
        Me.Outline.ShowLevels RowLevels:=1
        ExecuteExcel4Macro "SHOW.DETAIL(1," & Target.Row & ",TRUE)"
    End If
End If
End Sub

Bonne soirée

Merci cousinhub. Ça reste mystérieux, mais au moins, ça marche !!!

Bonsoir aussi (il est 10h55 à Paris, mais j'ai déjà sommeil).

Rechercher des sujets similaires à "transformer bouton"