Re : optimisation de macro
Re,
Ton fichier avec version mise en couleur des TextBox non saisis
et blocage si TextBox non saisis.
Le module de Classe, permet d'agir sur les contrôles de même classe, par exemple tous les ComboBox ou tous les TextBox, cela évite d'avoir à répéter la même macro pour les mêmes contrôles.
Dans notre cas, il suffit de récupérer le N° du contrôle, pour agir sur celui-ci ou sur des éléments bien précis.
Par exemple :
Private Sub CB_Change()
n = Right(CB.Name, Len(CB.Name) - 8)
With UserForm3
For i = 1 To 4
.Controls("TextBox" & (8 + (n * 4) + (1 * (i - 1)))).BackColor = &H80000005
.Controls("TextBox" & (8 + (n * 4) + (1 * (i - 1)))).Tag = ""
.Controls("TextBox" & (20 + (n * 4) + (1 * (i - 1)))).BackColor = &H80000005
.Controls("TextBox" & (20 + (n * 4) + (1 * (i - 1)))).Tag = ""
Next
'Etc...
Nous récupérons le N° du ComboBox et allons agir sur les TextBox correspond à ce ComboBox.
.Controls("TextBox" & (8 + (n * 4) + (1 * (i - 1))))
le 8 + (n * 4) tu connais déjà, cela correspond au premier TextBox de la première ligne (12), + (1 * (i - 1))) permet d'ajouter 0,1,2 ou 3 en fonction du i, le Nb de TextBox
Par exemple, en première ligne, donc ComboBox
1, les TextBox sont 12,13,14 et 15
Si la valeur du ComboBox est
1, alors (8 + (
1 * 4) + (1 * (
1 - 1))) donc 12. Puisque l'on * par 0, 1 *
0, on ajoute rien.
Si la valeur du ComboBox est
2, alors (8 + (
1 * 4) + (1 * (
2 - 1))) donc 13. Puisque l'on ajoute 1, 1 *
1
Si la valeur du ComboBox est
3, alors (8 + (
1 * 4) + (1 * (
3 - 1))) donc 14. Puisque l'on ajoute 2, 1 *
2
Si la valeur du ComboBox est
4, alors (8 + (
1 * 4) + (1 * (
4 - 1))) donc 13. 1 *
3. Je sais, c'est pas évident
Bon, n'hésites pas à poser des questions, si je peux j'y répondrais avec grand plaisir.
A+