[VBA] identifier une checkbox par un index

jeyjey44 -  
 jeyjey44 -
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. incaout Messages postés 347 Date d'inscription   Statut Membre Dernière intervention   74
     
    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
  2. jeyjey44
     
    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