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