Menu

Afficher/masquer (avec une case à cocher) des cellules dans une plage variable

Messages postés
9
Date d'inscription
vendredi 23 novembre 2018
Dernière intervention
29 novembre 2018
- - Dernière réponse : yg_be
Messages postés
7060
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
17 décembre 2018
- 29 nov. 2018 à 20:53
Bonjour à tous !

Je fais de la VBA depuis peu de temps. Souhaite mettre en place un document où mes étudiants peuvent monitorer leur progression en fonction de divers paramètre issu d’un référentiel (Compétence, tâches et items).

Je souhaite donc mettre en place un Excel dont l’interface permet de choisir quel(s) paramètre afficher. J’ai donc mis en place 3 toggle (cases à cocher) permettant d’afficher/masquer indépendamment les 3 paramètres cités plus haut.

J’y suis arrivé sans trop de problème grâce à ce que j’ai trouvé sur internet. Voici un exemple de code.

Private Sub CheckBox1_Click()
Range("A8,A21").EntireRow.Hidden = Not Range("A8").EntireRow.Hidden
End Sub

Private Sub CheckBox2_Click()
Range("A9,A15,A22,A28").EntireRow.Hidden = Not Range("A9").EntireRow.Hidden
End Sub

Private Sub CheckBox3_Click()
Range("A10:A13,A16:A19,A23:A26,A29:A32").EntireRow.Hidden = Not Range("A10").EntireRow.Hidden
End Sub


Le problème est que je vais être amené à modifier fréquemment le document en y ajoutant des lignes et colonnes. Il faut donc que les cellules désignées soient relatives au total des cellules (début et fin du document).

