Alléger VBA récurrent

Résolu/Fermé
ptitflo666 - Modifié par ptitflo666 le 31/01/2012 à 20:43
 ptitflo666 - 21 févr. 2012 à 11:34
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 marche par paire, si l'une est cochée l'autre non, possibilité de décocher, 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


Pensez vous qu'il est possible d'alléger un tel codage ? Afin de réduire le ralentissement d'enregistrement.
Sachant que les paires sont toujours sous la même forme l'une "nom_1" , l'autre "nom_2"

Pas de possibilité d'utiliser "call" par exemple sur toute les feuilles pour renvoyer au même contenu que la première? vu qu'elles sont toutes identiques...

merci par avance,






10 réponses

Désolé pour le temps de réponse un peu long pris dans un déménagement je n'ai pu répondre plus tôt.

Vraiment merci, systême très pratique et facil à utiliser finalement !

Je ne les pas utilisé malgré tout... En effet, mon besoin regroupant de nombreux bouton par feuille, le module de classe allège effectivement mais le temps d'enregistrement reste très lourd.
Mais je vous remercie malgré tout, cela fut instructif et sera réutilisé probablement !

J'ai finalement adapté en utilisant des boutons d'option.

Cordialement,
3
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 753
1 févr. 2012 à 08:28
Bonjour,
Voir aussi cette astuce de Lermitte222 pour multiplier les contrôles possédant le même code et donc la même utilité.
2
Gord21 Messages postés 918 Date d'inscription samedi 21 novembre 2009 Statut Membre Dernière intervention 20 mars 2013 289
31 janv. 2012 à 22:16
Bonsoir,
Si tu ne fais qu'une action, la première chose serait de supprimer les tests :

Private Sub CheckBox1_Click()
'
Sheets("Feuil2").Visible = ((CheckBox1.Value= True) Or (CheckBox2.Value= True))
CheckBox2.Value=Not(CheckBox1.Value)
'
End Sub

Private Sub CheckBox2_Click()
'
Sheets("Feuil2").Visible = ((CheckBox2.Value= True) Or (CheckBox1.Value= True))
CheckBox2.Value = Not(CheckBox1.Value)
'
End Sub


@+
0
merci c'est deja pas mal ! par contre avec ton exemple, impossible de décocher les deux( et donc de masquer une page)... je ne dois pas pouvoir cocher l'une et l'autre en même temps, mais aussi je dois pouvoir décocher les deux. Et je n'arrive pas sous ta forme à trouver la modif?

Et saurais-tu comme copier l'intéégfralité de mon code sur this workbook, for each worksheet ? le copiant collant tout bêtement en rajoutant cela ca ne fais rien...
0
Gord21 Messages postés 918 Date d'inscription samedi 21 novembre 2009 Statut Membre Dernière intervention 20 mars 2013 289
1 févr. 2012 à 12:14
Bonjour,
Un problème de copier/coller :
Private Sub CheckBox1_Click()
'
Sheets("Feuil2").Visible = ((CheckBox1.Value= True) Or (CheckBox2.Value= True))
CheckBox2.Value=Not(CheckBox1.Value)
'
End Sub

Private Sub CheckBox2_Click()
'
Sheets("Feuil2").Visible = ((CheckBox2.Value= True) Or (CheckBox1.Value= True))
CheckBox1.Value = Not(CheckBox2.Value)
'
End Sub
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cette erreur de copier coller je l avais remarqué. malgre tout en inserant ton je me retrouve dans l impossibilite de decocher les deux case. si j en decoche une l autre se coche. je ne peux donc plus masquer mes feuilles...

et pas d idee pour thisworkbook?
0
Gord21 Messages postés 918 Date d'inscription samedi 21 novembre 2009 Statut Membre Dernière intervention 20 mars 2013 289
1 févr. 2012 à 18:32
Effectivement, ça va plus loin que l'erreur de copier-coller. Tu peux laisser la seconde boucle if.
Sinon, pour appliquer la macro à toutes les feuilles, je ne vois pas bien comment faire ça facilement : quel est le lien entre le nom des feuilles et le nom des CheckBox. Ici, les CheckBox 1 et 2 pilotent la feuille 2 mais ensuite ?
@+
0
en gros c'est un fichier de suivi. il passe de main en main.
chaque box correspond a un onglet pour une personne. si onglet affiché, la personne est concernée, d'où l'utilité de masquer pour les non concernées. et les deux box correspond à deux acton différentes a y effectuer.

un peu comme un dossier avec ou non des avis y porter. au fil des bureaux. genre avis ou refus, et les feuilles des protagonistes sont les observations .

