Case à cocher => Afficher/Masquer

Bonjour la communauté,

J'ai un onglet représentant des bâtiments, je souhaiterais avoir de l'aide pour afficher ou masquer les bâtiments selon les cellules/cases cochées dans l'onglet paramètre.

D'avance merci pour votre aide.

79batiments.xlsx (19.92 Ko)

Voici une solution.

J'ai adapté un peu la feuille paramètres

A+

Bonjour Blondin09, Jers19, le forum,

Une autre version, avec un USERFORM

Clique sur le bouton Choix Bâtiments et coche ceux que tu désires voir apparaitre.

Cordialement,

Bonjour

comme j'en avais une utilité pour un futur projet, merci à Jers19

j'ai rajouté par double clic gauche qui affiche ou pas la croix uniquement dans les cellules de B2: B16 de l'onglet Paramètre

le remerciement est à Jers19 et non à moi que je remercie beaucoup

j'ai remarqué que l'on pouvez également Grouper chaque bâtiments 1,2 etc. dans Données de la feuille Bâtiments

Edit : je remercie également xorsankukai avec un USF

crdlt,

André

Bonjour,

Salut à tous !

Une proposition sensiblement différente...

Le fait de devoir cocher (mettre des "X") dans des cellules ne m'a pas paru très ergonomique, j'ai donc d'une part interdit toute saisie manuelle dans le tableau de commande, et d'autre part dévolu le boulot consistant à cocher, puis à opérer le masquage-démasquage des bâtiments, au clic droit.

Ainsi un clic droit dans le tableau de commande provoque le choix d'un bâtiment (ex : clic droit en B4 ou C4, c'est B1, en D7 ou E7, c'est B9, etc.), s'il est coché on décoche (et on rend visible), s'il n'est pas coché on coche (et on masque).

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
    Dim Bt%, n%, k%, ln0%, ln1%, m As Boolean
    If Not Intersect(Target, Me.Range("B4:G8")) Is Nothing Then
        n = Target.Row: k = Target.Column - (Target.Column Mod 2)
        Bt = n - 3 + (k / 2 - 1) * 5: k = k + 1
        ln0 = Bt * 8 - 3: ln1 = Bt * 8 + 4
        Application.EnableEvents = False
        If IsEmpty(Me.Cells(n, k)) Then
            m = False: Me.Cells(n, k) = "X"
        ElseIf Me.Cells(n, k) = "X" Then
            m = True: Me.Cells(n, k).ClearContents
        End If
        Application.EnableEvents = True
        Cancel = True
        Worksheets("Bâtiments").Rows(ln0 & ":" & ln1).Hidden = m
    End If
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Me.Range("B4:G8")) Is Nothing Then
        Application.EnableEvents = False
        Application.Undo
        Application.EnableEvents = True
    End If
End Sub

Cordialement.

Bonjou

Bravo! je n'aurai jamais pensé à tout cela M.Ferrand ^^^

à partir de là, je suis complètement perdu et il me faudra quelques années avant d'arriver à effectuer cela

Bt = n - 3 + (k / 2 - 1) * 5: k = k + 1

ln0 = Bt * 8 - 3: ln1 = Bt * 8 + 4

en tout cas j'ai cliqué sur le coeur car, c'est perfect !

bon week end

Salut André...

k est la colonne cliquée ramenée à la colonne paire si sur le groupe de 2 (pair/impair) on a cliqué sur l'impaire, soit la colonne qui contient la mention du bâtiment. Le calcul que tu cites est comment à partir de k et du numéro de ligne définir le numéro du bâtiment (la détermination ensuite des lignes début et fin à traiter ne pose guère de problème).

C'est un problème général qu'on peut formuler ainsi : comment à partir d'une série numérique source, en lui appliquant le même algorithme, aboutir à une série numérique cible.

On peut (presque ) toujours y parvenir ! Mais je dois dire honnêtement que cela prend parfois du temps ! Il m'est arrivé d'y passer plus d'une journée ou d'y revenir à plusieurs reprises après avoir momentanément abandonné...

C'est à ranger dans la catégorie des casse-têtes arithmétiques mais c'est un bon entraînement et avec la pratique on s'améliore...

Cordialement.

Merci beaucoup de ces explications

arithmétiquement ! je regarderai cela à tête reposé

parole de scout !

merci

Merci à tous pour votre aide et vos réponse je vais regarder les différentes solutions.

Bonjour la communauté,

Toutes les solutions proposées correspondent parfaitement à mon souhait.

Celle de MFerrand , me va à merveille.

Par contre, si je souhaite dupliquer l'onglet "Bâtiments" avec un autre nom, comment dois je modifier le code pour que l'affichage ou le masquage se fasse sur les 2 onglets?

D'avance merci.


J'ai trouvé, j'ai doublé la ligne en changeant le nom de l'onglet. (voir le code)

        Application.EnableEvents = True
        Cancel = True
        Worksheets("Bâtiments").Rows(ln0 & ":" & ln1).Hidden = m
                Application.EnableEvents = True
        Cancel = True
        Worksheets("Bâtiments1").Rows(ln0 & ":" & ln1).Hidden = m

Rechercher des sujets similaires à "case cocher afficher masquer"