Bonsoir,
Le UserForm n'est absolument pas optimisé, Il faudrait commencer par le B+A = BA,
Déclaration des variables Dim A,B,C,D,E,F...Z as Booléan n'est pas valide en VBA : Seul Z est Boolean les autres sont Variant
C'est exactement le même problème avec tous les types : String, Long ou double, seul le dernier est typé les autres sont Variant.
+ de 1200 lignes de code c'est beaucoup avec VBA : Je considère habituellement que c'est une limite extrème à ne pas dépasser proscrire !
Au lieu de déclarer toutes les lettres de l'alphabet utilisez des variables Array ou utilisez DefType en tête de module
DefBool A-C, Y 'Toutes les variables dont le nom commenceront par A,B,C ou Y seront de type Boolean
Ensuite il faut bien sur les Déclarer Dim A1, A2...
Même chose pour les autres type
DefStr M,R-T, Z 'Toutes les variables dont le nom commenceront par M,R,S,T,Z seront des String
DefDbl
DefLng
DefInt
Au lieu de déclarer 50 contrôles Enabled = False dans la procédure Initialize déclarez les False à la construction ! (Dans la fenêtre des propriétés !)
Au lieu d'utiliser 50 lignes utilisez une boucle de 3 lignes (cela demande de nommer astucieusement vos contrôles au lieu de noms à rallonge préfixez vos Frames avec "fr" et vos TextBox avec "tb")
Ensuite :
For Each Control In Me.Controls
If TypeOf ctrl Is MSForms.Frame And Left(Control.name, 2) = "fr" Then ctrl.Visible = False '(ou true)
Next
Et hop 50 lignes de gagnées... Pareil pour les TextBox
Essayez de factoriser votre code en sous-procédures utilisables plusieurs fois
Enfin quand vous lancez des traitements interminable, une boucle ± longue,ou un appel de fonction hypothétique
MaProcédureUnPeuLongue
DoEvents 'Donnera un peu de temps à votre proc pour souffler un peu...
Quand vous aurez fait ça revenez nous voir !
A+