les box 1 et 2 correspondent à la feuille 1.
les box 3 et 4 à la feuille 2.
les box 4 et 5 à la feuille 3.... et ainsi de suite.

MAIS possibilité de retrouver les box 1 et 2 dans une autre feuille. d'où l'utilité de recopier entierement le code a chaque fois au cas ou....

j'ai chercher à creer une boucle eventuellement, en mettant tous ces codes dans thisworbook, et seulement le nom des macros dans les feuilles...mais je n'y arrive pas...
0
Gord21 Messages postés 918 Date d'inscription samedi 21 novembre 2009 Statut Membre Dernière intervention 20 mars 2013 289
1 févr. 2012 à 20:00
MAIS possibilité de retrouver les box 1 et 2 dans une autre feuille. d'où l'utilité de recopier entierement le code a chaque fois au cas ou....
: dans ce cas, elle correspondent toujours à la feuille 1 ?
0
oui toujours. genre en feuille 1 j'ai deux box qui affiche ou masque la feuille 3.
mais j'ai également en feuille 25 avec deux box identiques à celle de la feuille 1 qui affiche ou masque la feuille 3.
c'est pour cela que jusqu'a present mes 25 feuilles ont toute le même code, que ce soit utile ou non(car evolutif au fil du temps)..
mais si ce code pouvait être inscrit uniquement sur une seule feuille, qui serait un récapitulatif finalement, et les 24 autres feuilles pouvait "pomper" leur code sur celle-ci, ce serait super ! lol

Sachant que le code donc correspond à celui cité plus haut, multiplier X fois.
0
Gord21 Messages postés 918 Date d'inscription samedi 21 novembre 2009 Statut Membre Dernière intervention 20 mars 2013 289
1 févr. 2012 à 22:03
Bonsoir,
Juste un premier jet pour vérifier qu'on parle bien de la même chose. J'ai repris l'astuce proposée par pijaku :
https://www.cjoint.com/?BBbv640p9QO
Par contre, ce n'est pas très clair au niveau des CheckBox, si tu veux je complète le code en faisant CheckBox 1 et 2 masquent la feuille 2, CheckBox 3 et 4 masquent la feuille 3, ...
Tu adapteras ensuite ou tu me donnes les correspondances et je le fais.

@+
0
houla, là je suis completement perdu !....

donc oui j'aimerai bien le code légèrement complété, après je devrais pouvoir mieu comprendre ...

exemple, la box 1 et 2 affiche ou masque la feuille 2.
la box 3 et 4 affiche ou masque la feuille 3.

ET, EVENTUELLEMENT, sur la feuille 2, une box 3 et 4 qui affiche ou masque la feuille 3. De manière à voir la "duplication du code"...

SI ce n'est pas trop demandé !

vraiment merci pour le temps passé...
0
Gord21 Messages postés 918 Date d'inscription samedi 21 novembre 2009 Statut Membre Dernière intervention 20 mars 2013 289
3 févr. 2012 à 17:55
Bonjour,
Voici une seconde version du fichier :
https://www.cjoint.com/?BBdrZJEUzak

Par contre, je n'ai rien fait (et ça me paraît bizarre) concernant les CheckBox répétées : par exemple, si j'ai une CheckBox1 sur les feuilles Feuil1 et Feuil3, lorsque je l'active sur la Feuil1 est-ce qu'elle s'active sur la Feuil3 ?

N'hésite pas à me faire tes remarques.
0
Les checkbox répétées apparement fonctionne dans ton exempl ! je t'en remercie c'est top en gors c'est ce que je recherchais !

mais...

dés que je rajoute une box cela ne fonctionne plus.... ?

J'ai bien tenté de remettre de rajouter ces box au module, mais pareil.. faut-il que les box soit nommées "checkbox" absolument ?
ou ton module de classe repère le type automatiquement?
0
Gord21 Messages postés 918 Date d'inscription samedi 21 novembre 2009 Statut Membre Dernière intervention 20 mars 2013 289
6 févr. 2012 à 12:19
Bonjour,
Il ne faut pas obligatoirement qu'ils soient nommés CheckBox mais il faut que leur nom corresponde à celui que tu mets dans le module de classe dans les Select Case. Sinon, lorsque tu ajoutes des CheckBox, il faut modifier le code, enregistrer puis fermer et réouvrir ton fichier pour que les modification soient effectives.
Si tu veux, tu m'envoies un exemple de fichier seulement avec les CheckBox et les feuilles qu'elles doivent gérer et je te mets les liens à jour.
@+
0