XL 2013 [Résolu] Configurer bouton d'option

Ginko

XLDnaute Nouveau
Bonjour à tous,

Je vais essayer d'être clair :

Pour me créer différentes catégories dans une même feuille, j'ai pour habitude d'utiliser la fonction Grouper/Dissocier. Or je me suis rendu compte que cela ne fonctionnait pas correctement lorsque ces parties contiennent des Zones de groupe avec boutons ; ces derniers se compactent en bouillie.

J'ai rapidement compris qu'il fallait pour cela utiliser leurs équivalent ActiveX. Et c'est là où le bât blesse : je ne connais pas grand chose à VBA (mis à part des bouts de code récupérés ci et là pour des fonctions biens précises), ce qui m'empêche complètement d'exploiter ces boutons.

Ce que je fais :

- Insérer > Autres contrôles > Microsoft Forms 2.0 Frame
Puis une fois le cadre positionné :
- Clic droit > Objet du cadre > Edition > Clic droit > Boite à outils > Bouton d'option

J'aurai trois questions :

1. Est-ce la bonne manière de faire ?
2. Comment récupérer le résultat en fonction de l'option coché ?
3. La procédure est-elle encore différente avec "Case à cocher" ?

Avec les options classiques, il suffisait d'indiquer une cellule de renvoi et d'y exploiter le résultat. Ici il faut coder quelques lignes mais même en venant de passer deux heures à essayer de trouver une réponse simple sur le net je n'ai toujours pas compris la syntaxe et les options qui rentrent en jeu.

Merci d'avance !
 
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour et bienvenue sur XLD :),

Vous auriez pu joindre le fichier de base (version sans ActiveX), c'est bien vu sur XLD ;)

Le fichier joint ne comporte pas d'ActiveXL. Les contrôles ont tous leur propriété "Positionnement de l'objet" à la valeur "Ne pas déplacer ou dimmensionner avec les cellules" (clique droit / Format de contrôle / onglet Propriétés)
 

Pièces jointes

  • Cervoz- Positionnement avec Plan- v1.xlsx
    13.6 KB · Affichages: 40

Ginko

XLDnaute Nouveau
Bonjour et bienvenue sur XLD :),

Vous auriez pu joindre le fichier de base (version sans ActiveX), c'est bien vu sur XLD ;)

Le fichier joint ne comporte pas d'ActiveXL. Les contrôles ont tous leur propriété "Positionnement de l'objet" à la valeur "Ne pas déplacer ou dimmensionner avec les cellules" (clique droit / Format de contrôle / onglet Propriétés)

Bonjour Mapomme,

Merci de votre réponse.
En fait c'est exactement l'inverse que je souhaite faire, pouvoir réduire avec les boutons sans que cela devienne moche.

Je vous joins un exemple.
 

Pièces jointes

  • Extrait - mapomme.xlsx
    23.8 KB · Affichages: 47

Paf

XLDnaute Barbatruc
Bonjour Cervoz, mapomme, Staple1600,

un essai par macro :

si les lignes sont masquées, les formes correspondantes le sont également et inversement.

Seul bémol, l'évènement Calculate( utilisé pour déclencher la macro) se déclenche bien si on utilise les + ou - dans la "marge" mais pas si on clique sur le 1 pour n'afficher que le premier niveau...

Code:
Private Sub Worksheet_Calculate()
    Shapes("Zone de groupe 9").Visible = Not Worksheets("Ventilation").Rows(10).Hidden
    Shapes("Case d'option 4").Visible = Not Worksheets("Ventilation").Rows(10).Hidden
    Shapes("Case d'option 5").Visible = Not Worksheets("Ventilation").Rows(10).Hidden
    Shapes("Case d'option 6").Visible = Not Worksheets("Ventilation").Rows(10).Hidden
    Shapes("Case d'option 7").Visible = Not Worksheets("Ventilation").Rows(10).Hidden
    Shapes("Case à cocher 1").Visible = Not Worksheets("Ventilation").Rows(10).Hidden
    Shapes("Case à cocher 2").Visible = Not Worksheets("Ventilation").Rows(10).Hidden
    Shapes("Case à cocher 3").Visible = Not Worksheets("Ventilation").Rows(10).Hidden
    Shapes("Case à cocher 8").Visible = Not Worksheets("Ventilation").Rows(10).Hidden
' à adapter pour une ligne quelconque du groupe 'cave'
End Sub

A+
 

Paf

XLDnaute Barbatruc
Re,

une 'astuce' (bidouille) pour que Calculate se déclenche à l'usage de + et -:
dans une cellule susceptible d'être masquée mettre une formule faisant référence à une autre cellule .
Par exemple en A5 : =A23 (modifier la couleur d'affichage si nécessaire)

A+
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour Staple1600 ;),

Tu as l'oeil vif et la truffe humide ce matin. Tu ne laisses rien passer. Je m'en vais me cacher coupable et honteux dans la poche de mon kangourou (de slip bien sûr!).
upload_2016-10-1_14-24-58.png
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour Cervoz, Staple1600, Paf,

Un autre essai. La cellule qui sert à détecter le recalcul est la cellule A1 avec la formule =SOUS.TOTAL(3;B:B) et au format personnalisé ;;;

Le code :
VB:
Private Sub Worksheet_Calculate()
Dim shp As Shape, xrgForme As Range, xrgVisible As Range

   Set xrgVisible = Range("b5:b" & Rows.Count).SpecialCells(xlCellTypeVisible).EntireRow
   On Error Resume Next
   For Each shp In Me.Shapes
      Set xrgForme = Range(shp.TopLeftCell, shp.BottomRightCell).EntireRow
      If Intersect(xrgVisible, xrgForme).Address <> xrgForme.Address Then
         shp.Visible = False
      Else
         shp.Visible = True
      End If
   Next shp
End Sub
 

Pièces jointes

  • Cervoz- afficher formes- v1.xlsm
    30.9 KB · Affichages: 38

Ginko

XLDnaute Nouveau
Super, merci beaucoup à vous deux !

Du coup j'ai utilisé la solution de mapomme et c'est parfait, juste ce qu'il me fallait. Vous m'ôtez une sérieuse épine du pied.

Serait-il possible d'avoir quelques explications ?
 

Staple1600

XLDnaute Barbatruc
Bonjour à tous

Juste parce que je voudrais savoir ce qu'en pense mapomme
(et parce que de si bon matin, y'a pas beaucoup de nouvelles questions à se mettre sous la dent );)
VB:
Private Sub Worksheet_Calculate()
Dim shp As Shape, xrgForme As Range, xrgVisible As Range
Set xrgVisible = Range("b5:b" & Rows.Count).SpecialCells(xlCellTypeVisible).EntireRow
On Error Resume Next
Application.ScreenUpdating = False
    For Each shp In Me.Shapes
    Set xrgForme = Range(shp.TopLeftCell, shp.BottomRightCell).EntireRow
        shp.Visible = Not (Intersect(xrgVisible, xrgForme).Address <> xrgForme.Address)
    Next shp
End Sub
Ca marche aussi avec
shp.Visible = (Intersect(xrgVisible, xrgForme).Address = xrgForme.Address)
 
Dernière édition:

Statistiques des forums

Discussions
315 080
Messages
2 116 024
Membres
112 638
dernier inscrit
Kapucine