Microsoft 365 décocher un checkbox vba si

gothc

XLDnaute Occasionnel
Bonsoir le forum
j'ai une macro ci joint je cherche comment décocher ma checkbox si ma combobox est vide
j'ai trouvé comment avoir un message si ma combobox est vide mais la case reste cocher
merci de votre aide pour info je travaille sur la feuil
VB:
Private Sub CheckBox1_Click()
If ComboBox1.Value = "" Or ComboBox1.Value = "" Then MsgBox ("Vous devez sélectionner votre Nom dans la Liste déroulante.") ': Exit Sub

Worksheets("Paramètres_Application").Range("r2") = Abs(Me.CheckBox1)
CheckBox1.Caption = Worksheets("Paramètres_Application").Range("s2")
If CheckBox1.Value = True Then
   Worksheets("Paramètres_Application").Range("u2") = Date
Else
     Worksheets("Paramètres_Application").Range("u2") = ""
End If

End Sub
 

ChTi160

XLDnaute Barbatruc
Bonsoir gothc
Bonsoir le Fil ,le Forum
Pas de fichier ?
Tout ce matériel ce trouve sur une Feuille (pas dans un Userform)
VB:
Private Sub CheckBox1_Click()
Worksheets ("Paramètres_Application")
   If .ComboBox1.Value = "" Then MsgBox ("Vous devez sélectionner votre Nom dans la Liste déroulante."): Exit Sub
      .Range("r2") = Abs(Me.CheckBox1)
      .CheckBox1.Caption = .Range("s2")
      .Range("u2") = IIf(.CheckBox1.Value = True, Date, Empty)
End With
End Sub
Rien compris , mais Bon Lol
Bonne fin de Soirée
jean marie
 

Dranreb

XLDnaute Barbatruc
Bonsoir.
Rien compris , mais Bon Lol
Explication: En VBA tout comme dans les formules Excel, lorsqu'un Boolean est impliqué dans une opération arithmétique il est converti en nombre. Mais à la différence d'Excel True devient -1 et non 1. Pour obtenir 1, un signe '-' devant Me.CheckBox1.Value conviendrait aussi bien que Abs(Me.CheckBox1.Value)
Remarque: Il n'est jamais utile de mettre = True derrière une expression Boolean, car la nouvelle expression Boolean ainsi formée a toujours la même valeur que l'expression seule.
Et au lieu de Expression = False, préférez Not Expression, c'est mieux.
 
Dernière édition:

ChTi160

XLDnaute Barbatruc
Bonjour gothc
Bonjour Bernard ,le Forum
merci pour ces éclairages que je vais mettre en pratique !
j'e pensais que :
VB:
If ChexkBox1=True Then
'était plus explicite que
If CheckBox1 Then
gothc ! je regarde ton Fichier .
Bonne Journée
jean marie
 

ChTi160

XLDnaute Barbatruc
Re
ce que j'ai modifié
Code:
Private Sub CheckBox1_Click()
With Worksheets("Paramètres_Application")
   If ActiveSheet.ComboBox1.Value = "" Then MsgBox ("Vous devez sélectionner votre Nom dans la Liste déroulante."): Exit Sub
      .Range("r2") = -ActiveSheet.CheckBox1
      ActiveSheet.CheckBox1.Caption = .Range("s2")
      .Range("u2") = IIf(ActiveSheet.CheckBox1, Date, Empty)
End With
End Sub
jean marie
 
Dernière édition:

soan

XLDnaute Barbatruc
Bonjour jean marie, gothc,

non testé, mais je crois que cette réécriture du code VBA de ton post #10 devrait aller :

VB:
Private Sub CheckBox1_Click()
  Dim sh As Worksheet: Set sh = Worksheets("Paramètres_Application")
  With ActiveSheet
    If .ComboBox1 = "" Then .CheckBox1 = 0: _
      MsgBox "Vous devez sélectionner votre Nom dans la Liste déroulante.": Exit Sub
    With .CheckBox1
      sh.[R2] = Not .Value: .Caption = sh.[S2]: sh.[U2] = IIf(.Value, Date, Empty)
    End With
  End With
End Sub

soan
 

ChTi160

XLDnaute Barbatruc
Re
Bonjour Soan
j'espère que tu vas bien ?
ce que j'ai modifié
VB:
Private Sub CheckBox1_Click()
With Worksheets("Paramètres_Application")
   If ActiveSheet.ComboBox1.Value = "" Then
     If Not (ActiveSheet.CheckBox1) Then Exit Sub
            MsgBox ("Vous devez sélectionner votre Nom dans la Liste déroulante.")
            ActiveSheet.CheckBox1 = False
             Exit Sub
    End If
      .Range("r2") = -ActiveSheet.CheckBox1
      ActiveSheet.CheckBox1.Caption = .Range("s2")
      .Range("u2") = IIf(ActiveSheet.CheckBox1, Date, Empty)
End With
End Sub
évite aussi le double affichage du Message!
jean marie
 

Discussions similaires