Utilisation cases à cocher (checkbox) et condition

Bonjour le forum, et tous mes voeux en cette nouvelle année!

J'ai dans un userform, un textbox recevant une date, formaté avec le code suivant :

Private Sub TextBox7_Change()

Dim Valeur As Byte
TextBox7.MaxLength = 10

Valeur = Len(TextBox7)
If Valeur = 2 Or Valeur = 5 Then TextBox7 = TextBox7 & "/"
End Sub

Le format est donc JJ/MM/AAAA.

Or je suis parfois amené à saisir une date sur plusieurs jours :

Exemple de format : Du JJ/MM/AAAA au JJ/MM/AAAA

Évidement ça ne passe pas dans mon textbox, limité à 10 caractères.

J'ai donc rajouté une case à cocher (checkbox). à proximité de mon textbox.

Je voudrai donc que, si je coche la checkbox, ma textbox soit limité non plus à 10 caractères mais à 30 (afin qui je puisse saisir ma date au format "Du JJ/MM/AAAA au JJ/MM/AAAA"

J'ai donc fait un essai avec le code suivant :

Private Sub CheckBox1_Click()

If CheckBox1.Value = True Then
TextBox7.MaxLength = 30
End If

End Sub

Mais ça ne fonctionne pas. J'ai également essayé ce code dans celui de ma textbox, sans succès.

Auriez-vous une piste à m'apporter ?

Merci par avance,

SC

up

Bonjour,

Comme tu la redéfinis à 10 à chaque modif dans la TextBox, tu devrais bien voir que le 10 prévaudra toujours !

1) Tu enlèves cette définition de MaxLength dans TextBox.Change, elle n'a rien à faire là ! Une valeur par défaut se définit une seule fois dans la fenêtre de propriété (tu sais ce que c'est au moins ? )

Et tu la définis à 10 car cela restera la valeur par défaut (la CheckBox ayant par défaut la valeur False à l'ouverture).

2) CheckBox : tu programmes Change au lieu de Click, ce qui importe c'est sa valeur, non le clic...

Private Sub CheckBox1_Change()
    With TextBox7
        If CheckBox1.Value Then
            .MaxLength = 30
        Else
            .MaxLength = 10
        End If
     End With
End Sub

Au passage le code ça s'indente ! pour pouvoir le lire plus rapidement ensuite... (comme ci-dessus).

3) TextBox :

Private Sub TextBox7_Change()
    If CheckBox1.Value = False Then
        Select Case Len(TextBox7.Value)
            Case 2, 5: TextBox7.Value = TextBox7.Value & "/"
        End Select
    End If
End Sub

Là on pourrait faire mieux, pour intégrer le cas alternatif... Je te laisse y pourvoir selon tes souhaits.

Cordialement.

Salut Steven,

en faisant la même chose, je n'ai aucun souci!

[code]Private Sub CheckBox1_Click()
'
If Me.CheckBox1.Value = True Then
    Me.TextBox1.MaxLength = 30
Else
    Me.TextBox1.MaxLength = 10
    If Len(Me.TextBox1.Text) > 10 Then Me.TextBox1.Text = Left(Me.TextBox1.Text, 10)
End If
'
End Sub

[/code]

Donc, comme d'habitude...

A+

Salut Curulis,

Bien sûr que ce qui tu as écrit fonctionne

Mais ça ne change rien au fait qu'il est absurde de redéfinir MaxLength à chaque déclenchement de Change !

qui de plus, je le rappelle se déclenche au moins à chaque caractère tapé !

Bonjour MFerrand,

je ne comprends pas trop ce que tu racontes puisque ma procédure se trouve dans...

Private Sub CheckBox1_Click

Quant à fonctionner, oui, bien sûr, mais sans être affectée par Change...

Je ne te suis pas, aujourd'hui... ou alors, c'est moi qui suis dans le brouillard. C'est de saison, ici, note bien!

A te lire, l'ami

2 h d'interruption internet !

Oui j'avais mal lu ! Tu es sur la CheckBox ! Donc ça fonctionnera mais avec surprise ! Tu ne sais pas ce que contient la TextBox. Tu as raison de prévoir le cas où la saisie a déjà eu lieu mais il vaudrait mieux effacer... !

Par contre la définition de MaxLength est bien à sa place.

Bye !

Bonjour et un grand merci à vous deux.

Je suis d'accord avec vous pour dire que mon noviciat en VBA me fait faire des choses ridicules, qui pourtant devraient me sauter aux yeux...

Mais bon on progresse comme ça

Problème résolu, merci beaucoup,

Steven

Rechercher des sujets similaires à "utilisation cases cocher checkbox condition"