Convertir cantidad en letras

ouzzin Mensajes publicados 268 Fecha de registro   Estado Miembro Última intervención   -  
 toxicjesus -
Hola,
he creado un estado de recibo del cliente, tengo la cantidad en cifras, lo que quisiera ahora es tener también esa misma cantidad en letras como en los recibos.
también quisiera saber cómo hacer para que la hoja de impresión sea de tamaño pequeño.

Estoy utilizando Access 2003

gracias
Configuración: Windows XP Internet Explorer 6.0

12 respuestas

  1. Mike-31 Mensajes publicados 18405 Fecha de registro   Estado Colaborador Última intervención   5 147
     
    Hola,

    Hace algunos años, por mi trabajo, recuperé una función personalizada cuyo nombre del autor no recuerdo, le pido disculpas.
    Copia este código en un módulo de macro e Inserción/Función selecciona personalizada, haz clic en el nombre del código chiffrelettre, y haz referencia a la celda en la que vas a ingresar tu número

    Function chiffrelettre(s)
    Dim a As Variant, gros As Variant
    a = Array("", "Uno", "Dos", "Tres", "Cuatro", "Cinco", "Seis", "Siete", _
    "Ocho", "Nueve", "Diez", "Once", "Doce", "Trece", "Catorce", "Quince", "Dieciséis", "Diecisiete", _
    "Dieciocho", "Diecinueve", "Veinte", "Veintiuno", "Veintidós", "Veintitrés", "Veinticuatro", _
    "Veinticinco", "Veintiséis", "Veintisiete", "Veintiocho", "Veintinueve", "Treinta", "Treinta y Uno", _
    "Treinta y Dos", "Treinta y Tres", "Treinta y Cuatro", "Treinta y Cinco", "Treinta y Seis", "Treinta y Siete", _
    "Treinta y Ocho", "Treinta y Nueve", "Cuarenta", "Cuarenta y Uno", "Cuarenta y Dos", "Cuarenta y Tres", _
    "Cuarenta y Cuatro", "Cuarenta y Cinco", "Cuarenta y Seis", "Cuarenta y Siete", "Cuarenta y Ocho", _
    "Cuarenta y Nueve", "Cincuenta", "Cincuenta y Uno", "Cincuenta y Dos", "Cincuenta y Tres", _
    "Cincuenta y Cuatro", "Cincuenta y Cinco", "Cincuenta y Seis", "Cincuenta y Siete", "Cincuenta y Ocho", _
    "Cincuenta y Nueve", "Sesenta", "Sesenta y Uno", "Sesenta y Dos", "Sesenta y Tres", _
    "Sesenta y Cuatro", "Sesenta y Cinco", "Sesenta y Seis", "Sesenta y Siete", "Sesenta y Ocho", _
    "Sesenta y Nueve", "Sesenta y Diez", "Sesenta y Once", "Sesenta y Doce", "Sesenta y Trece", _
    "Sesenta y Catorce", "Sesenta y Quince", "Sesenta y Dieciséis", "Sesenta y Diecisiete", _
    "Sesenta y Dieciocho", "Sesenta y Diecinueve", "Ochenta", "Ochenta y Uno", _
    "Ochenta y Dos", "Ochenta y Tres", "Ochenta y Cuatro", "Ochenta y Cinco", _
    "Ochenta y Seis", "Ochenta y Siete", "Ochenta y Ocho", "Ochenta y Nueve", _
    "Ochenta y Diez", "Ochenta y Once", "Ochenta y Dos", "Ochenta y Tres", _
    "Ochenta y Catorce", "Ochenta y Quince", "Ochenta y Dieciséis", "Ochenta y Diecisiete", _
    "Ochenta y Dieciocho", "Ochenta y Diecinueve")
    gros = Array("", " Billones ", " Miles de millones ", " Millones ", " Mil ", " Euros ", " Billion ", _
    " Miles de millones ", " Millón ", " Mil ", " Euro ")
    sp = Space(1)
    chaine = "00000000000000"
    Cent = s * 100 - (Int(s) * 100)
    s = Str(Int(s)): lg = Len(s) - 1: s = Right(s, lg): lg = Len(s)
    If lg < 15 Then chaine = Mid(chaine, 1, (15 - lg)) Else chaine = ""
    s = chaine + s
    'billones a centenas
    gp = 1
    For k = 1 To 5
    x = Mid(s, gp, 1): c = a(Val(x))
    x = Mid(s, gp + 1, 2): d = a(Val(x))
    If k = 5 Then
    If t2 <> "" And c & d = "" Then mydz = " Euros " & sp: GoTo fin
    If t <> "" And c = "" And d = "Uno" Then mydz = " Un Euros " & sp: GoTo fin
    If t <> "" And t2 = "" And c & d = "" Then mydz = " d'Euros " & sp: GoTo fin
    If t & c & d = "" Then myct = "": mydz = "": GoTo fin
    End If
    If c & d = "" Then GoTo fin
    If d = "" And c <> "" And c <> "Uno" Then mydz = c & sp & "Céntimos " & gros(k) & sp: GoTo fin
    If d = "" And c = "Uno" Then mydz = "Céntimos " & gros(k) & sp: GoTo fin
    If d = "Uno" And c = "" Then myct = IIf(k = 4, gros(k) & sp, "Uno " & gros(k + 5) & sp): GoTo fin
    If d <> "" And c = "Uno" Then mydz = "Centavo" & sp
    If d <> "" And c <> "" And c <> "Uno" Then mydz = c & sp & "Centavo" + sp
    myct = d & sp & gros(k) & sp
    fin:
    t2 = mydz & myct
    t = t & mydz & myct
    mydz = "": myct = ""
    gp = gp + 3
    Next
    d = a(Cent)
    If t <> "" Then myct = IIf(Cent = 1, " Centavo ", " Centavos ")
    If t = "" Then myct = IIf(Cent = 1, " Centavo de Euro ", " Centavos de Euro ")
    If Cent = 0 Then d = "": myct = ""
    chiffrelettre = t & d & myct
    End Function

    Hasta luego
    Mike-31

    Un problema sin solución es un problema mal planteado  (Einstein)
    13
    1. lami20j Mensajes publicados 21506 Fecha de registro   Estado Moderador, Colaborador de seguridad Última intervención   3 571
       
      Hola,

      del cual no recuerdo el nombre del autor para citarlo, que me disculpe.

      Creo que es JvDo
      --
      106485010510997108
      0
      1. Mike-31 Mensajes publicados 18405 Fecha de registro   Estado Colaborador Última intervención   5 147 > lami20j Mensajes publicados 21506 Fecha de registro   Estado Moderador, Colaborador de seguridad Última intervención  
         
        Hola Lami20J,

        Es posible, pero JVDO según el enlace que proporcionas ya lo había copiado de Exelabo y creo que fue en ese foro donde yo también lo recuperé.

        Está ligeramente modificado con el reemplazo en la celda del número por el número escrito en letras ingresado en A, lo cual puede ser una ventaja, mientras que el que propongo, seguramente del mismo autor, conserva el número y llena la celda elegida con el número en letras.
        Pero no importa, el código funciona bien y, sea cual sea su autor, hay que agradecerle, lástima que no se pueda citar de manera cierta.


        ¡Hasta luego!
        Mike-31

        Un problema sin solución es un problema mal planteado (Einstein)
        0
    2. ouzzin Mensajes publicados 268 Fecha de registro   Estado Miembro Última intervención   29
       
      Gracias
      es un poco borroso para mí.
      vamos al campo "montantchiffre"
      ¿debo crear otro campo "montantLettre" en el que se mostrará el monto en letras que deberá recibir la macro?
      0
    3. boul
       
      Gracias por el código
      bien hecho
      0
  2. ouzzin Mensajes publicados 268 Fecha de registro   Estado Miembro Última intervención   29
     
    Abre tu archivo, clic derecho en la pestaña de la página, esto abrirá el visual basic Inserción/Módulo en esta página en blanco pega la totalidad del código a continuación


    Hola,
    acabo de retomar el trabajo, aún no entiendo tu procedimiento. ¿Lo que ustedes llaman archivo es la base de datos o es una consulta o un estado? Yo copié el código en el módulo y lo nombré montantLettre

    En la tabla factura, tengo
    num-factura
    montant_chiffre
    montant_lettre
    fecha


    Regresa a tu hoja de cálculo y selecciona la celda que debe contener el monto en letras Inserción/Función, selecciona Personalizada y clic en chiffrelettre Se abrirá un cuadro de diálogo, clic en la celda en la que ingresarás el valor en cifra


    No veo dónde está Inserción/Función y ¿la hoja de cálculo está en el campo "montant_lettre" de la consulta o del estado?
    Aclaración: no somos nosotros quienes debemos ingresar en el campo "montant_lettre". Es al ingresar en el campo "montant_chiffre" que el otro campo se llena.
    Gracias.
    5
  3. Mike-31 Mensajes publicados 18405 Fecha de registro   Estado Colaborador Última intervención   5 147
     
    Hola,

    Abre tu archivo, haz clic derecho en la pestaña de la página, esto abrirá el visual basic
    Inserción/Módulo en esta página en blanco pega la totalidad del código a continuación

    Function chiffrelettre(s)
    Dim a As Variant, gros As Variant
    a = Array("", "Uno", "Dos", "Tres", "Cuatro", "Cinco", "Seis", "Siete", _
    "Ocho", "Nueve", "Diez", "Once", "Doce", "Trece", "Catorce", "Quince", "Dieciséis", "Diecisiete", _
    "Dieciocho", "Diecinueve", "Veinte", "Veintiuno", "Veintidós", "Veintitrés", "Veinticuatro", _
    "Veinticinco", "Veintiséis", "Veintisiete", "Veintiocho", "Veintinueve", "Treinta", "Treinta y Uno", _
    "Treinta y Dos", "Treinta y Tres", "Treinta y Cuatro", "Treinta y Cinco", "Treinta y Seis", "Treinta y Siete", _
    "Treinta y Ocho", "Treinta y Nueve", "Cuarenta", "Cuarenta y Uno", "Cuarenta y Dos", "Cuarenta y Tres", _
    "Cuarenta y Cuatro", "Cuarenta y Cinco", "Cuarenta y Seis", "Cuarenta y Siete", "Cuarenta y Ocho", _
    "Cuarenta y Nueve", "Cincuenta", "Cincuenta y Uno", "Cincuenta y Dos", "Cincuenta y Tres", _
    "Cincuenta y Cuatro", "Cincuenta y Cinco", "Cincuenta y Seis", "Cincuenta y Siete", "Cincuenta y Ocho", _
    "Cincuenta y Nueve", "Sesenta", "Sesenta y Uno", "Sesenta y Dos", "Sesenta y Tres", _
    "Sesenta y Cuatro", "Sesenta y Cinco", "Sesenta y Seis", "Sesenta y Siete", "Sesenta y Ocho", _
    "Sesenta y Nueve", "Sesenta y Diez", "Sesenta y Once", "Sesenta y Doce", "Sesenta y Trece", _
    "Sesenta y Catorce", "Sesenta y Quince", "Sesenta y Dieciséis", "Sesenta y Diecisiete", _
    "Sesenta y Dieciocho", "Sesenta y Diecinueve", "Ochenta", "Ochenta y Uno", _
    "Ochenta y Dos", "Ochenta y Tres", "Ochenta y Cuatro", "Ochenta y Cinco", _
    "Ochenta y Seis", "Ochenta y Siete", "Ochenta y Ocho", "Ochenta y Nueve", _
    "Ochenta y Diez", "Ochenta y Uno", "Ochenta y Dos", "Ochenta y Tres", _
    "Ochenta y Cuatro", "Ochenta y Quince", "Ochenta y Dieciséis", "Ochenta y Diecisiete", _
    "Ochenta y Dieciocho", "Ochenta y Diecinueve")
    gros = Array("", " Billones ", " Mil millones ", " Millones ", " Mil ", " Euros ", " Billion ", _
    " Mil millones ", " Millón ", " Mil ", " Euro ")
    sp = Space(1)
    chaine = "00000000000000"
    Cent = s * 100 - (Int(s) * 100)
    s = Str(Int(s)): lg = Len(s) - 1: s = Right(s, lg): lg = Len(s)
    If lg < 15 Then chaine = Mid(chaine, 1, (15 - lg)) Else chaine = ""
    s = chaine + s
    'billions au centaines
    gp = 1
    For k = 1 To 5
    x = Mid(s, gp, 1): c = a(Val(x))
    x = Mid(s, gp + 1, 2): d = a(Val(x))
    If k = 5 Then
    If t2 <> "" And c & d = "" Then mydz = " Euros " & sp: GoTo fin
    If t <> "" And c = "" And d = "Uno" Then mydz = " Un Euros " & sp: GoTo fin
    If t <> "" And t2 = "" And c & d = "" Then mydz = " de Euros " & sp: GoTo fin
    If t & c & d = "" Then myct = "": mydz = "": GoTo fin
    End If
    If c & d = "" Then GoTo fin
    If d = "" And c <> "" And c <> "Uno" Then mydz = c & sp & "Céntimos " & gros(k) & sp: GoTo fin
    If d = "" And c = "Uno" Then mydz = "Céntimos " & gros(k) & sp: GoTo fin
    If d = "Uno" And c = "" Then myct = IIf(k = 4, gros(k) & sp, "Un " & gros(k + 5) & sp): GoTo fin
    If d <> "" And c = "Uno" Then mydz = "Cent" & sp
    If d <> "" And c <> "" And c <> "Uno" Then mydz = c & sp & "Cent" + sp
    myct = d & sp & gros(k) & sp
    fin:
    t2 = mydz & myct
    t = t & mydz & myct
    mydz = "": myct = ""
    gp = gp + 3
    Next
    d = a(Cent)
    If t <> "" Then myct = IIf(Cent = 1, " Cent ", " Céntimos ")
    If t = "" Then myct = IIf(Cent = 1, " Cent de Euro ", " Céntimos de Euro ")
    If Cent = 0 Then d = "": myct = ""
    chiffrelettre = t & d & myct
    End Function

    Vuelve a tu hoja de cálculo y selecciona la celda que debe contener el monto en letras
    Inserción/Función, selecciona Personalizada y haz clic en chiffrelettre
    Una caja de diálogo se abrirá, haz clic en la celda en la que escribirás el valor en cifras

    Si encuentras un problema vuelve al foro, de todos modos mantennos informados

    ¡Hasta luego!
    Mike-31

    Un problema sin solución es un problema mal planteado (Einstein)
    4
  4. Mike-31 Mensajes publicados 18405 Fecha de registro   Estado Colaborador Última intervención   5 147
     
    Hola,

    Pensaba que te habías rendido, recupera un ejemplo y algunas explicaciones con el enlace de abajo, he hecho algunas modificaciones en el código

    https://www.cjoint.com/?gsvdVACCVo

    ¡Hasta luego!
    Mike-31

    Un problema sin solución es un problema mal planteado (Einstein)
    1
  5. ouzzin Mensajes publicados 268 Fecha de registro   Estado Miembro Última intervención   29
     
    gracias, voy para allá
    ¡hasta luego!
    1
  6. ouzzin Mensajes publicados 268 Fecha de registro   Estado Miembro Última intervención   29
     
    es un archivo de Excel que me has enviado, yo utilizo Access.
    1
  7. Mike-31 Mensajes publicados 18405 Fecha de registro   Estado Colaborador Última intervención   5 147
     
    Exactamente, lo siento, he leído por encima

    A+
    Mike-31

    Un problema sin solución es un problema mal planteado (Einstein)
    1
  8. ouzzin Mensajes publicados 268 Fecha de registro   Estado Miembro Última intervención   29
     
    Exactamente, lo mismo para mí, leí por encima


    HOLA
    sigo esperando tu ayuda para mi problema con Access.

    Gracias
    0
  9. Mike-31 Mensajes publicados 18405 Fecha de registro   Estado Colaborador Última intervención   5 147
     
    Re,

    Access no es mi fuerte, mira en estos dos enlaces

    http://www.commentcamarche.net/faq/sujet 11100 vb6 vba transformar número en texto

    https://access.developpez.com/sources/?page=Conv#ConvNomsPropres

    ¡Hasta luego!
    Mike-31

    Un problema sin solución es un problema mal planteado (Einstein)
    0
  10. ouzzin Mensajes publicados 268 Fecha de registro   Estado Miembro Última intervención   29
     
    gracias
    0
  11. mountaga
     
    gracias a todos los miembros de este foro, especialmente a Mike-31 .... ¡también al sitio!!!
    mountaga kane de Senegal (tagakane@hotmail.com)
    0
  12. toxicjesus
     
    Lo siento decirte que esta función no funciona. Por ejemplo, si pones 95, dice = Noventa y cinco euros.
    0