Problème avec checkbox

Résolu
annyong Messages postés 38 Date d'inscription lundi 23 avril 2007 Statut Membre Dernière intervention 25 février 2015 - 28 mai 2007 à 11:02
annyong Messages postés 38 Date d'inscription lundi 23 avril 2007 Statut Membre Dernière intervention 25 février 2015 - 30 mai 2007 à 15:19
bonjour,

J'ai un problème pour "récupérer" la caleur d'une checkbox dans un module.

voici  le code de ma checkbox :

Public Sub TextBox1_Change()

If TextBox1.value = "" Then
    TextBox1.value = 32
ElseIf Not IsNumeric(TextBox1.Text) Then
    Cancel = True
    MsgBox "veuillez entrer un nombre"
Else
    val = TextBox1.value
End If

End Sub

Et j'ai ça dans mon module : (j'ai ajouté public val as integer au début)

Call Sheets(1).TextBox1_Change
MsgBox val

le problème c'est que j'ai toujours val égal à 0.

20 réponses

drikce06 Messages postés 2237 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 11
28 mai 2007 à 11:27
d'ailleur au lieu de MsgBox "veuillez entrer un nombre"
mets textbox1 = inputbox(......)

 Drikce 06
3
jmfmarques Messages postés 7668 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 28
28 mai 2007 à 12:05
Bonjour,

j'espère que tu as quand même donné un autre nom que Val à ta variable publique... (val étant un mot réservé)

Comme celà t'a été signalé, il vaudrait mieux utiliser une inputBox pour celà. Personnellement, je l'initierais de surcroît avec la valeur par défaut 32.


Une autre solution serait sans doute d'utiliuser la textbox, mais avec une boucle While dans le lostfocus (ou l'équivalent du lostfocus sous VBA) :

Quelque chose ressemblant à ceci :

Private Sub Text2_LostFocus()
  While Not IsNumeric(Text2.Text) Or Text2.Text = ""
    Text2.SetFocus
    Text2.Text = "32"
    Text2.SelStart = Len(Text2.Text)
    DoEvents
  Wend
End Sub

Qui permettrait de surcroît à l'utilisateur de bien voir que la valeur 32 a été donnée par défaut.
3
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 21
29 mai 2007 à 00:08
Salut,

prend le temps de lire et de comprendre les réponses qu'on te donne ...
Change le nom de ta variable Val par autre chose. Et fais attention aux noms que tu donnes à celles-ci.

Tout en gardant l'idée de JMF, voici ce que tu pourrais utiliser sous Excel

Private Sub TextBox1_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
  While Not IsNumeric(TextBox1.Text) Or TextBox1.Text = ""
    TextBox1.SetFocus
    TextBox1.Text = "32"
    TextBox1.SelStart = Len(TextBox1.Text)
    DoEvents
  Wend
End Sub

Le seul problème que je peux voir, c'est si Textbox1 ne contient rien et rien n'y est écrit, ça ne générera pas d'erreur. L'utilisateur pourra quand même continuer à utiliser le reste des commandes... Peut-être devrais-tu mettre 32 comme valeur par défaut, dès l'ouverture.

MPi
3
drikce06 Messages postés 2237 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 11
28 mai 2007 à 11:26
Salut checkbox ou textbox?

 Drikce 06
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
econs Messages postés 4030 Date d'inscription mardi 13 mai 2003 Statut Modérateur Dernière intervention 23 décembre 2008 23
28 mai 2007 à 11:30
Salut,

P'tite question ... Pourquoi appeler l'evénement Change de ta TextBox ? Techniquement correct, mais curieuse façon de procéder. Utilises plutôt une procédure à part.

Le texte tapé dans une TextBox est associé au paramètre Text, pas (il me semble) au paramètre value.

Si tu utilises TextBox1.Text, tu devrais voir les choses changer.







Manu


--------------------------------------------------------------------------------------------
Avant de poster un message, n'oubliez pas de consulter le reglement.
0
econs Messages postés 4030 Date d'inscription mardi 13 mai 2003 Statut Modérateur Dernière intervention 23 décembre 2008 23
28 mai 2007 à 11:38
A bien y regarder, finalement, .Value contient le contenu de .Text

