[VBA] identifier une checkbox par un index

Bonjour,

Je travail sous excel VBA. J'ai sur une feuille plusieurs checkbox (checkbox1, checkbox2,.... jusqu'a 15).
j'aurais besoins de faire une boucle du genre :

For i = 1 to 15
if checkbox(i).value = True then
une action
end if
Next

C'est à dire repérer les checkbox par leur numéro (ou un index s'il est possible d'en définir un pour chaque checkbox). Mais je ne sais pas quelle est la syntaxe du code en gras.

Après quelques recherches j'avais trouvé ça :

worksheets("feuil1").controls("Checkbox" & i).value

mais ça ne marche pas.
Quelqu'un aurait-il une idée ?
parceque jusqu'ici je me débrouillait avec les forum pour trouver les astuces, mais là rien...

Merci.
Configuration: Linux
Firefox 3.0.8

2 réponses

  1. Bonsoir,

    Si tes cases à cocher sont directement dans la feuille excel, il faut utiliser ceci :

    dim Feuil as worksheet
    dim Ctrl

    set Feuil = activeworksheet ou set Feuil = activeWorkbook.worksheets("nomdemafeuille")

    For Each Ctrl In Feuil.OLEObjects
    If TypeOf Ctrl.Object Is MSForms.CheckBox Then
    if Ctrl.value = true then
    select case (Ctrl.name)
    case "nom1" : instruction

    case "nom2" : instruction

    end select
    end if
    end if
    next Ctrl

    PS : Chez moi, il s'agissait de bouton radio. A vérifier que le type est bien CheckBox. Bon courage

    IC
    2
    1. Merci de ton aide.
      Du coup j'ai utilisé une autre méthode, plus simple je dirais, qui est la suivante :

      Sub BoucleCheckBox_V02()
      Dim i As Byte

      For i = 1 To 3
      MsgBox ActiveSheet.OLEObjects("CheckBox" & i).Name & ": " & _
      ActiveSheet.OLEObjects("CheckBox" & i).Object.Value
      Next i
      End Sub

      (source https://excel.developpez.com/faq/?page=OleObject#BoucleOleObject)

      Enfin juste cette ligne précisément, que j'ai insérée dans ma boucle :

      ActiveSheet.OLEObjects("CheckBox" & i).Object.Value

      Merci de t'être penché sur ma question.
      2