treza88
Messages postés36Date d'inscriptionsamedi 13 mars 2004StatutMembreDernière intervention23 octobre 2010
-
6 juil. 2006 à 21:24
treza88
Messages postés36Date d'inscriptionsamedi 13 mars 2004StatutMembreDernière intervention23 octobre 2010
-
8 juil. 2006 à 18:53
Bonsoir à tous
J'ai un petit souci avec le code ci-dessous, je ne comprend pourquoi quand le textbox1 est vide et que je le quitte il met renvoie le message d'erreur "incompatibilité de type" sur la ligne en rouge.
Si quelqu'un pouvait m'expliquer pourquoi ça m'arrangerait.
Pour palier a ce probleme j'ai rajouté un test sur une valeur nul sur le code tout en dessous, apparemment ça fonctionne, mais etait-ce la bonne solution?
Sinon quelle autre solution existe.
Merci
<!-- BEGIN TEMPLATE: bbcode_code -->
Code :
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim c As Variant
Dim h1 As Date
Application.ScreenUpdating = False
TextBox1.Value = TimeValue(Left(Application.Text(TextBox1.Value, "00.00"), 2) _
& ":" & Right(TextBox1.Value, 2))
c = TextBox1.Value
h1 = TextBox1.Value
TextBox1.Value = Format(c, "hh\H mm")
End Sub
<!-- END TEMPLATE: bbcode_code -->
<!-- BEGIN TEMPLATE: bbcode_code -->
Code :
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim c As Variant
Dim h1 As Date
Application.ScreenUpdating = False
If TextBox1.Value <> "" Then
TextBox1.Value = TimeValue(Left(Application.Text(TextBox1.Value, "00.00"), 2) _
& ":" & Right(TextBox1.Value, 2))
c = TextBox1.Value
h1 = TextBox1.Value
TextBox1.Value = Format(c, "hh\H mm")
treza88
Messages postés36Date d'inscriptionsamedi 13 mars 2004StatutMembreDernière intervention23 octobre 2010 6 juil. 2006 à 21:39
Je me suis permis de remettre le code car je n'ai pas arrivé à l'editer pour changer la presentation.
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim c As Variant
Dim h1 As Date
Application.ScreenUpdating = False
TextBox1.Value = TimeValue(Left(Application.Text(TextBox1.Value, "00.00"), 2) _
& ":" & Right(TextBox1.Value, 2))
c = TextBox1.Value
h1 = TextBox1.Value
TextBox1.Value = Format(c, "hh\H mm")
End Sub
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim c As Variant
Dim h1 As Date
Application.ScreenUpdating = False
If TextBox1.Value <> "" Then
TextBox1.Value = TimeValue(Left(Application.Text(TextBox1.Value, "00.00"), 2) _
& ":" & Right(TextBox1.Value, 2))
c = TextBox1.Value
h1 = TextBox1.Value
TextBox1.Value = Format(c, "hh\H mm")
valtrase
Messages postés937Date d'inscriptionlundi 19 janvier 2004StatutMembreDernière intervention 9 mai 20223 7 juil. 2006 à 00:05
Salut,
Dans ton code tu demmande de faire un formatage(TimeValue) sur une chaine vide ce n'est pas possible
TextBox1.Value = TimeValue(Left(Application.Text(TextBox1.Value, "00.00"), 2) _
& ":" & Right(TextBox1.Value, 2))
De plus je ne vois pas ce que tu cherche à faire .......
treza88
Messages postés36Date d'inscriptionsamedi 13 mars 2004StatutMembreDernière intervention23 octobre 2010 7 juil. 2006 à 08:12
Salut Jean-Paul
Ce que je cherche à faire c'est rentrer un chiffre par le pavé numerique dans un texbox donc avec une virgile
le transformer en heure pour en faire des calcul derriere (donc recuperer la valeur avec la variable h1) et lui donner
une apparence horraire en dernier une fois que je quitte le textbox.(Ceci pour 40 textbox)
Saurait tu si la procedure lostfocus fonctionne correctement avec un textbox situe sur une userform, car j'ai des petit soucis
à la faire fonctionner corectement.
J'ai un code qui me permet de boucler cette procedure mais qui fonctionne avec lostfocus et ça ne fonctionne pas
exactement comme je voudrais car il doit y avoir une diference subtile d'utilisation entre la procedure exit et lostfocus d'un textbox.
Je fais passer le code pour la boucle sur textbox:
Une partie et dans un modules de classe l'autre et dans le code de la userform
'---- dans un module de classe nommé Classe1
Option Explicit
Public Event GetFocus()
Public Event LostFocus(ByVal Txtbx As String)
Public nomObjActif As String
Public Sub cibleFocus(USF As MSForms.UserForm)
With USF
If TypeName(.ActiveControl) = "Frame" Then
If TypeName(.Controls(.ActiveControl.Name).ActiveControl) = _
"TextBox" Then
nomObjActif = .Controls(.ActiveControl.Name).ActiveControl.Name
On Error GoTo errorHandler
Do
DoEvents
If .ActiveControl.Name <> nomObjActif Then
If TypeName(.Controls(.ActiveControl.Name).ActiveControl) = _
"TextBox" Then
If TypeName(.ActiveControl) = "Frame" Then
RaiseEvent LostFocus(nomObjActif)
nomObjActif = .Controls(.ActiveControl.Name).ActiveControl.Name
RaiseEvent GetFocus
End If
End If
End If
Loop
'RaiseEvent LostFocus(nomObjActif)
End If
End If
End With
errorHandler:
Exit Sub
End Sub
----------------------------------------------------------------------------------------------
'--- dans l'UserForm ---
Option Explicit
Private WithEvents USF As Classe1
Private Sub UserForm_Activate()
tb_date = Date
ComboBox1.ListIndex = 0
Private Sub USF_GetFocus()
Me.Controls(Me.ActiveControl.Name).ActiveControl. _
Object.BackColor = RGB(225, 225, 225)
End Sub
Private Sub USF_LostFocus(ByVal Txtbx As String)
Dim d As Variant
If Me.Controls(Txtbx).Value <> "" Then
Me.Controls(Txtbx).Value = TimeValue(Left(Application.Text(Me.Controls(Txtbx).Value, "00.00"), 2) _
& ":" & Right(Me.Controls(Txtbx).Value, 2))
d = Me.Controls(Txtbx).Value
Me.Controls(Txtbx).Value = Format(d, "hh\H mm")
End If
Me.Controls(Txtbx).BackColor = RGB(255, 255, 255)
'
'
'
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Set USF = Nothing
End Sub
Vous n’avez pas trouvé la réponse que vous recherchez ?
valtrase
Messages postés937Date d'inscriptionlundi 19 janvier 2004StatutMembreDernière intervention 9 mai 20223 8 juil. 2006 à 00:42
Re,
Pourquoi faire une classe pour si peu de chose tu as les évènement Enter et Exit qui sont similaire
à Get etLostFocus.
Colles ce code dans l'évènement Exit de ton TextBox
If TextBox1 = "" Or Not (IsDate(TextBox1)) _
Then MsgBox "Entrez une valeur non nulle et valide !!": _
Cancel = True: Exit Sub
Dim H1 As Variant
H1 = Replace(TextBox1.Value, ".", ":")
TextBox1 = Format(H1, "ttttt")
treza88
Messages postés36Date d'inscriptionsamedi 13 mars 2004StatutMembreDernière intervention23 octobre 2010 8 juil. 2006 à 08:08
Salut
C'est vrai que c'est peut etre beaucoup mais ça permet de faire une boucle sur les 40 textbox
au lieu de faire 40 procedures Enter et Exit qui fait une longueur de code non négligeable.
Mais toi tu trouve que ce serait plus judicieu de faire 40 procedure exit.