Bon ... J'ai mis ton code tel quel dans un module (le Call) et le reste dans le code associé à la TextBox.
Et bien je récupère la valeur de val sans problème.
Il y a donc une info qui nous manque pour que çà foire chez toi ...







Manu


--------------------------------------------------------------------------------------------
Avant de poster un message, n'oubliez pas de consulter le reglement.
0
annyong Messages postés 38 Date d'inscription lundi 23 avril 2007 Statut Membre Dernière intervention 25 février 2015
28 mai 2007 à 11:50
bon, ben en fait je suis un peu (très ?) bete.
c'était pas très compliqué. il fallait dans la procédure de la textbox écrire : Module1.val=textbox1.value à la place.
sinon, merci Dricke, je connaissais pas les inputbox, et effectivement c'est bien adapté dans mon cas :-)

pour répondre à econs, ce que j'ai ne marche pas tel quel.
0
annyong Messages postés 38 Date d'inscription lundi 23 avril 2007 Statut Membre Dernière intervention 25 février 2015
28 mai 2007 à 11:52
le code de la textbox est bien écrit dans une feuille, et pas dans un module. écrit dans un module, ca marche comme tu dis effectivement
0
annyong Messages postés 38 Date d'inscription lundi 23 avril 2007 Statut Membre Dernière intervention 25 février 2015
28 mai 2007 à 17:00
j'ai un nouveau pbm avec ma textbox :

Public Sub TextBox1_Change()
If TextBox1.value = "" Then
    Module1.val = 32
ElseIf Not IsNumeric(TextBox1.value) Then
    Reponse = InputBox("Veuillez entrer un nombre")
Else
    Module1.val = TextBox1.value
End If
TextBox1 = Reponse
End Sub

en fait, je voudrais une inputbox qui apparait tant que l'on a pas saisi une valeur numérique, et que cette valeur s'affiche ensuite dans la textbox
ici, une fois qu'on a saisi une valeur numérique dans la inputbox, cette valeur s'affiche dans la textbox. mais avec ce code, après, on ne peut plus effacer la valeur entree dans la textbox (je ne sais pas pourquoi )
0
annyong Messages postés 38 Date d'inscription lundi 23 avril 2007 Statut Membre Dernière intervention 25 février 2015
29 mai 2007 à 18:16
Salut MPi !

Oui, effectivement j'ai pris en compte les remarques à propos de Val. j'ai donné ce nom dans l'exemple sur le forum car le vrai nom commence par Val.
je ne savais pas que c'était un mot réservé. merci pour l'info.

par rapport à ce que tu as écris, j'ai essayé mais ça ne fonctionne pas. d'ailleurs je ne peux pas non plus tester cette procédure.
J'ai essayé diverses solutions, fais des recherches, mais je ne trouve pas d'issue pour le moment; je suis un peu bloqué

Auriez vous une autre solution à me proposer ? ou une piste qui pourrait me guider ?

Merci !!
0
annyong Messages postés 38 Date d'inscription lundi 23 avril 2007 Statut Membre Dernière intervention 25 février 2015
29 mai 2007 à 18:22
j'ai pensé à une solution, mais je ne sais pas si c'est possible à mettre en place. j'ai quelque chose comme ça :

Private Sub TextBox1_change()
    While Not IsNumeric(TextBox1.value)
        Reponse = InputBox("Veuillez entrer un nombre")
    If IsNumeric(TextBox1.value) Then
        Module1.val_test = TextBox1.value
        TextBox1.value = Reponse
    End If
    Wend

end sub

