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 Sub

Comme 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'écran

Et finir avec :

Application.ScreenUpdating = True     'Réactive l'actualisation de l'écran

A 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 ! Donc la lire ! Elle me paraît tout à fait claire. Et la phrase qui suit amorce un développement sur l'optimisation du code, simplifié, mais qui n'offre pas de difficulté de compréhension.

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 Sub

Qu'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 !

Rechercher des sujets similaires à "optimisation macro checkbox"