Je pense que ce qui est abordé dans cette discussion ( https://www.commentcamarche.net/forum/affich-18351850-vba-excel-selection-d-une-plage-variable ) solutionne en parti mon problème (merci Pijaku) mais le fait est que je peine beaucoup à l’intégrer à mon système. Comment indiquer avec ce nouveau fonctionnement quelles cellules sont affectées par un toggle ?

Voici un document synthétisant mon problème :

https://drive.google.com/file/d/1R8DPLGuLhblZabN03ComUh0vQtWDHvTp/view?usp=sharing

Je me tiens à disposition pour donner plus de détails si nécessaire. Je vous remercie beaucoup par avance !

Vincent


Configuration: Windows / Firefox 63.0
Afficher la suite 

Votre réponse

2 réponses

Messages postés
7060
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
17 décembre 2018
0
Merci
bonjour, peux-tu donner quelques exemples de ce à quoi tu penses quand tu écris "les cellules désignées soient relatives au total des cellules"?
Vunsant
Messages postés
9
Date d'inscription
vendredi 23 novembre 2018
Dernière intervention
29 novembre 2018
-
Ben justement, toute la question est là ! Si j'ai bien compris, un plage c'est un ensemble de ligne, non ?
Il serait donc possible de créer des plages précises. Chaque plage comprendrait une compétences ainsi que les tâches et items qui y sont rattachés.

Donc je vois où tu veux en venir dans le code que tu proposes. Il s'agirait de nommer et définir les plages au préalable. Je vais tester ça. Merci !
yg_be
Messages postés
7060
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
17 décembre 2018
> Vunsant
Messages postés
9
Date d'inscription
vendredi 23 novembre 2018
Dernière intervention
29 novembre 2018
-
cela fonctionnera bien si tes plages sont préservées quand tu modifies ton document. l"ajout de lignes en dehors des plages devrait préserver cela.
il est possible de créer des plages non contiguës, pour le troisième clic.
yg_be
Messages postés
7060
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
17 décembre 2018
> Vunsant
Messages postés
9
Date d'inscription
vendredi 23 novembre 2018
Dernière intervention
29 novembre 2018
-
as-tu testé?
Vunsant
Messages postés
9
Date d'inscription
vendredi 23 novembre 2018
Dernière intervention
29 novembre 2018
-
Qu'est ce que tu appelles le troisième clic ?
Merci !
yg_be
Messages postés
7060
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
17 décembre 2018
> Vunsant
Messages postés
9
Date d'inscription
vendredi 23 novembre 2018
Dernière intervention
29 novembre 2018
-
le clic sur ta troisième coche.
Commenter la réponse de yg_be
Messages postés
5621
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
17 décembre 2018
0
Merci
Bonjour,

Un essai en suivant le code d'origine avec l'aide de ce lien:

https://www.commentcamarche.com/faq/36886-vba-recherche-de-donnees-la-methode-find#recherche-multiple


Option Explicit
Dim ligne As Integer
Dim plage As Range
Dim colonne As String
Private Sub CheckBox1_Click()
If CheckBox1.Value = True Then
colonne = "C"
Principale ("Compétence 1")
Principale ("Compétence 2")
Else
  Rows("1:100").EntireRow.Hidden = False
 End If
End Sub
Private Sub CheckBox2_Click()
If CheckBox2.Value = True Then
colonne = "D"
Principale ("Tâche1")
Principale ("Tâche2")
Else
  Rows("1:100").EntireRow.Hidden = False
 End If
End Sub
Private Sub CheckBox3_Click()
If CheckBox3.Value = True Then
colonne = "E"
Principale ("Item1")
Principale ("Item2")
Principale ("Item3")
Principale ("Item4")
Else
  Rows("1:100").EntireRow.Hidden = False
 End If
 End Sub
Sub Principale(ByVal nom As String)
Dim Lignes(), i As Long
Dim Texte As String
Dim plage As Range

Dim Flag As Boolean
Set plage = Sheets("Feuil1").Range(colonne & ":" & colonne)  'plage de recherche
Texte = nom  'expression cherchée
Flag = Find_Next(plage, Texte, Lignes())  'appel de la fonction
If Flag Then  'si fonction retourne Vrai = expression trouvée dans la plage
    For i = LBound(Lignes) To UBound(Lignes)   'restitution des lignes correspondantes
        ligne = Lignes(i)
       Range(ligne & ":" & ligne).EntireRow.Hidden = True
    Next i
Else
    MsgBox "L'expression : " & Texte & " n'a pas été trouvée dans la plage : " & plage.Address
End If
End Sub
'Sources : Michel_m
'http://www.commentcamarche.net/forum/affich-31432413-importation-de-donnees-sans-doublons#9
Function Find_Next(Rng As Range, Texte As String, Tbl()) As Boolean
Dim Nbre As Integer, Lig As Long, Cptr As Long
On Error Resume Next
    Nbre = Application.CountIf(Rng, Texte)
    If Nbre > 0 Then
        ReDim Tbl(Nbre - 1)
        Lig = 1
        For Cptr = 0 To Nbre - 1
            Lig = Rng.Find(Texte, Cells(Lig, Rng.Column), xlValues).Row
            Tbl(Cptr) = Lig
        Next
    Else
        GoTo Absent
    End If
    Find_Next = True
    Exit Function
Absent:
    Find_Next = False
End Function


a adapter car je ne vois pas très bien pouvoir suivre les Item1, Item2 etc. avec ce code
Cela manque de précision!

Vunsant
Messages postés
9
Date d'inscription
vendredi 23 novembre 2018
Dernière intervention
29 novembre 2018
-
J'ai déjà fait un test avec le code précédent que tu as envoyé. ça marche hormis le fait qu'il faudrait l'action des cases (c'est à dire quand la case est cochée, les paramètres liés s'affichent). En revanche le doc que tu as envoyé ne semble pas fonctionner !
cs_Le Pivert
Messages postés
5621
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
17 décembre 2018
-
Qu'est ce qui ne fonctionne pas?

Quand on clique sur une checkbox les lignes vides se masquent, au second clic elles s'affichent de nouveau.

Ce n'est pas le résultat attendu?
cs_Le Pivert
Messages postés
5621
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
17 décembre 2018
-
une nouvelle mouture:

https://www.cjoint.com/c/HKAiPHEq4HQ

@+ Le Pivert
Vunsant
Messages postés
9
Date d'inscription
vendredi 23 novembre 2018
Dernière intervention
29 novembre 2018
-
Pardon de mettre du temps à répondre, j'ai eu quelques jours très chargés !
Il ne s'agit pas de pouvoir enlever les espaces, mais de pouvoir gérer l'affichage des différents paramètres à partir des cases à cocher.
L'enjeu est simplement que je souhaite pouvoir ajouter des cases ou colonnes sans devoir rééditer ma macro. C'est en cela que le document que j'ai mis à disposition à la base ne fonctionnent pas. Car si j'ajoute une ligne, ça décale tout !
Les deux derniers document du coup ne fonctionnent pas. En tout cas merci d'essayer de m'aider !
cs_Le Pivert
Messages postés
5621
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
17 décembre 2018
-
J'ai mis des lignes vides simplement pour faire voir que l'on peut les cacher. Vous pouvez les remplir et en ajouter, cela fonctionnera toujours!
Par contre si vous ajoutez des colonnes cela ne pourra pas fonctionner!
Commenter la réponse de cs_Le Pivert