et avant le while, je met quelquechose comme : "onclick", on efface le contenu de la textbox. mais l'évènement "onclick" n'existe pas :-(
0
jmfmarques Messages postés 7668 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 28
29 mai 2007 à 18:55
si tu utilises la virgule comme séparateur décimal et que tu tiens à l'événement change, essaye ceci :

Private Sub Text1_Change()
  Static toto As String
  If Not IsNumeric(Text1.Text) Then
    Text1.Text = toto
    Text1.SelStart = Len(Text1.Text)
    Exit Sub
  End If
  toto = Text1.Text
End Sub

mais prevois donc une mise à 32 au lostfocus si l'utilisateur n'a rien saisi.
Il se peut également qu'il te faille, sous VBA, modifier Text1.Text par Text1.Value (partout ou il y a écrit Text1.Text.... vérifie ce point)
Je vois ici :
http://msdn2.microsoft.com/en-us/library/aa220898(office.11).aspx
que Lostfus est géré sous VBA
et ici :
http://users.skynet.be/micdub/xlmulti.htm
que setfocus est également géré

donc :

Private Sub Text1_Change()
  Static toto As String
  If Not IsNumeric(Text1.Text) Then
    Text1.Text = toto
    Text1.SelStart = Len(Text1.Text)
    Exit Sub
  End If
  toto = Text1.Text
End Sub


Private Sub Text1_LostFocus()
  If Text1.Text = "" Then
    Text1.Text = 32
    Text1.SetFocus
  End If
End Sub
0
jmfmarques Messages postés 7668 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 28
29 mai 2007 à 18:58
Et si tu as abandonné l'idée du 32 par défaut :
Private Sub Text1_LostFocus()
  If Text1.Text = "" Then
    Text1.SetFocus 'sans mettre à 32 mais en y retournant...
   'beep  'situ veux en plus alerter par un bip et que VBA gère le bip)
  End If
End Sub
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 21
30 mai 2007 à 01:39
Juste pour me rassurer... sous quel(s) logiciel(s) programmes-tu ?

Si c'est bien Excel comme dit au début, quel genre de textbox utilises-tu ?
sur un UserForm ?
sur la feuille directement avec les outils "Formulaire" ? ou avec les outils VB ?

MPi
0
annyong Messages postés 38 Date d'inscription lundi 23 avril 2007 Statut Membre Dernière intervention 25 février 2015
30 mai 2007 à 10:52
Salut MPi,
je suis sous Excel2003. la textbox est sur la sheet1, pas dans un userform. je l'ai inséré avec la control toolbox.
je devrais utiliser un userform ??
0
annyong Messages postés 38 Date d'inscription lundi 23 avril 2007 Statut Membre Dernière intervention 25 février 2015
30 mai 2007 à 11:52
salut jmfmarques,

merci pour ta réponse,
malheureusement ca ne fonctionne pas cette solution.
j'ai une erreur "object required" au niveau du "If Not IsNumeric(Text1.Text) Then" et du "If Text1.Text = "" Then"
0
annyong Messages postés 38 Date d'inscription lundi 23 avril 2007 Statut Membre Dernière intervention 25 février 2015
30 mai 2007 à 12:02
jmfmarques> en fait voila les erreurs que j'ai avec le code que tu as écris:

s'il n'y a rien dans la textbox, 32 y est affiché et j'ai un message d'erreur "object doesn't support this property or method"
je ne peux pas écrire de caractères
si j'entre un nombre, je ne peux plus effacer le 1er chiffre
0
jmfmarques Messages postés 7668 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 28
30 mai 2007 à 12:06
Le code que je t'ai donné correspond à l'utilisation d'une Form (UserForm sous VBA), pas à des contrôles placés sur ta feuille Excel.
Il es testé sur une Form en VB (je n'ai pas VBA) mais sais qu'il marche avec VBA (sur une UserForm)
0
jmfmarques Messages postés 7668 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 28
30 mai 2007 à 12:11
et si tu veux pouvoir effacer le 32 mis par défaut, fastoche non ?

Regarde :

Private Sub Text1_Change()
  Static toto As String
  If Not IsNumeric(Text1.Text) And Text1.Text <> "" Then
    Text1.Text = toto
    Text1.SelStart = Len(Text1.Text)
    Exit Sub
  End If
  toto = Text1.Text
End Sub

T'es bien réveillé ?
0
annyong Messages postés 38 Date d'inscription lundi 23 avril 2007 Statut Membre Dernière intervention 25 février 2015
30 mai 2007 à 15:19
bon, finalement j'ai pu trouver une solution en utilisant un user form.
je n'avais pas compris que la solution que vous proposiez demandait de passer par le user form. je pense que j'avais pas expliqué assez clairement mon problème.
en tout cas, avec le user form, effectivement ça marche :-)

merci beaucoup pour votre aide MPi et jmfmarques !!
0
Rejoignez-nous