Ouvrir userform selon checkbox

Bonjour,

Je suis dans une impasse. Je vais avoir un classeur avec beaucoup de checkbox. Donc pour pouvoir agir sur le classeur en fonction de l'état de la checkbox, je les ai toutes liées aux cellules à l'arrière de chacune d'elles.

Pour une catégorie de ces checkbox j'aimerai ouvrir un userform si l'une d'entre elle est cochée.

- La cellule liée est en C6 (si la checkbox est cochée alors C6 = VRAI)

- Le nom de l'Userform est MaisonPatient

J'ai essayé ce code :

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("C6")) Is Nothing Then
Exit Sub
Else
If Target = "VRAI" Then
MaisonPatient.Show
End If
End If
End Sub

Mais ça ne fonctionne pas. En revanche quand j'essaye le code sur une cellule différente en changeant les conditions (exemple si Target = OUI) et que je rentre mois même manuellement le mot OUI alors ça marche. Par contre si le OUI apparaît depuis une formule SI par exemple alors ça ne marche plus.

En gros on dirait que mon code ne parvient pas à détecter les valeurs de la cellule si elles proviennent d'une formule ou d'une checkbox cochée par exemple.

Pouvez-vous m'aider ? Merci beaucoup !

Bonjour GoldenBoyy972,

Si votre formule en C6 retourne VRAI ou FAUX et pas "VRAI" (chaine de caractères) ou "FAUX", votre test en VB doit être If Target = True Then car VRAI / FAUX est l'affichage en français des valeurs booléennes True et False.

Cdlt,

Cylfo

Bonjour,

Merci pour le retour malheureusement ça ne fonctionne pas..

Edit : Je viens de me rendre compte par hasard que si je double clique sur la cellule C6 puis que je clique sur une autre cellule alors l'Userform s'ouvre. Je ne pige pas

Pouvez vous poster une version simplifiée / anonymisée du fichier mais produisant le "dysfonctionnement" qui vous bloque ?

Cela permettra de vous apporter la bonne réponse

Cdlt

Tenez, voici un fichier simplifié ! Merci pour votre aide

Comme vous pouvez le voir lorsque je coche la case en C6 (Maison - Patient) l'Userform ne s'ouvre pas. Par contre si je double clique sur la cellule C6 et que je clique après sur une autre cellule alors il s'ouvre.

Re,

La modification d'une cellule liée à une CheckBox ne déclenche pas l'évènement Worksheet_Change de la feuille, je le découvre mais après quelques essais y compris sur un nouveau classeur, cela se confirme !

Solution :

  • Supprimer le code (inutile) lié à l'événement Worksheet_Change
  • Insérer le code suivant dans un module
    Sub CheckBox_Click()
       If ActiveSheet.CheckBoxes(Application.Caller).Value <> 1 Then Exit Sub
       Select Case Application.Caller
       Case "Case à cocher 1"
          MaisonPatient.Show
       Case "Case à cocher 2"
          FormulaireXYZ.Show
       Case "Case à cocher 3"    ' etc.
    
       End Select
    End Sub
  • Associer à chaque CheckBox la macro "CheckBox_Click"

Cdlt,

Cylfo

Mince, c'est dommage car c'était un peu ce que je craignais puisque je vais devoir avoir beaucoup de checkbox (même format que sur le fichier mais sur plusieurs jours différents).

Mais je garde évidemment de côté votre code, peut-être que c'est la meilleure solution même si j'ai beaucoup de cases à configurer.

Merci !

Avez-vous essayé le code que vous m'avez donné sur mon excel test à tout hasard ?

Car ça ne fonctionne pas de mon côté ?

Bonjour, dans ce cas quelques "tips" pour les approches possibles

Si vous avez plusieures cases qui renvoie sur le meme userform, l'utilisation de Select/Case proposée par Clyfo est très pertinente. Vous pouvez en effet grouper les conditions pour chaque case

Par exemple

Case "case1","case2"

Se déclenche pour le cas ou votre bouton s'appelle "case1" ou bien "case2".

Ensuite, vous pouvez profiter de l'opérateurLike, opérateur - Visual Basic | Microsoft Learn, et renommer vos cases à cocher de manière "intelligente" :

En renommant toutes les cases qui doivent ouvrir l'userform1 en "clickUF1blbablaba", vous pouvez écrire

Select Case True
Case (Application.Caller Like "clickUF1*")
With New Userform1
.show
End with
End Select

Un exemple d'application, en remplacant application.Caller par une string pour bien comprendre

Sub test()
  Dim maStr As String
  maStr = "uf1blablabla"

  Select Case True
  Case (maStr Like "uf1*")
    With New UserForm1
      .Show
    End With
  Case (maStr Like "MaisonP*")
    With New MaisonPatient
      .Show
    End With
  End Select

End Sub

Enfin, si cela est encore trop contraignant, repensez votre ouverture de l'userform. Peut etre que les checkbox ne sont pas les plus adaptées.

Re,

Il y a d'autres solutions :

1 - Feuil1 / 2ème pavé : mais elle impacte la présentation de votre feuille mais elle déclenche l'évènement Worksheet_Change :

  • dans une cellule, insérer une case à cocher via le menu "Insertion" et "Case à cocher" (toute seule dans "Contrôles")
  • mettre le libellé dans la colonne adjacente

2 - Feuil1 / 3ème pavé : par un double clic en jouant sur le 1er caractère pour afficher (police Wingdings) une case vide ou cochée et déclencher l'ouverture du formulaire.

Sinon s'il y a beaucoup de checkbox à créer, la création peut être automatisée via une macro. Voir exemple sur la feuil2 : sélectionner la plage C5:C8, ALT+F8 et exécuter "CreateCheckBox" (dans Module1) => création des checkbox et association de la macro "CheckBox_Click".

Cdlt,

Cylfo

PS : oui, le code fonctionne, il est opérationnel sur le 1er pavé de Feuil1.

PS2 : @saboh12617 , je n'ai pas vu ta réponse avant l'envoi de celle-ci.

Bonsoir le forum

Bonsoir aux intervenants

Je me permets de faire remonter ce posts et de m'immiscer dans celui-ci. Je ne connaissais pas l'instruction Application.Caller et j'ai tenté de m'en servir conformément au code donné par Cylfo. Toutefois, je dois reconnaître que je ne parvients pas à mes fins. Qu'ai je donc loupé ?

Bonnes fêtes de fin d'année à vernir

Bonsoir,

vous n'avez pas attribuer la procédure "CheckBox_Click" à chacune des CheckBoxe : clic droit dessus, puis affecter une macro, sélectionnez CheckBox_Click, et enjoy !

@ bientôt

LouReeD

Bonsoir le forum

Quel lourdeau, je suis. Merci LouReeD et bonne soirée

Bonne soirée à vous également !

@ bientôt

LouReeD

Rechercher des sujets similaires à "ouvrir userform checkbox"