Optimisation de macro sur Checkbox
Bonjour à tous !
J'ai dans mon excel 4 checkboxs différentes qui lorsqu'on en chose une fais décocher les autres et fait apparaitre et disparaitre les lignes voulu.
C'est un peu plus complexe étant donné qu'il y a possibilité de cocher deux checkboxs mais que 'la deuxième ne peut pas être cocher sans la premiere. J'ai également renvoyer la valeur de mes checkbox sur une case car je n'arrivais pas à mettre directement la valeur de ma checbox dans le code. Bref le plus simple est que vous regardiez le code :
Sub Caseàcocher10_Cliquer()
If Range("D44") = True Then 'Je pensais mettre If Checkbox10.Value = True mais cela ne marche pas ?
Range("H44") = False 'Décoche la 3ème checkbox
Range("K44") = False 'décoche la 4ème
Rows("55").Hidden = True 'cache les lignes
Range("E53") = "" 'efface les valeurs
Range("E55:P55") = "" 'efface les valeurs
Rows("50").Hidden = False ' fait apparaitre la ligne intéréssé
Else
Rows("50:53").Hidden = True 'sinon fait tout disparaitre
Range("E50:P50") = "" 'et efface la ligne
Range("F44") = False 'et décoche également la deuxième checbox
End If
End Sub
Sub Caseàcocher11_Cliquer()
If Range("F44") = True Then 'si cocher
Range("H44") = False 'décoche la 3ème
Range("K44") = False ' décocoche la 4ème
Range("D44") = True 'coche la première
Rows("55").Hidden = True 'cache la ligne 55
Range("E53") = "" 'efface les vlaur
Range("E55:P55") = "" 'efface les valeurs
Rows("50:52").Hidden = False 'affiche les 2 lignes
Else
Rows("51:55").Hidden = True 'si décocher cache le tout sauf la premiere de la checkbox 1 qui est toujours coché
End If
'la suite est dans le même genre sauf que les checkbox 3 et 4 décoche les 3 autres a chauqe fois et font apparaitre tel ou tel lignes et efface et masques tel ou tel lignes
End Sub
Sub Caseàcocher12_Cliquer()
If Range("H44") = True Then
Range("K44") = False
Range("F44") = False
Range("D44") = False
Rows("55").Hidden = False
Rows("50:54").Hidden = True
Range("E50:P51") = ""
Range("E53") = ""
Else
Rows("55").Hidden = True
End If
End Sub
Sub Caseàcocher26_Cliquer()
If Range("K44") = True Then
Range("F44") = False
Range("D44") = False
Range("H44") = False
Rows("50:52").Hidden = True
Rows("53:54").Hidden = False
Rows("55").Hidden = True
Range("E55:P55") = ""
Range("E50:P51") = ""
Else
Rows("53:54").Hidden = True
End If
End SubComme vous pouvez le voir c'est assez long et pas du tout rapide. Genre 3 à 4 secondes pour que les ligne apparaissent et disparraissent quand on clique.
Est il possible d'avoir un peu d'aide sur l'optimisation de ceux ci ?
Merci d'avance de votre aide car c'est clairement pas le code le plus propre et jolie au monde malgré que ça marche ^^
Bonjour,
On peut surement améliorer le code mais je laisse ça à mes camarades
En revanche, une des méthodes simple et efficace pour accélérer une macro et d'introduire cette instruction en début de code :
Application.ScreenUpdating = False 'Désactive l'actualisation de l'écranEt finir avec :
Application.ScreenUpdating = True 'Réactive l'actualisation de l'écranA voir si cela apporte beaucoup...
@+
Bonjour,
Au passage, tu n'utilises pas des CheckBox (ActiveX) mais des Cases à cocher (Contrôles de formulaire). Chaque type d'objets a sa syntaxe...
Si tu veux améliorer ton code, il faut commencer par qualifier tes expressions renvoyant des plages de cellules... Si tu ne réfères pas à la feuille qui les contient, VBA ira à chaque fois chercher quelle est la feuille active du classeur actif, et c'est nécessairement plus lent que si on le lui dit !
Et le lui dire efficacement, c'est en utilisant un bloc With, qui lui permettre de mettre la référence de feuille en mémoire, et donc d'y accéder plus rapidement.
Il convient aussi que tu calcules tes opérations de masquage-démasquage de façon à les réduire au minimum...
Cordialement.
Bonjour à vous deux !
Au passage, tu n'utilises pas des CheckBox (ActiveX) mais des Cases à cocher (Contrôles de formulaire). Chaque type d'objets a sa syntaxe...
Effectivement je ne connais pas la différence entre les deux donc pardon pour mon erreur.
Si tu veux améliorer ton code, il faut commencer par qualifier tes expressions renvoyant des plages de cellules...
Que veux tu dire par ça ?
Le reste je vais voir ce que je peux faire mais c'est au moins quelque chose que je maitrise !
Que veux tu dire par ça ?
Tu en as l'explication dans la phrase qui suit celle que tu cites !
On est dans l'a-b-c de VBA...
Bonne journée.
Au temps pour moi je n'avais pas compris ta phrase dans ce sens là mais oui effectivement tout est compréhensible du coup !
Merci de ton aide,
Je reviendrais d'ici quelques jours je pense avec un code un peu plus optimisé pour avoir un retour.
A bientôt !
REbonjour à tous !
J'ai amélioré mon code sur ce que je savais faire :
Sub Caseàcocher10_Cliquer()
Set ws = Sheets("Accueil")
With ws
If .Range("D44") = True Then
.Range("H44") = False
.Range("K44") = False
.Rows("50").Hidden = False
.Rows("51:54").Hidden = True
.Range("E51:P53") = ""
Else
.Rows("50:55").Hidden = True
End If
End With
End Sub
Sub Caseàcocher11_Cliquer()
Set ws = Sheets("Accueil")
With ws
If .Range("F44") = True Then
.Range("H44") = False
.Range("K44") = False
.Range("D44") = True
.Rows("50:51").Hidden = False
.Rows("55").Hidden = False
.Rows("52:54").Hidden = True
.Range("E52:P53") = ""
Else
.Rows("50:55").Hidden = True
End If
End With
End Sub
Sub Caseàcocher12_Cliquer()
Set ws = Sheets("Accueil")
With ws
If .Range("H44") = True Then
.Range("K44") = False
.Range("F44") = False
.Range("D44") = False
.Rows("52").Hidden = False
.Rows("50:51").Hidden = True
.Range("E50:P51") = ""
.Range("E53") = ""
.Rows("53:55").Hidden = True
Else
.Rows("50:55").Hidden = True
End If
End With
End Sub
Sub Caseàcocher26_Cliquer()
Set ws = Sheets("Accueil")
With ws
If .Range("K44") = True Then
.Range("F44") = False
.Range("D44") = False
.Range("H44") = False
.Rows("53:54").Hidden = False
.Rows("50:52").Hidden = True
.Rows("55").Hidden = True
.Range("E50:P52") = ""
Else
.Rows("50:55").Hidden = True
End If
End With
End SubQu'en pensez vous ? Y'a til des méthodes plus efficace que ce que j'ai utilisé et est ce que ce que j'ai codé est cohérent ?
Merci d'avance pour votre aide !