Boostez vos compétences Excel avec notre communauté !
Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force.
Apprenez, échangez, progressez – et tout ça gratuitement !
👉 Inscrivez-vous maintenant !
J'ai un classeur excel regroupant une trentaine de feuille.
Sur chaque feuilles j'ai également une trentaine de checkbox avec macro. (certaine sont identiques entre feuilles, d'autre non..) . Risquant d'augmenter au fil du temps (aussi bien les feuilles que les boutons).
Chaque checkbox , ou presque, marche par paire, si l'une est cochée l'autre non, possibilité de décocher les deux, et parfois action en fonction (masquer ou non des feuilles).
Ce qui me donne sur chaque feuille environ trente fois cela (de manière a copier coller chaque feuille VBA pour ne pas trier si bouton similaire il y a ou non..) :
Private Sub CheckBox1_Click()
If CheckBox1.Value = True Or CheckBox2.Value = True Then 'si une des deux cases est cochée
Sheets("Feuil2").Visible = True 'une feuille apparait
Else
Sheets("Feuil2").Visible = False 'sinon la feuille est masquée
End If
If CheckBox1.Value = True Then 'si l'une est cochée
CheckBox2.Value = False 'l'autre est décochée
End If
End Sub
Private Sub CheckBox2_Click()
If CheckBox2.Value = True Or CheckBox1.Value = True Then
Sheets("Feuil2").Visible = True
Else
Sheets("Feuil2").Visible = False
End If
If CheckBox2.Value = True Then
CheckBox1.Value = False
End If
End Sub
pareil avec checkbox3 et checkbox4, avec 5 et 6, etc.... Sachant que sur mes feuilles les noms sont du type "nom_type1" et "nom_type2" .
Etant donné que je peux être ameneer à réutiliser les boutons sur les différentes feuilles, à chaque modifications des codes, je selectionne tout, et le copie/colle sur toutes les autres feuilles. C'est lourd, long , et je m'y perds.
Comment faire pour utiliser thisworkbook afin que ce codage soit executer sur toutes les feuilles? Il doit y avoir for each ws in worksheets etc... Mais je n'arrive pas à l'utiliser.
Voila je vous fais par venir un exmple avec seulement deux bouton.
Chaque bouton marche par paire. "nom_1" et "nom_2"
Si "nom_1" est coché, "nom_2 " se décoche, vice versa, mais quand même possibilitéde décoche les deux (pour masquer une page)
Si l'un des deux est coché, une feuille apparaît etc.
Mais des noms de bouton peuvent être réutilisé ( cf feuil3), donc pour éviter un tri long, je copie l'ensemble du code sur chaque feuille, à chaque modif, bouton ou non.... Comment faire pour intégrer tout ce code a this workbook?
merci d'avance !
Pièces jointes
Nouveau Feuille de calcul Microsoft Excel (2).xlsm
Private Sub CheckBox1_Click()
Sheets("Feuil2").Visible = False
If CheckBox1.Value = True Then
CheckBox2.Value = False
Sheets("Feuil2").Visible = True
End If
End Sub
Private Sub CheckBox2_Click()
Sheets("Feuil2").Visible = False
If CheckBox2.Value = True Then
CheckBox1.Value = False
Sheets("Feuil2").Visible = True
End If
End Sub
Mais la bonne solution passe probablement par un module de classe Ce lien n'existe plus
Bonjour.
Non, Misange la simplification ç'aurait été ça :
VB:
Private Sub CheckBox1_Click()
Sheets("Feuil2").Visible = CheckBox1.Value Or CheckBox2.Value
If CheckBox1.Value then CheckBox2.Value = False
End Sub
Private Sub CheckBox2_Click()
Sheets("Feuil2").Visible = CheckBox1.Value Or CheckBox2.Value
If CheckBox2.Value then CheckBox1.Value = False
End Sub
A part ça je crois vraiment qu'il faut éviter de mettre des trentaines de CheckBox dans des feuilles.
2 colonnes utilisant la police Wingdings feraient aussi bien l'affaire, et ça pourrait se traiter par Workbook_SheetSelectionChange dans ThisWorkbook.
Hello DranReb
OK ta modif est encore plus courte (mais la mienne fonctionne également...)
et je plussoie au fait que des trentaines de boutons dans une feuille, ce n'est pas du tout ergonomique. Ton idée est meilleure et plus simple. Sinon des listes déroulantes ou auter mais là non seulement le code est lourd mais l'ergonomie me parait douteuse.
Je plussoie 😡...
Sinon, c'est pas évident de savoir ce que tu veux faire apparaître et disparaître, et pourquoi 2 boutons pour chaque 🙄, mais un petit exemple simple en Wingdings, il suffit de double cliquer en colonne A 😛...
Bonne suite 😎
Alors votre solution en wingdings me plait ! par contre je vais avoir besoin d'aide pour le mettre en pratique.
Alors pourquoi disparaitre et disparaitre : car le fichier passe de main en main entre plusieurs utilisateurs. DOnc chaque utilisateur recoit ce fichier, et voit son propre onglet à l'ouverture, sans avoir à être surchargé des autres.
pourquoi deux boutons : car il voit la personne qui clique decide si la prochaine ouvrira ce fichier entre deux actions. Donc si les deux décocher, la suivante n'est pas concernée et ne voit pas l'onglet, si l'une des actions est coché , l'autre non ...
Donc la par exemple, j'ai voulu rajouter un onglet, j'ai rajouté sur l'onglet en vba option explicit, j'ai copié collé le wingdings... mais sur this workbook que dois je rajouter pour une nouvelle feuille?
Et pourriez vous me mettre un exemple donc de deux bouton ( action 1 - action 2) ?
Merci pour votre aide... je cherche en même temps mais bon...
Re 🙂,
Clair comme de l'eau de boudin 😱...
Une version "2 actions" si j'ai un peu compris 😱 !!!...
Pour l'ajout de nouveaux onglets, ajouter le nom de l'onglet (à l'identique) dans la colonne C et modifier la ligne
Code:
If Target.Row > 2 Or Target.Column > 2 Then Exit Sub
Target.Row correspond au nombre de lignes traitées 🙄...
Bon courage 😎
ok pour ca c'est top et adaptable... et en effet ca va beaucoup réduire mon souci !
dernières questions (j'espere! ...) :
nombre de ligne traitées, ok, mais colonne? en gros si jinsere une ligne au tout début , et également une colonne au tout debut comment modifier le code? (pour m'y retrouver vu que mes cases sont au milieu des feuilles...)
Et s'il y a deux colonnes de double choix?
j'essai de traduire le code...
et du coup si sur les autres feuilles j'ai de nouveaux a rajouter ces choix, concernant même feuille ou non, j'ai de nouveau juste a recopier le code de la feuille en modifiant juste les cellules et colonnes traitées?
Re 🙂,
Techniquement, le plus simple est de n'utiliser que les colonnes A et B pour les actions 😛...
Après, si tu veux juste ajouter des colonnes devant, il va falloir adapter le
Code:
Target.Column > 2
avec un
Code:
Target.Column > 3 Or Target.Column < 2
pour les colonnes 2 et 3, avec les IIf
Code:
IIf(Target.Column = 2, 1, -1)
et surtout
Code:
Sheets(Cells(Target.Row, 4).Value).Visible = True
et ainsi de suite 🙄...
Si maintenant, tu veux faire plusieurs colonnes, ben je te laisses comprendre le code et l'adapter 😛...
Bon courage 😎
iif(target.column=2,1,-1) se traduit par quoi en fait?
pareil pour sheets(cell(target.row,4).value).visible= true ? c'est visible si quoi?
je fais des tests, ne srait-ce que rajouter une colonne mais je dois me tromper dans les lignes car ca ne passe pas, donc autant avoir la traduction en "francais" de ton code lol
Si la colonne de la cellule sur laquelle on a double-cliqué est 2, alors, 1, sinon, -1 😛 ...
Pourquoi ?
Si elle vaut 2, OffSet (0,1) donnera la cellule de droite à côté.
Sinon, OffSet(0,-1) donnera la cellule de gauche 🙄...
Code:
Sheets(Cells(Target.Row, 4).Value).Visible= True
Target.Row donne le N° de la ligne de la cellule double-cliquée... Cells (attention, pas cell, VBA a l'obligeance de remettre en majuscule ce qu'il connait, d'où l'intérêt de saisir en minuscule et de voir s'il a passé automatiquement en majuscule, Cells étant l'ensemble des cellules de la feuille 😡...) va prendre la ligne (définie par Target.Row) et la colonne (4, donc D), soit le nom mis dans la cellule, et l'utiliser dans dans Sheets (la collection de feuilles), et donc, si tu es sur la ligne 2, la feuille s'appellant comme la cellule en D ligne 2 aura sa propriété visible à VRAI 🙄...
Après, il va falloir t'atteler au débogage, comme vérifier si la cellule à côté est vide -> erreur à la sélection de la feuille ou n'existe pas -> erreur idem 😉...
D'où, si tu veux t'amuser à avoir 2 séries successives dans les colonnes, comprends le code avant d'avoir tous les messages d'erreur de tes utilisateurs (qui n'hésiteront pas à double cliquer là où il ne faut pas 😱...)
Bon courage 😎
mais deux autre questions....
- donc si jai deux colonnes de double choix. comment cela doit il etre indiqué dans le code? Car je ne peux pas mettre deux fois le même évenement, et les données en copier coller me mette une erreur.... voir PJ
- et en utilisant des checkbox, j'avais la possibilité par des boutons de tout décocher , est-ce possible ici?
et possibilité de tout cocher a droite , ou tout cocher à gauche?
- Navigue sans publicité - Accède à Cléa, notre assistante IA experte Excel... et pas que... - Profite de fonctionnalités exclusives Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel. Je deviens Supporter XLD