[VB] [évènement clavier souris] [touche enter

Fermé
julia82 Messages postés 9 Date d'inscription mardi 6 septembre 2005 Statut Membre Dernière intervention 9 septembre 2005 - 9 sept. 2005 à 14:16
said1658 Messages postés 44 Date d'inscription dimanche 7 août 2005 Statut Membre Dernière intervention 15 juillet 2007 - 9 sept. 2005 à 16:43
Bonjour et merci à ceux qui m’ont déjà répondu auj., :)
Toujours des questions sur VB (je débute dans ce langage)…
Je veux faire un événement clavier et un événement souris qui écoute un champ texte. (Le but est de contrôler que le contenu soit bien un num. de carte d’identité.. )
Je voudrais appeler Verificar_NIF… quand l’utilisateur appuie sur entrée (evt clavier) et aussi quand il sort du champ (evt souris).
Je mets le code à la fin du message :

Ce code ne fait rien (je sais que ma fonction Verificar.. fonctionne car je l’ai testée). Il ne me fait même pas le msgBox avec le code de la touche.

Je cherche donc :
- code de la touche entrée (vbclrf je crois ou 13 en valeur), et la fonction qui peut la comparer au KeyAscii poussé : cInt, Cstr,car…. ?
- S’il y a une erreur de code ou dans mon événement clavier TextBox121_KeyPress ou ds mon évènement souris TextBox121_LostFocus
- Si j’ai bien utilisé les bons types d’évènements…


Merci beaucoup !

Julia
frigierejulia@yahoo.fr

'funcionamiento:escucha del control de NIF
'nota: cambiar por un nombre más adecuado (cuando nombre del control haya cambiado)

Private Sub TextBox121_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
'Dim AllowedKeys As String 'control mientras tecleando (lo harémos luego)

Dim NIF_entrado As String
NIF_entrado = TextBox121.Text 'cambiar por un nombre más adecuado

Dim valido As Boolean

Dim KeysOfValidation As String 'Array de las teclas de validación
KeysOfValidation = "{ENTER}" 'completar luego
'If InStr(KeysOfValidation , Chr(KeyAscii)) = 0 Then 'ha presado Enter

MsgBox CStr(KeyAscii)
If KeyAscii = CInt(vbCrLf) Then
    valido = Verificar_NIF(NIF_entrado)

    'Controles: no se podrá salir del campo hasta que el NIF sea valido (por ejemplo)
    Dim mensaje_alert As String
    mensaje_alert = "No se podrá grabar el documento si los campos no son validos !"
    'poner variables de control en un estado False (luego)

    If valido = False Then
    MsgBox mensaje_alert, vbOKOnly, "WARNING"
    End If
End If

End Sub

'
'

Private Sub TextBox121_LostFocus()
Dim NIF_entrado As String
NIF_entrado = TextBox121.Text 'cambiar por un nombre más adecuado

Dim valido As Boolean
valido = Verificar_NIF(NIF_entrado)


Dim mensaje_alert As String
mensaje_alert = "No se podrá grabar el documento si los campos no son validos !"
'poner variables de control en un estado False (luego)
'Controles: no se podrá salir del campo hasta que el NIF sea valido (por ejemplo, hacerlo luego)

If valido = False Then
MsgBox mensaje_alert, vbOKOnly, "WARNING"
End If
End Sub
A voir également:

3 réponses

said1658 Messages postés 44 Date d'inscription dimanche 7 août 2005 Statut Membre Dernière intervention 15 juillet 2007 9
9 sept. 2005 à 16:43
salam,

