[VBA E]erreur incompatibilité de type que je ne comprend pas [Résolu]

treza88 36 Messages postés samedi 13 mars 2004Date d'inscription 23 octobre 2010 Dernière intervention - 6 juil. 2006 à 21:24 - Dernière réponse : treza88 36 Messages postés samedi 13 mars 2004Date d'inscription 23 octobre 2010 Dernière intervention
- 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")

End If
End Sub

<!-- END TEMPLATE: bbcode_code -->

<!-- / message -->
Afficher la suite 

Votre réponse

7 réponses

valtrase 936 Messages postés lundi 19 janvier 2004Date d'inscription 17 mars 2017 Dernière intervention - 8 juil. 2006 à 18:36
+3
Utile
Re,
Pas trop d'idée sur la question , moi tu peux faire des essais des deux méthodes et voir celle qui te convient le mieux

Cordialement, Jean-Paul  
______________________________________________________________________

Le Savoir n'a de valeur que s'il est partagé
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de valtrase
treza88 36 Messages postés samedi 13 mars 2004Date d'inscription 23 octobre 2010 Dernière intervention - 6 juil. 2006 à 21:39
0
Utile
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")
      
      End If
End Sub
Commenter la réponse de treza88
valtrase 936 Messages postés lundi 19 janvier 2004Date d'inscription 17 mars 2017 Dernière intervention - 7 juil. 2006 à 00:05
0
Utile
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 .......

Cordialement, Jean-Paul  
______________________________________________________________________

Le Savoir n'a de valeur que s'il est partagé
Commenter la réponse de valtrase
treza88 36 Messages postés samedi 13 mars 2004Date d'inscription 23 octobre 2010 Dernière intervention - 7 juil. 2006 à 08:12
0
Utile
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


Set USF = New Classe1


TextBox1.SetFocus
Me.Controls(Me.ActiveControl.Name).ActiveControl. _
Object.BackColor = RGB(225, 225, 225)


USF.cibleFocus Me
End Sub




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
Commenter la réponse de treza88
valtrase 936 Messages postés lundi 19 janvier 2004Date d'inscription 17 mars 2017 Dernière intervention - 8 juil. 2006 à 00:42
0
Utile
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")

'MsgBox H1






Cordialement, Jean-Paul  

______________________________________________________________________

Le Savoir n'a de valeur que s'il est partagé
Commenter la réponse de valtrase
treza88 36 Messages postés samedi 13 mars 2004Date d'inscription 23 octobre 2010 Dernière intervention - 8 juil. 2006 à 08:08
0
Utile
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.
Commenter la réponse de treza88
treza88 36 Messages postés samedi 13 mars 2004Date d'inscription 23 octobre 2010 Dernière intervention - 8 juil. 2006 à 18:53
0
Utile
Merci pour tout Jean_Paul

Je vais tester tout ça
Commenter la réponse de treza88

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.