Simplification d'un programme

Bonjour à tous,

Je suis débutant en VBA, et j'ai appris grâce au cours de ce site.

Je suis en train de construire un UserForm pour mon travail et je sais pas trop comment expliquer mon problème mais en gros j'ai plein de CheckBox qui ont la même utilité

Private Sub CheckBox1_Click()
' VA TYPE 6
  'Manteaux 1/3 bas
    If CheckBox1.Value = True Then
        CheckBox10.Visible = True
    Else
       CheckBox10.Value = False
       CheckBox10.Visible = False
    End If

End Sub

Private Sub CheckBox2_Click()
' VA TYPE 6
  'Manteaux 1/3 bas
    If A_CheckBox2.Value = True Then
        CheckBox20.Visible = True
    Else
       CheckBox20.Value = False
       CheckBox20.Visible = False
    End If

End Sub

J'aimerais savoir si il est possible de fusionner les deux Sub avec une boucle en remplaçant le 1,2 ... par une variable i ?

Merci d'avance, et si vous avez besoin de plus d'informations je peux vous en fournir.

Bonjour Florian,

Je ne comprends pas trop ton problème. Si ton souhait est de fusionner les private sub sa va être compliqué puisque ce sont des programme propre a chaque objet...

Par contre dans chaque programme tu peux boucler sur tous tes objets ou alors créer une fonction que tu colle dans chaque private sub...

Le problème c'est que je n'ai pas que 2 Private Sub, je vais en avoir une trentaine mais avant de faire 30 copiés coller je voulais savoir s'il y avait un moyen pour faire un truc comme ça :

Sub Main ()
Dim i as interger
 For i=1 to 30 then
    If CheckBox_i.Value = True Then
        CheckBox_i&0.Visible = True
    Else
       CheckBox_i&0.Value = False
       CheckBox_i&0.Visible = False
    End If
 Next
End Sub

J'ai compris pour le nombre de check sur ton formulaire, mais il y a une différence entre vérifier l'état d'un control et effectuer une action lorsque le controle change.

Si c'est juste vérifier l'état :

Sub Main ()
Dim i as interger
 For i=1 to 30 then
    If Me.Controls("CheckBox" & i).Value = True Then 
        Me.Controls("CheckBox" & i & "0").Visible = True
    Else
        With Me.Controls("CheckBox" & i & "0")
               .Value = False
               .Visible = False
        End With
    End If
 Next i
End sub

Si c'est effectuer une action lorsque tu change la veleur de ta check box tu dois le mettre dans la private sub checkBox change et créer une fonction pour éviter d'avoir toute les ligne à chaque fois.

Le code n'est pas tester si tu peux joindre le fichier ce serait plus simple.

Oui mon problème c'est que j'aimerais que ça soit dans un Private Sub CheckBox_i_Change()

Le fichier est un peu brouillon désolé.

13test.xlsm (22.02 Ko)

Ce n'est pas possible de mettre une variable comme tu le souhaite.

Chaque objet ayant ses propres actions associées...

Je t'ai mis un bout de fonction dans ton fichier

16copie-de-test.xlsm (26.44 Ko)

Ok je vois et je pense que je vais garder ta fonction, ça sera plus "lisible" pour moi

Merci beacoup Multhani

Rechercher des sujets similaires à "simplification programme"