Alléger VBA récurrent

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 !

ptitflo666

XLDnaute Nouveau
Bonjour,
en espérant trouver de l'aide..

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.


merci par avance,
 
Re : Alléger VBA récurrent

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

Dernière édition:
Re : Alléger VBA récurrent

Bonjour
Déjà tu peux simplifier ton code :
Code:
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
 
Re : Alléger VBA récurrent

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.

Cordialement.
 
Dernière édition:
Re : Alléger VBA récurrent

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.
 
Re : Alléger VBA récurrent

serait ce trop demandé un exemple avec la police windings? car je ne vois pas comment parametrer cela...

Et surtout pas de possibilite d inserer tout mon code sur un module ou thisworkbook et le faire appeler par les pages?
Merci pour le temps passé !
 
Dernière édition:
Re : Alléger VBA récurrent

Bonjour le fil 🙂,
OK ta modif est encore plus courte (mais la mienne fonctionne également...)
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 😎
 

Pièces jointes

Re : Alléger VBA récurrent

Bonjour !

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 : Alléger VBA récurrent

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 😎
 

Pièces jointes

Re : Alléger VBA récurrent

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?

encore merci !!
 

Pièces jointes

Re : Alléger VBA récurrent

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 😎
 
Re : Alléger VBA récurrent

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
 
Re : Alléger VBA récurrent

Re 🙂,
In french :
Code:
IIf(Target.Column = 2, 1, -1)
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 😎
 
Re : Alléger VBA récurrent

merci c'est bon j'ai compris le systeme !!!!

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?

merci,
 

Pièces jointes

- 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

Discussions similaires

Réponses
13
Affichages
580
Réponses
10
Affichages
319
Réponses
5
Affichages
269
Réponses
4
Affichages
239
  • Question Question
XL 2021 VBA excel
Réponses
4
Affichages
201
Réponses
2
Affichages
236
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
589
Retour