[VBA] Comment optimiser ce code ?

Résolu
Bonjour, je travail sur VBA d'excel et j'aimerais insérer une variable avant un "="
du style :

For i = 1 To 10

UserForm1."Checkbox"&i.Caption = "toto" & i

Next i
Je veux que chaque CheckBox s'apelle toto1, toto2 etc.

pour éviter de faire ceci :
For i = 4 To 31

Range("A" & i).Select

    If i = 4 Then
' cliste est un UserForm et L1 une checbox ..
        cliste.L1.Caption = ActiveCell.FormulaR1C1 
    ElseIf i = 5 Then
        cliste.L2.Caption = ActiveCell.FormulaR1C1
    ElseIf i = 6 Then
        cliste.L3.Caption = ActiveCell.FormulaR1C1
    ElseIf i = 7 Then
        cliste.L4.Caption = ActiveCell.FormulaR1C1
    ElseIf i = 8 Then
        cliste.L5.Caption = ActiveCell.FormulaR1C1
    ElseIf i = 9 Then
        cliste.L6.Caption = ActiveCell.FormulaR1C1
    ElseIf i = 10 Then
        cliste.L7.Caption = ActiveCell.FormulaR1C1
    ElseIf i = 11 Then
        cliste.L8.Caption = ActiveCell.FormulaR1C1
    ElseIf i = 12 Then
        cliste.L9.Caption = ActiveCell.FormulaR1C1
    ElseIf i = 13 Then
        cliste.L10.Caption = ActiveCell.FormulaR1C1
    ElseIf i = 14 Then
        cliste.L11.Caption = ActiveCell.FormulaR1C1
    ElseIf i = 15 Then
        cliste.L12.Caption = ActiveCell.FormulaR1C1
    ElseIf i = 16 Then
        cliste.L13.Caption = ActiveCell.FormulaR1C1
    ElseIf i = 17 Then
        cliste.L14.Caption = ActiveCell.FormulaR1C1
    ElseIf i = 18 Then
        cliste.L15.Caption = ActiveCell.FormulaR1C1
    ElseIf i = 19 Then
        cliste.L16.Caption = ActiveCell.FormulaR1C1
    ElseIf i = 20 Then
        cliste.L17.Caption = ActiveCell.FormulaR1C1
    ElseIf i = 21 Then
        cliste.L18.Caption = ActiveCell.FormulaR1C1
    ElseIf i = 22 Then
        cliste.L19.Caption = ActiveCell.FormulaR1C1
    ElseIf i = 23 Then
        cliste.L20.Caption = ActiveCell.FormulaR1C1
    ElseIf i = 24 Then
        cliste.L21.Caption = ActiveCell.FormulaR1C1
    ElseIf i = 25 Then
        cliste.L22.Caption = ActiveCell.FormulaR1C1
    ElseIf i = 26 Then
        cliste.L23.Caption = ActiveCell.FormulaR1C1
    ElseIf i = 27 Then
        cliste.L24.Caption = ActiveCell.FormulaR1C1
    ElseIf i = 28 Then
        cliste.L25.Caption = ActiveCell.FormulaR1C1
    ElseIf i = 29 Then
        cliste.L26.Caption = ActiveCell.FormulaR1C1
    ElseIf i = 30 Then
        cliste.L27.Caption = ActiveCell.FormulaR1C1
    ElseIf i = 31 Then
        cliste.L28.Caption = ActiveCell.FormulaR1C1
    End If

Next i


Merci !

5 réponses

  1. oui oubien pour ne pas devoir compter le décallage :

    userform.controls("toto" & i)
    1. il y a deux facons d'adresser un controle
      soir par son nom soit par son ordre
      il faut employer une adresse
      du genre userform.controls(i+décalage initial)
      1. Le code est en VB,
        J'ai essayé :
        cliste.Control ["L"&i].Caption = ActiveCell.FormulaR1C1

        ou
        cliste.["L"&i].Caption = ActiveCell.FormulaR1C1

        mais il me dit "Membre de méthode ou de donnée introuvable"
        1. Contributeur
          Salut,
          En VBA je ne sais pas, mais en VB il existe un moyen, c'est je crois cliste.Control["nomducontrol"]