VBA: Appel dynamiquement d'une méthode

mvp19 -  
Bidouilleu_R Messages postés 1209 Statut Membre -
Bonjour, je voudrais avoir accès aux propriétés d'object (Checkbox) qui ont des noms consécutifs dans une fonction.
Comment je peux faire ça de façon dynamique ???

Ex.: Dans ma page, j'ai 10 checkbox qui se nomment monCheckBox1, monCheckBox2...

J'aimerais pouvoir faire:
for i=0 to 9

if(Worksheets("coucou").("monCheckBox" & i).value = true) then
compteur = compteur + 1
end if

next

Merci de m'aider

3 réponses

  1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonsoir,

    essaie (en bouclant sur i) :
    if Controls("CheckBox1_" & i).value=true then

    eric
    1
  2. Bidouilleu_R Messages postés 1209 Statut Membre 296
     
    Bonjour,

    un petit exemple et pour le tester fais ceci.

    1) une feuille excel qui se nomme Feuil1
    2) un userform qui se nomme useform1
    3) tu crées des checkboxes ( peut importe le nom )
    4) tu copies ce code dans le userform
    5) tu mets des noms sur la feuil1 en A1 jusqu'à Axxx (le nombre de checboxes)
    6) tu execute l'userform et tu regardes ce qui se passe

    ce qu'il fait....?
    il lit chaque objet qui est référencé comme un contrôle ( le checkbox est un contrôle)
    puis il teste si c'est un checkbox il récupère le nom sur la feuil1 en Axx et l'attribue au checkbox.

    Private Sub UserForm_Activate()
    Dim Ctrl As Control
    Dim i As Integer
    i = 1
    For Each Ctrl In UserForm1.Controls
        If TypeOf Ctrl Is MSForms.CheckBox Then
            Ctrl.Caption = Sheets("Feuil1").Range("A" & i).Value
            i = i + 1
        End If
    Next
    End Sub


    A+
    0
    1. mvp19
       
      Bonjour, merci pour la réponse, sauf que je vais avoir le même problème...

      en fait, j'ai 5 checkbox par ligne et j'aimerais parcourir chacune des lignes pour obtenir leurs valeurs.
      pour la ligne 1, j'ai checkbox1_1, checkbox1_2... checkbox1_5
      pour la ligne 2, j'ai checkbox2_1...

      j'aimerais donc pouvoir faire une méthode dynamique qui recevrait la ligne en paramètre et qui me retournerait un tableau avec les cinq valeurs des checkbox.

      Public function valeursCheckbox(ligne as long) as tableau
      Dim reponse as tableau

      for i = 0 to nbreDeCheckboxParLigne

      if(checkbox & ligne & "_" & i.value = true) then => LA LIGNE QUI NE FONCTIONNE PAS
      tableau[i] = true
      end if

      next
      End
      0
  3. Bidouilleu_R Messages postés 1209 Statut Membre 296
     
    personnellement je ne ferai pas une fonction mais j'utiliserai une tableau avec
    une portée public.
    ensuite je ferai une boucle comme le suggère Eric.

    je te donne un exemple
    ' tablo1 et 2 sont déclarés au niveau du module
    Public tablo1 as string ' contient "vrai" ou "faux"
    Public tablo2 as string ' contient "vrai" ou "faux"

    Public Sub test2()
    
    ReDim tablo1(0)
    ReDim tablo2(0)
    i = 1
    j = 1
    For Each Ctrl In UserForm1.Controls
        If TypeOf Ctrl Is MSForms.CheckBox Then
            
            If Ctrl.Name = "CheckBox1_" & i Then
              ReDim Preserve tablo1(i)
                If Ctrl.Value Then
                    tablo1(i) = "True"
                    i = i + 1
                    Else
                     tablo1(i) = "Faux"
                    i = i + 1
                End If
            End If
             If Ctrl.Name = "CheckBox2_" & j Then
              ReDim Preserve tablo1(j)
                If Ctrl.Value Then
                    tablo1(i) = "True"
                    j = j + 1
                    Else
                     tablo2(j) = "Faux"
                    j = j + 1
                End If
              
            End If
           
        End If
    
    Next
    
    For i = 0 To UBound(tablo1)
    S = S & tablo1(i) & " / "
    Next
    MsgBox "Tablo1 contient" & S
    
    
    End Sub
    0