annyong
Messages postés38Date d'inscriptionlundi 23 avril 2007StatutMembreDernière intervention25 février 2015
-
28 mai 2007 à 11:02
annyong
Messages postés38Date d'inscriptionlundi 23 avril 2007StatutMembreDernière intervention25 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)
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 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.
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 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.
econs
Messages postés4030Date d'inscriptionmardi 13 mai 2003StatutMembreDernière intervention23 décembre 200824 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.
econs
Messages postés4030Date d'inscriptionmardi 13 mai 2003StatutMembreDernière intervention23 décembre 200824 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.
annyong
Messages postés38Date d'inscriptionlundi 23 avril 2007StatutMembreDernière intervention25 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.
annyong
Messages postés38Date d'inscriptionlundi 23 avril 2007StatutMembreDernière intervention25 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 )
annyong
Messages postés38Date d'inscriptionlundi 23 avril 2007StatutMembreDernière intervention25 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 ?
annyong
Messages postés38Date d'inscriptionlundi 23 avril 2007StatutMembreDernière intervention25 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 :-(
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 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
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
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 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
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 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 ?
annyong
Messages postés38Date d'inscriptionlundi 23 avril 2007StatutMembreDernière intervention25 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 ??
annyong
Messages postés38Date d'inscriptionlundi 23 avril 2007StatutMembreDernière intervention25 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"
annyong
Messages postés38Date d'inscriptionlundi 23 avril 2007StatutMembreDernière intervention25 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
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 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)
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 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
annyong
Messages postés38Date d'inscriptionlundi 23 avril 2007StatutMembreDernière intervention25 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 !!