Code VBA commandé par des Cases à option

Bonjour,

Je voudrais qu’en cliquant sur des cases options « Oui/Non », certaines lignes soient masquées ou non. Malheureusement mes essais ne fonctionnent pas.

Dans le fichier ci-joint par exemple, je voudrais qu’en cliquant « Oui/Non » dans la cellule B28, les lignes marquées d’un « a » dans la colonne C (lignes 29 à 35) soient masquées ou non.

Tout d’abord, ma macro ne se déclenche que si je modifie manuellement la cellule B28 (et non pas si je clique sur les cases d’option), ensuite mon code ne masque qu’une ligne à la fois au lieu de les masquer toutes et la réouverture des lignes ne donne pas non plus satisfaction.

Dans mon code, je n’ai fait des essais qu’avec les lignes marquées d’un « a », mais par la suite je serais appelé à traiter de la même manière d’autres groupes, comme par exemple les lignes marquées d’un « b » en fonction de la valeur de la cellule B38.

Pourriez-vous m’aider à résoudre ces problèmes ?

A vous relire.

47demo.zip (11.12 Ko)

Bonjour,

un premier essai à adapter

49demo-modif.zip (13.05 Ko)

Bonjour à tous,

Tu dois affecter une macro sur chaque case d'option (dans un module)

ici exemple pour B28

Sub MasqueLignes()
Dim Cel As Range
    For Each Cel In Range("c28:c35")
        If Range("b28") = 1 And Cel = "a" Then
            Cel.Rows.Hidden = True
        Else
            Cel.Rows.Hidden = False
        End If
    Next Cel
End Sub

Amicalement

Claude

Bonjour,

Merci à Zirak et à Claude pour leurs propositions.

Je n’ai peut-être pas été assez clair dans mon explication, mais les lignes marquées d’un « a », d’un « b », ou encore d’autres lettres à l’avenir, ne sont pas toutes regroupées, mais elles peuvent être un peu n’importe où sur la feuille. C’est d’ailleurs la raison pour laquelle -dans mes premiers essais - je faisais une boucle parmi toutes les lignes marquées par n’importe quelle lettre en colonne C afin de couvrir toutes les possibilités.

Ainsi, en essayant d’appliquer vos propositions en tenant compte de cette contrainte complémentaire, j’arrive à un résultat en prenant comme base la solution de Zirak, mais pas en me basant sur l’idée de Claude.

Je vous montre le résultat de mes essais en annexe. Dans le fichier Yvouille_Case option_a_b, je n’arrive pas à faire disparaitre les lignes marquées d’un « a » et en même temps celles marquées d’un « b ».

Mon problème pourrait être considéré comme résolu, cependant, si vous aviez une idée de simplification – en pensant qu’il y aura par la suite des lignes marquées d’un « c », etc., mais probablement pas plus de 5 lettres au total – elle serait la bienvenue.

Bonnes salutations.

29demo-modif-a-b.zip (14.55 Ko)

Bonjour

Ma petite solution

Une seule macro

Option Explicit

Sub MasqueLignes()
Dim Cel As Range

  Application.ScreenUpdating = False
  For Each Cel In Range("C1:C1000").SpecialCells(xlCellTypeConstants, 23)
    Cel.Rows.Hidden = ((Range("B28") = 1) * (Cel = "a")) Or ((Range("B38") = 1) * (Cel = "b"))
  Next Cel
End Sub

Salut Banzai,

Merci pour ta proposition. J'ai essayé d'affecter ta macro à chacun des 4 cases d'option concernés, mais ta macro n'est déclenchée que l'orsque je modifie les cases de la cellule B28.

Que fais-je d'incorrect ?

A te relire.

37banzai-a-b.zip (14.53 Ko)

Lorsque tu dis, n'importe ou sur la feuille, ta lettre indice (a, b ,c,..) est toujours dans la même colonne quand même , c'est juste que tu peux avoir :

ligne 1 a

ligne 2 a

ligne 3 b

ligne 4 c

ligne 5 b

ligne 6 a

ligne 7 c

etc etc ?

et tu te servirais de tes couples de boutons comme masque de saisie pour masquer les lignes avec telle ou telle lettre, voir plusieurs en même temps ? Peut-il y avoir des espaces entre certaines lignes comme dans ton fichier de base ?

Un essai ci-joint

Avec une solution à 1 bouton par lettre allant de a à e, qui se base sur le click sur le bouton, et non pas la valeur de la cellule. Solution à adapter plutôt sur des cases à cocher que des optionbuttons pour une compréhension graphique simplifiée et voir directement ce qui est coché ou pas. Ne sachant pas si il y aurait des lignes vides ou non et le nombre éventuel de tes entrées, je n'ai fais qu'une boucle sur les 1000 premières lignes pour ce fichier test, à adapter.

Bonjour

La cellule liée est B39 pour la case option en ligne ....39

A changer dans la macro

je me suis servi de ton fichier "Yvouille_case_option_a_b.xls"

Zirak,

J'ai regardé ta solution, mais je ne voudrais pas partir dans cette direction. L'utilisateur de ma tabelle devra avancer ligne après ligne et - à certains endroits - décider si tel ou tel "bloc" peut-être laissé de coté ou non(avec peut-être des lignes le concernant un peu partout dans la feuille).

Banzai,

Désolé de n'avoir pas vu moi-même le problème. Après cette petite correction ça fonctionne parfaitement. Ta solution de n'avoir qu'une seule macro pour tous les boutons d'option est vraiment intéressante.

Merci encore à tous ceux qui sont intervenu sur ce fil

Bonnes salutations.

Re,

J'avoue que sans le fichier complet, j'ai un peu de mal a cerner comment tu veux construire ton document,

au final, tu auras un groupe de bouton au dessus de chaque bloque qui pourront masquer les lignes concernées de toute la feuille (ou seulement du bloc lui-même) ?

Actuellement tel qu'est construite ta feuille, admettons qu'il y a plusieurs dizaines de lignes par bloque, l'utilisateur va être obligé de remonter en haut du bloque ou il se trouve (voir de plusieurs bloques pour désactiver les lettres précédentes) si il veut masquer un type de lettre.

Car si c'est pour toute la feuille, si tu peux te le permettre niveau construction du document, je serais toi, je ferais un petit menu dans un volet figé en haut avec les différents boutons en utilisant la technique de "un bouton pour afficher/masque 1 lettre", comme ça peut importe le nombre d'entrées, l'utilisateur à toujours accès aux commandes de masque de saisie.

Enfin si la question est résolue, c'est l'essentiel.

Cordialement.

Rechercher des sujets similaires à "code vba commande cases option"