Eviter répétition chemin

Bonjour le forum,

Je dispose d'un Userform, qui contient plusieurs frames afin d'essayer de rendre le code plus lisible et j’espère moins long a exécuté, j'ai crée un Module de programmation pour chaque Frame. Je ne voulais pas que le code de L'userform soit trop long afin que je puisse me retrouver plus facilement.

Mais je me retrouve face à un problème:

Comme les événements sont dans l'userform je suis obligé de répéter le chemin à chaque événement:

Sub Slc_Exp()
Usf_interface.Frame2.Imputation200.Clear
Usf_interface.Frame2.SousFamille200.Clear
Usf_interface.Frame2.ComboBox210.Clear
Usf_interface.Frame2.ComboBox209.Clear
Init_Imputation_Exp
Usf_interface.Frame2.ComboBox210.List = Application.Transpose(Range("Type_envoi"))
End Sub

Et dans le code de l'userform:

Private Sub Label2_Click()
Slc_Exp
End Sub

Autre exemple d'un code du module:

Sub Valide_200()
Dim i As Byte, J As Byte
If Usf_interface.Frame2.TextBox209 = vbNullString Or Usf_interface.Frame2.TextBox212 = vbNullString Or Usf_interface.Frame2.Imputation200 = vbNullString Or Usf_interface.Frame2.ComboBox209 = vbNullString Or Usf_interface.Frame2.ComboBox210 = vbNullString Then
MsgBox ("Les champs marqués d'un astérisque (*) sont obligatoires.")
Usf_interface.Frame2.Imputation200.SetFocus
Exit Sub
End If
Application.ScreenUpdating = False
With Sheets(Var_Imputation200).Select
Ligne = Range("B65536").End(xlUp).Offset(1, 0).Row
Cells(Ligne, 2).Value = CDate(Date)
For i = 7 To 13
[color=#FF0000]Cells(Ligne, i).Value = Controls("Usf_interface.Frame2.TextBox" & 200 + i).Value[/color]
Next i
Cells(Ligne, 3).Value = Usf_interface.Frame2.Imputation200.Value
Cells(Ligne, 4).Value = Usf_interface.Frame2.SousFamille200.Value
Cells(Ligne, 5).Value = Usf_interface.Frame2.ComboBox209.Value
Cells(Ligne, 6).Value = Usf_interface.Frame2.ComboBox210.Value

Usf_interface.Frame2.Imputation200.Value = ""
Usf_interface.Frame2.SousFamille200.Value = ""
Usf_interface.Frame2.ComboBox209.Value = ""
Usf_interface.Frame2.ComboBox210.Value = ""
For i = 7 To 13
[color=#FF0000]Controls("Usf_interface.Frame2.TextBox" & 200 + i).Value = ""[/color]
Next i
End With
Application.ScreenUpdating = True
End Sub

Et le code ci dessus bug sur les lignes rouges, j'imagine à cause du chemin.

Avez vous une solution miracle pour ça ?

Bonjour Florian, bonjour le forum,

Que gagnes-tu a exporter les actions vers une macro externe ? À part les emm***ements rien... Alors pourquoi ne pas écrire directement, par exemple :

Private Sub Label2_Click()
Imputation200.Clear
SousFamille200.Clear
ComboBox210.Clear
ComboBox209.Clear
Init_Imputation_Exp
ComboBox210.List = Application.Transpose(Range("Type_envoi"))
End Sub

En revanche, si le même code s'applique à de nombreuses Labels, je te recommande l'utilisation un Module de Classe...

Bonjour,

Il faut écrire plutôt :

Usf_interface.Frame2.Controls("TextBox" & 200 + i).Value 

Pierre

En fait je voulais réellement diviser le code au nombre de frames afin d'y voir plus clair. Car si je mais tout dans le code Userform la longueur du code est vraiment très grande ( une vingtaine de feuille A4) et comme par moment la macro et longue à s’exécuter, je pensais que le fait qu'il y est trop de monde la dedans pouvez ralentir l'exécution.

pourquoi préférer un module de classe plutot qu'un module pour les mêmes événements ?

Re,

Pourquoi ?!... Sans voir le fichier je ne peux t'en dire plus... Mais si, comme tu le dis, le code s'étend sur plus de 20 A4, je n'ai pas envie de le voir... Bon courage...

Rechercher des sujets similaires à "eviter repetition chemin"