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

Résolu/Fermé
Vunsant
Messages postés
10
Date d'inscription
vendredi 23 novembre 2018
Statut
Membre
Dernière intervention
18 décembre 2018
- 23 nov. 2018 à 17:49
Vunsant
Messages postés
10
Date d'inscription
vendredi 23 novembre 2018
Statut
Membre
Dernière intervention
18 décembre 2018
- 18 déc. 2018 à 11:43
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://forums.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

2 réponses

yg_be
Messages postés
19299
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
23 mai 2022
1 105
23 nov. 2018 à 20:20
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"?
0
Vunsant
Messages postés
10
Date d'inscription
vendredi 23 novembre 2018
Statut
Membre
Dernière intervention
18 décembre 2018

23 nov. 2018 à 20:31
Bonsoir et merci !
En effet, je suis surement pas très clair...
J'ai dis ça car je suppose que la solution de mon problème réside dans le fait que les cellules concernées par l'affichage/masquage doivent être des variables. Mais ma question est : "des variables par rapport à quoi ?". J'ai donc citer le total de cellule mobilisées dans mon tableau comme une variable. Je crois que c'est ce que propose Pijaku (dans l'article linké) à travers le code suivant :

Dim maPlage As Range
Dim DernLigne As Long, DernColonne As Integer
'dernière ligne colonne A
DernLigne = Range("A" & Rows.Count).End(xlUp).Row
'dernière colonne ligne 1
DernColonne = Cells(1, Cells.Columns.Count).End(xlToLeft).Column
Set maPlage = Range(Cells(1, 1), Cells(DernLigne, DernColonne))


Dans ce code, la variable est la dernière ligne du tableau il me semble. C'est à peu prêt là où je veux en venir. Mais je n'arrive pas à intégrer un tel modèle à ma feuille de calcul et par extension au système que je souhaite mettre en place.

Merci d'avance,
0
yg_be
Messages postés
19299
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
23 mai 2022
1 105 > Vunsant
Messages postés
10
Date d'inscription
vendredi 23 novembre 2018
Statut
Membre
Dernière intervention
18 décembre 2018

23 nov. 2018 à 21:14
peux-tu donner quelques exemples de ce à quoi tu penses quand tu écris "les cellules désignées soient relatives au total des cellules"?
0
yg_be
Messages postés
19299
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
23 mai 2022
1 105 > Vunsant
Messages postés
10
Date d'inscription
vendredi 23 novembre 2018
Statut
Membre
Dernière intervention
18 décembre 2018

23 nov. 2018 à 23:09
ma question est: "des variables pour obtenir quoi ?"
c'est un peu compliqué de te donner une réponse concrète si tu ne dis pas précisément ce que tu veux obtenir.
0
Vunsant
Messages postés
10
Date d'inscription
vendredi 23 novembre 2018
Statut
Membre
Dernière intervention
18 décembre 2018

Modifié le 23 nov. 2018 à 23:13
je schématise mon problème par des exemples concrets :
- Actuellement (dans le tableur) il n'y a aucune variable, juste des cellules désignées directement par des toggle pour les afficher ou masquer. Ainsi quand j'en rajoute une après avoir fait ma programmation, ça décale tout.
- je me dis ainsi que si on rend les cellules relatives entre elles, ça pourra débloquer le problème. Comme si on leur donnait des rang.
- Avec un exemple précis : le paramètre compétence est par exemple lié à la quatrième ligne sur n ligne.
Le but final étant que je puisse ajouter des lignes ou des items sans modifier la programmation des items déjà existants.
0
yg_be
Messages postés
19299
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
23 mai 2022
1 105 > Vunsant
Messages postés
10
Date d'inscription
vendredi 23 novembre 2018
Statut
Membre
Dernière intervention
18 décembre 2018

24 nov. 2018 à 00:07
que voudrais-tu que devienne "A8,A21" quand ton fichier évolue?
0
cs_Le Pivert
Messages postés
7745
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
20 mai 2022
709
24 nov. 2018 à 11:23
Bonjour,

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

https://www.commentcamarche.net/faq/36886-methode-find-dans-vba-recherche-de-donnees-sous-excel#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!

0
Vunsant
Messages postés
10
Date d'inscription
vendredi 23 novembre 2018
Statut
Membre
Dernière intervention
18 décembre 2018

24 nov. 2018 à 12:50
Merci beaucoup ! je vais tester ça.
En l’occurrence, l'emplacement des colonnes est identifiée précisément, non ? Je pense que la solution réside peut être aussi dans le contenu des cellules (afin de les identifier individuellement plutôt que leur place même si cela risque de poser des problèmes en cas de doublon. Je vais explorer le lien que tu me donne et tester ce que tu proposes.

Merci encore !
0
cs_Le Pivert
Messages postés
7745
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
20 mai 2022
709
24 nov. 2018 à 16:25
un essai, voir si cela convient:

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

@+ Le Pivert
0
Vunsant
Messages postés
10
Date d'inscription
vendredi 23 novembre 2018
Statut
Membre
Dernière intervention
18 décembre 2018

24 nov. 2018 à 16:44
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 !
0
cs_Le Pivert
Messages postés
7745
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
20 mai 2022
709
24 nov. 2018 à 17:00
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?
0
cs_Le Pivert
Messages postés
7745
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
20 mai 2022
709
26 nov. 2018 à 09:42
une nouvelle mouture:

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

@+ Le Pivert
0