Tester l'existence d'une Checkbox

Bonjour,

Je viens vers vous car j'ai besoin d'aide. Je me suis lancé dans l'utilisation d'Userform, et je n'arrive pas à gérer la suppression d'une Checkbox dans l'Userform. Je m'explique : le bout de programme qui suit fait une boucle sur toutes les Checkbox contenues dans mon Userform. Lorsque j'ai créé cet Userform, j'ai aussi créé mes Checkbox une par une, et elles sont automatiquement numérotées par ordre croissant. Jusque là, mon programme fonctionnait parfaitement.

Mon problème est le suivant : j'ai supprimé une Checkbox car je n'en avais plus besoin, et la boucle ne fonctionne plus. Elle s'effectuait de i=1 à la dernière Checkbox créée. Comme j'ai supprimé une Checkbox, imaginons que ce soit la numéro 3, la boucle s'arrête lorsque i=3 car le programme ne trouve pas de "Checkbox3". Le programme se met donc en erreur. Pour palier à cette erreur, j'ai rajouté une boucle "IF" au début du bout de programme qui est censée faire un saut (saut1) au cas où la Checkbox soit inexistante. Cela ne fonctionne pas, j'ai essayé des tas de syntaxes différentes mais je ne m'en sors pas...

For i = 1 To CountCheckBoxes                                    'Boucle sur toutes les CheckBox de l'Userform
                                                                'Masque/Supprime les colonnes non voulues
        If Controls("CheckBox" & i).Caption Is Nothing Then

            GoTo saut1

        Else

            CheckBoxName = Controls("CheckBox" & i).Caption
            Set SensorAddress = Rows(1).Find(CheckBoxName, , xlValues, xlWhole, xlByColumns, , True)
            If SensorAddress Is Nothing Then

                GoTo saut2

            Else
                If Controls("CheckBox" & i).Value = False Then

                    SensorCol = SensorAddress.Column
                    Columns(SensorCol).Select
                    Selection.EntireColumn.Hidden = True    'cache la colonne
                    Columns(SensorCol - 1).Select
                    Selection.EntireColumn.Hidden = True    'cache la colonne précédente (échantillonnage associé)
                    'Selection.Delete Shift:=xlToLeft       'supprime la colonne

                End If
            End If
        End If

saut1:
saut2:

Next i

J'ai grand besoin de votre aide, et je vous remercie d'avance pour ça !

Salut TarukMakto,

soit tu renumérotes tes CheckBoxes pour supprimer le problème soit tu formules ta 1ère boucle IF comme suit...

If i <> 3 Then

... où 3 (et peut-être d'autres) est l'index de la CheckBox manquante. Tu zappes ainsi le Saut 1.

Un peu bricolo...

A+

Bonjour curulis57,

Merci pour ta réponse ! J'avoue y avoir pensé mais j'aimerai une solution qui puisse prendre en compte le fait d'ajouter ou de supprimer les Checkbox, et ce sans avoir à modifier le code. Si je supprime par exemple les Checkbox3, Checkbox11 et Checkbox79, je ne veux pas devoir modifier mon programme. j'aimerai que le programme passe à la Checkbox suivante s'il ne trouve pas celle que j'ai supprimé

Bonjour à tous, le fil, le forum

Pour boucler sur toutes les CheckBox d'un userform sans connaître ni les noms ni leur nombre:

Dim Ctrl As Control
For Each Ctrl In Me.Controls
    If TypeOf Ctrl Is MSForms.CheckBox Then
        MsgBox Ctrl.Caption 'exemple a remplacer par ton traitement
    End If
Next Ctrl

Cordialement

Bonjour Efgé,

C'est exactement ce qu'il me fallait, merci beaucoup et bonne journée !

Salut TorukMato,

suis-je bête, quand même...

Il faut chercher du côté de...

[code]Dim Sh As Shape

For Each Sh In Me.Shapes[/ecode]

... dans le genre mais je n'ai pas le temps maintenant.

Le code ne verra que les CheckBoxes existantes sans se soucier des changements.

Je vois ça plus tard.

A+

Ah, merci Efgé! :wink:

Pas encore habitué à jouer avec ces commandes...

A+

Rechercher des sujets similaires à "tester existence checkbox"