Afficher/masquer (avec une case à cocher) des cellules dans une plage variable
Résolu
Vunsant
Messages postés
10
Date d'inscription
Statut
Membre
Dernière intervention
-
Vunsant Messages postés 10 Date d'inscription Statut Membre Dernière intervention -
Vunsant Messages postés 10 Date d'inscription Statut Membre Dernière intervention -
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.
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
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
A voir également:
- Afficher/masquer (avec une case à cocher) des cellules dans une plage variable
- Aller à la ligne dans une cellule excel - Guide
- Masquer une conversation whatsapp - Guide
- Frédéric cherche à faire le buzz sur les réseaux sociaux. il a ajouté une image de manchots sur une image de plage. retrouvez l'image originale de la plage. que cachent les manchots ? ✓ - Forum Windows
- Verrouiller des cellules excel - Guide
- Case à cocher excel - Forum MacOS
2 réponses
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
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"?
Bonjour,
Un essai en suivant le code d'origine avec l'aide de ce lien:
https://forums.commentcamarche.net/forum/affich-37621992-methode-find-dans-vba-recherche-de-donnees-sous-excel#recherche-multiple
a adapter car je ne vois pas très bien pouvoir suivre les Item1, Item2 etc. avec ce code
Cela manque de précision!
Un essai en suivant le code d'origine avec l'aide de ce lien:
https://forums.commentcamarche.net/forum/affich-37621992-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!
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 !
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 !
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 :
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,
- 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.
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.