Checkbox

Bonjour,

Je sollicite votre aide pour un problème lors de la création d'une boite de dialogue sur vba.

Je vous explique ma macro. Ma macro demande à l'utilisateur de chercher un fichier Excel. Lors de l'ouverture de ce fichier, elle demande via une boite de dialogue checkbox les filtres à appliquer sur ce fichier. Il y a 3 choix : 1- cuisine 2 - maintenance et sécurité 3 - médecin

L'utilisateur pourra choisir les 3 choix à la fois s'il le souhaite (je compte faire par la suite une boucle pour enregistrer les fichiers séparément: 1 fichier pour le filtre cuisine, 1 fichier pour maintenance et sécurité et 1 fichier pour les médecins si les trois options sont cochées).

J'ai créé ma macro et ma boite de dialogue. Mais pour l’événement de ma boite de dialogue, je n'arrive pas à lui dire que mon critère est en fonction de la checkbox cochée. Comment faire pour que le critère change en fonction de ce qui est coché ?

J'ajoute le fichier avec la macro.

Merci beaucoup pour votre retour,

11fichier-macro2.xlsm (20.34 Ko)

Bonjour,

Il est clair qu'au niveau de ton formulaire la seule procédure à définir est celle du bouton OK... mais ton fichier étant vide, des indications nécessaires faisant défaut (et il y a aussi quelques autres erreurs), je me contenterai du conseil de remettre les choses à l'endroit en quelque sorte, qualifier tes expressions (soit ne pas faire comme l'enregistreur) et déclarer et initialiser tes variables...

Cordialement.

Salut Leo!

Salut MFerrand!

Pour ma part, j'ai tenté quelque chose dont je suis pas trop fier x)

Cette procédure fonctionne hein, mais elle est vraiment faite pour ton cas, et pas pour un autre.

Le rajout d'une CheckBox, d'un nouveau critère de filtre ou le changement du nom de l'une de tes CheckBox rendra le code complètement caduc.

Pour sa que je suis pas trop fier : Un code qui te limite autant c'est pas génial.

Sub Filtre()
Dim ctrl As Control
Dim x As Long, y As Long, z As Long
z = 0
'#Ci-dessous on compte le nbr de CheckBox cochées
For Each ctrl In Me.Controls
    If ctrl.Name Like "CheckBox*" Then
        If ctrl.Value = True Then z = z + 1
    End If
Next ctrl
'#Si nbr de CheckBox cochées est égal à zéro, alors on retire les filtres
'#Si nbr de CheckBox cochées est égal à trois, alors on retire les filtres
If z = 0 Or z = 3 Then
    ActiveSheet.Range("$A$1:$A$" & Range("A" & Rows.Count).End(xlUp).Row).AutoFilter Field:=1
    Exit Sub
End If
'#Si nbr de CheckBox cochées est égal à un, alors il y a un seul filtre à mettre
If z = 1 Then
    For Each ctrl In Me.Controls
        If ctrl.Name Like "CheckBox*" Then
            If ctrl.Value = True Then Exit For
        End If
    Next ctrl
    ActiveSheet.Range("$A$1:$A$" & Range("A" & Rows.Count).End(xlUp).Row).AutoFilter Field:=1, Criteria1:=Right(ctrl.Name, 1)
    Exit Sub
End If
'#Si nbr de CheckBox cochées est supp à un, alors il y a plusieurs filtres à mettre
If z > 1 Then
x = 0
y = 0
    For Each ctrl In Me.Controls
        If ctrl.Name Like "CheckBox*" Then
            If ctrl.Value = True Then
                If x = 0 Then
                    x = Right(ctrl.Name, 1)
                Else
                    y = Right(ctrl.Name, 1)
                    Exit For
                End If
            End If
        End If
    Next ctrl
    ActiveSheet.Range("$A$1:$A$21").AutoFilter Field:=1, Criteria1:=x, Operator:=xlOr, Criteria2:=y
End If
End Sub

Je le met quand même la et vous me direz ce que vous en pensez !

Fichier joint !

17pour-legio.xlsm (27.98 Ko)

Juice : Super, très intéressant la façon dont vous avez monté cette macro ! Je vais me pencher dessus mais je pense en effet que cela répondra à ma question

MFerrand : merci pour vos conseils

Rechercher des sujets similaires à "checkbox"