au lieu de courriger ce programme et d'essayer de l'adapter pour fonctionner avec ton projet, je prefere que tu me donne une description du probleme.
decris moi le probleme et tu veux quoi comme resultat a la fin.
et qu'elles sont les entreré valides comme num. de carte d’identité
(donne moi un exemple de num. de carte d’identité valide et un autre non valide)
3
julia82 Messages postés 9 Date d'inscription mardi 6 septembre 2005 Statut Membre Dernière intervention 9 septembre 2005 1
9 sept. 2005 à 15:51
je mets la fonction (qui marche je l'ai testée) mais elle appelle d'autres fonctions et vous allez vous régalez à lire tout ça :p

mais je crois que c'est peut-être ce que tu as dit du ByVal.

Thanks!

Julia
frigierejulia@yahoo.fr

'función Verificar_NIF_para_Caixa() [en este caso del formulario]
'entrada:
'salida: True  si valido / False si no valido (normalmente no hace falta, no habría que aceptar el documento si los datos contraladas no son validas
'funcionamiento:

Public Function Verificar_NIF_para_Caixa(NIF_entrado As String) As Boolean
Dim mensaje As String
'initialisation necessaire? mensaje = ""
Dim valido As Boolean
valido = Verificar_NIF(NIF_entrado, mensaje)
If valido = True Then
    MsgBox mensaje, vbOKOnly, "Aviso"
    Verificar_NIF_para_Caixa = True
Else
    MsgBox mensaje, vbOKOnly, "WARNING"
    Verificar_NIF_para_Caixa = False
    'avisar que tiene que ser valido para la grabación del documento??
 End If

End Function

'función Verificar_NIF
'entrada: el NIF entero entrado por el usuario (cadena de caracteres)
'salida:el mensaje que hay que mandar al usuario
'funcionamiento: función principal que

 Public Function Verificar_NIF(valor As String, mensaje As String) As Boolean
 'mensaje en paramètres????
    Dim aux As String
    mensaje = ""
    valor = UCase(valor) 'ponemos la letra en mayúscula
    aux = Mid(valor, 1, Len(valor) - 1) 'quitamos la letra del NIF
   
    If Len(aux) >= 7 And IsNumeric(aux) Then
        aux = Calc_NIF(aux) 'calculamos la letra del NIF para comparar con la que tenemos
    
    Else
        MsgBox "El dato introducido no corresponde a un NIF"
        Verificar_NIF = True
       Exit Function
    End If
   
    If valor <> aux Then 'comparamos las letras
        mensaje = "El NIF " & valor & " es INCORRECTO" & vbCrLf ' & "D.N.I. Correcto: " & aux
        'mensaje DNI?
        Verificar_NIF = True
   
    Else
        mensaje = "El NIF " & valor & " es CORRECTO"
   
    End If
End Function

'función Calc_NIF
'entrada: la primera parte del NIF entrado por el usuario (debería ser 7 digitos)
'salida: el NIF que tendría que ser, en función de los digitos entrados
'funcionamiento: calcula la letra (que debería corresponder con la entrada en seguida de los digitos: ver función Verificar_NIF) a partir de los digitos entrados


 Public Function Calc_NIF(valor As String) As String
     Dim resto As Integer
      Dim letra_NIF As String
      letra_NIF = ""

    'gestión de errores
    If valor = "" Then
        MsgBox "No se ha introducido datos", , "Aviso"
        Calc_NIF = ""
        Exit Function
        
   'gestión de errores
    ElseIf Len(valor) < 7 Then
        MsgBox "No se puede calcular el NIF, faltan dígitos"
        Calc_NIF = ""
        Exit Function
   
   'gestión de errores
    ElseIf Not IsNumeric(valor) Then
        MsgBox "el dato introducido no es numérico", , "Aviso"
        Calc_NIF = ""
        Exit Function
   
   'comprobación del nif (ya el formato está comprobado)
    Else
        resto = Val(valor) Mod 23
          
        
        Select Case resto
            Case 0
                letra_NIF = "T"
           Case 1
                letra_NIF = "R"
            Case 2
                letra_NIF = "W"
            Case 3
                letra_NIF = "A"
            Case 4
                letra_NIF = "G"
            Case 5
                letra_NIF = "M"
            Case 6
                letra_NIF = "Y"
            Case 7
                letra_NIF = "F"
            Case 8
                letra_NIF = "P"
            Case 9
                letra_NIF = "D"
            Case 10
                letra_NIF = "X"
            Case 11
                letra_NIF = "B"
            Case 12
                letra_NIF = "N"
            Case 13
                letra_NIF = "J"
            Case 14
                letra_NIF = "Z"
            Case 15
                letra_NIF = "S"
            Case 16
                letra_NIF = "Q"
            Case 17
                letra_NIF = "V"
            Case 18
                letra_NIF = "H"
            Case 19
                letra_NIF = "L"
            Case 20
                letra_NIF = "C"
            Case 21
                letra_NIF = "K"
            Case 22
                letra_NIF = "E"
        End Select
        
        Calc_NIF = valor & letra_NIF
        Exit Function
   
   
    End If
End Function
1
said1658 Messages postés 44 Date d'inscription dimanche 7 août 2005 Statut Membre Dernière intervention 15 juillet 2007 9
9 sept. 2005 à 15:36
salam,

dans vb6 l'evenement Private Sub TextBox121_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) n'existe pas par contre tu dois mettre Private Sub TextBox121_KeyPress(KeyAscii As Integer)

tu n'as pas defini la fonction Verificar_NIF.

a mon avi tu as fais un copier collé de cette fonction que tu as inséré das ton projet.

pour quoi ne pas poser le prob en detail et donné une definition a la fonction que tu veux ajouter dans ton projet.
0