Saltar al contenido

control pago a proveedores


Recommended Posts

publicado

buenos dias, tengo en un mismo libro una hoja de registro de proveedores y luego otras hojas con sus respectivos pagos en bancos.

quisiera que por medio de macros o formulas desde proveedores automaticamente se coloquen en sus respectivas hojas.

por ejemplo, un proveedor al que tenga que pagar a 30, 60 y 90 dias una factura por el bsch por un valor total de 1000 euros me lo coloque ordenadamente en la hoja bsch cogiendo su fecha de factura y que me lo desglose en relacion a los dias de pago. por ejemplo si la factura es de 1 de marzo me ponga 1/3 el 31 de marzo, 1/3 el 30 de abril y 1/3 el 30 de mayo (30, 60 y 90 dias a fecha factura).

a otros proveedores les pago a 90 dias en un solo pago, pues que coja la fecha de factura y que calcule 90 dias y la coloque en la hoja correspondiente de su banco y a otros proveedores les pago a 30 y 45 dias que les fraccione el pago de factura 1/2 y 1/2.

en fin, espero haberme hecho entender. de todos modos dejo un archivo explicativo para ello. me corre mucha prisa,....espero me ayudeis.

un saludo y gracias anticipadas al foro

control proveedores.xls

publicado

Buenas, arrian

Dado que los días de pago es una variable básica para poder estructurar el código de tu macro, quizás deberías, en tu hoja proveedores tener 3 columnas, por ejemplo desde la "I" a la "K" en dónde pudieras marcar los días de pago.

O eso, o debes estar seguro de escribir absolutamente siempre igual algunas de esas 3 opciones, de manera que la propia opción fuera el valor de una variable.

No sé si me he explicado correctamente ó te he liado más......jejeje

Y por cierto, si tienes mucha prisa quizás no sea este el lugar donde plantear estas consultas, dado que los usuarios que intentamos echar una mano a los demás lo hacemos de manera totalmente solidaria y altruista y como comprenderás, en esas condiciones no debe haber ningún tipo de "presión" para cumplir plazos, etc....que sí se dan en una relación de tipo laboral....

Un saludo,

Tese

publicado

Hola:

Te adjunto la generación de vencimientos de pago a proveedores en el banco indicado.

He añadido algunas columnas necesarias para el proceso.

Presta especial atención a las listas que hay a partir de la columna AA.

A mi parecer tienes algún fallo conceptual, pero ya te irás dando cuenta con el tiempo y es preferible que los detectes tu mismo en el trabajo del día a día.

Saludos.

control proveedores.xls

publicado

hola tese, estoy totalmente de acuerdo con tu opinion, gracias por tu idea.

- - - - - Mensaje combinado - - - - -

hola macro antonio, he comprobado el fichero y mas o menos es lo que quiero, pero al intentar ejecutar de nuevo el codigo por la introduccion de nuevos proveedores con el boton no funciona y no introduce esos nuevos datos a las hojas de bancos,...como se podria hacer, quizas con algun bucle??? y el sumatorio de los bancos lo haria con un simple subtotal, como podria quitar el loop y la suma en vb sin que afecte al funcionamiento de dicho codigo??? lo de las columnas aa y siguientes me quedo claro, gracias por todo

publicado

Mis disculpas, había un error en la macro, sustituye este procedimiento:

Private Sub Asignar_Click()
Dim Fila


For x = 3 To Range("B" & Rows.Count).End(xlUp).Row


[B] If Not UCase(Range("H" & x)) = "PAGADO" And Not UCase(Range("L" & x)) = "ASIGNADO" Then[/B]

If ComprobarBanco(Range("K" & x)) = False Then
Range("M" & x) = "Banco erróneo. "
End If

If ComprobarCondicionDePago(Range("J" & x)) = False Then
Range("M" & x) = Range("M" & x) & "Falta condición de pago."
End If

y = Range("AE" & CP).Column
vto = 1
Do Until Cells(CP, y) = ""
Fila = Banco.Range("A" & Rows.Count).End(xlUp).Row + 1
Banco.Range("A" & Fila) = Range("A" & x)
Banco.Range("B" & Fila) = vto
Banco.Range("C" & Fila) = Range("B" & x)
Banco.Range("D" & Fila) = Range("C" & x) + Cells(CP, y + 1)
Banco.Range("E" & Fila) = Round(Range("G" & x) * Cells(CP, y) / 100, 2)
Banco.Range("F" & Fila) = Range("D" & x)
Range("L" & x) = "ASIGNADO"
vto = vto + 1
y = y + 2
Loop
Banco.Range("D" & Fila + 1) = "TOTAL"
Banco.Range("E" & Fila + 1).FormulaLocal = "=SUMA(E3:E" & Fila & ")"

[B] End If[/B]

Next


End Sub


[/CODE]

Te resalto la modificación.

Eso si, si tienes bancos nuevos, has de crear su hoja correspondiente de forma manual.

publicado

funciona perfecto, gracias macro antonio!!!!:-) una cuestion mas.... como podria hacer que a la vez que se pasan los datos a los respectivos bancos, se fueran ordenando automaticamente por fecha? quiero decir, tengo ya un proveedor x con fecha 12-04-13 y ahora introduzco otro en la hoja de proveedores con fecha de 10-04-13,....lanzo la macro y que se posicionara antes del que ya tenia (ya que la fecha es anterior)??? un saludo y gracias por todo el esfuerzo, me has ayudado muchisimo

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

  • 109 ¿Te parecen útiles los tips de las funciones? (ver tema completo)

    1. 1. ¿Te parecen útiles los tips de las funciones?


      • No
      • Ni me he fijado en ellos

  • Ayúdanos a mejorar la comunidad

    • Donaciones recibidas este mes: 0.00 EUR
      Objetivo: 130.00 EUR
  • Archivos

  • Estadísticas de descargas

    • Archivos
      188
    • Comentarios
      98
    • Revisiones
      29

    Más información sobre "Cambios en el Control Horario"
    Última descarga
    Por pegones1

    4    1

  • Crear macros Excel

  • Mensajes

    • Hola, veo que tienes 365, así que esta forma funcionará   Almacen.xlsx
    • Buenos días  @LeandroA espero estes bien Tengo un caso idéntico al planteado en la siguiente pregunta: Sin embargo, a diferencia de quien planteo originalmente la pregunta al correr el código no obtengo ningún resultado podrían ayudarme a resolver este inconveniente y que al hacer click en el Botón Guardar (CommandButton3) del Formulario RCS (frmrcs) el archivo pdf quede configurado con orientación vertical, márgenes superior, inferior, derecho e izquierdo = 1 y en página tamaño carta. Si acaso influye uso Microsoft Excel LTSC MSO (versión 2209 Compilación16.0.1.15629.20200) de 64 bits Mucho le sabre agradecer la ayuda que me pueda dar  RCS PRUEBA - copia.xlsm
    • @JSDJSDCon gusto mi estimado Para la opción 1: Sub Surtirhastadondealcanse() Dim ws As Worksheet Set ws = ThisWorkbook.Sheets(1) Dim filaInicio As Integer: filaInicio = 4 Dim filaFin As Integer: filaFin = 7 Dim colInventario As Integer: colInventario = 2 Dim colSolicitudesInicio As Integer: colSolicitudesInicio = 4 ' Columna C Dim colResultadoInicio As Integer: colResultadoInicio = 9 ' Columna I Dim colTotalSurtido As Integer: colTotalSurtido = 12 ' Columna L Dim colFinalInventario As Integer: colFinalInventario = 13 ' Columna M Dim numClientes As Integer: numClientes = 3 Dim fila As Integer, i As Integer For fila = filaInicio To filaFin Dim inventario As Double inventario = Val(ws.Cells(fila, colInventario).Value) Dim solicitudes(1 To 3) As Double Dim surtido(1 To 3) As Variant Dim totalSurtido As Double: totalSurtido = 0 ' Leer solicitudes For i = 1 To numClientes If IsNumeric(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) Then solicitudes(i) = CDbl(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) Else solicitudes(i) = 0 End If surtido(i) = "POR FALTA STOCK" Next i ' Surtir de acuerdo al inventario disponible For i = 1 To numClientes If solicitudes(i) > 0 Then If inventario >= solicitudes(i) Then surtido(i) = solicitudes(i) inventario = inventario - solicitudes(i) totalSurtido = totalSurtido + solicitudes(i) ElseIf inventario > 0 Then surtido(i) = inventario totalSurtido = totalSurtido + inventario inventario = 0 Else surtido(i) = "POR FALTA STOCK" End If End If Next i ' Escribir resultados en las columnas correspondientes para cada cliente For i = 1 To numClientes With ws.Cells(fila, colResultadoInicio + i - 1) If surtido(i) = "POR FALTA STOCK" Then .Value = surtido(i) .Font.Color = vbRed Else .Value = surtido(i) .Font.Color = vbBlack End If End With Next i ' Escribir total surtido y existencia final ws.Cells(fila, colTotalSurtido).Value = totalSurtido ws.Cells(fila, colFinalInventario).Value = inventario Next fila MsgBox "Resultado surtido cargado con éxito...", vbInformation End Sub Para la opción 2:   Sub surtirenpartesiguales() Dim ws As Worksheet Set ws = ThisWorkbook.Sheets(1) Dim filaInicio As Integer: filaInicio = 13 Dim filaFin As Integer: filaFin = 16 Dim colInventario As Integer: colInventario = 2 Dim colSolicitudesInicio As Integer: colSolicitudesInicio = 4 ' Columna C Dim colResultadoInicio As Integer: colResultadoInicio = 9 ' Columna I Dim colTotalSurtido As Integer: colTotalSurtido = 12 ' Columna L Dim colFinalInventario As Integer: colFinalInventario = 13 ' Columna M Dim numClientes As Integer: numClientes = 3 Dim fila As Integer, i As Integer For fila = filaInicio To filaFin Dim inventario As Double inventario = Val(ws.Cells(fila, colInventario).Value) Dim solicitudes(1 To 3) As Double Dim surtido(1 To 3) As Variant Dim totalSurtido As Double: totalSurtido = 0 Dim totalPedido As Double: totalPedido = 0 ' Leer solicitudes For i = 1 To numClientes If IsNumeric(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) Then solicitudes(i) = CDbl(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) totalPedido = totalPedido + solicitudes(i) Else solicitudes(i) = 0 End If surtido(i) = 0 Next i ' Si hay suficiente inventario, surtir lo que el cliente pide If inventario >= totalPedido Then For i = 1 To numClientes If solicitudes(i) > 0 And inventario >= solicitudes(i) Then surtido(i) = solicitudes(i) inventario = inventario - solicitudes(i) totalSurtido = totalSurtido + solicitudes(i) End If Next i Else ' Reparto base igualitario Dim baseSurtido As Long baseSurtido = Int(inventario / numClientes) For i = 1 To numClientes If solicitudes(i) > 0 Then If solicitudes(i) <= baseSurtido Then surtido(i) = solicitudes(i) inventario = inventario - solicitudes(i) totalSurtido = totalSurtido + solicitudes(i) Else surtido(i) = baseSurtido inventario = inventario - baseSurtido totalSurtido = totalSurtido + baseSurtido End If End If Next i ' Repartir sobrante restante uno por uno, respetando lo pedido Do While inventario > 0 For i = 1 To numClientes If surtido(i) < solicitudes(i) Then surtido(i) = surtido(i) + 1 totalSurtido = totalSurtido + 1 inventario = inventario - 1 If inventario = 0 Then Exit For End If Next i Loop End If ' Escribir resultados en las columnas correspondientes para cada cliente For i = 1 To numClientes With ws.Cells(fila, colResultadoInicio + i - 1) If surtido(i) = 0 Then .Value = "POR FALTA STOCK" .Font.Color = vbRed Else .Value = surtido(i) .Font.Color = vbBlack End If End With Next i ' Escribir total surtido y existencia final ws.Cells(fila, colTotalSurtido).Value = totalSurtido ws.Cells(fila, colFinalInventario).Value = inventario Next fila MsgBox "Resultado surtido cargado con éxito...", vbInformation End Sub Saludos, Diego
    • Buenos dias.  Estoy trabajando en una hoja para poder llevar un control de un pequeño almacén.  Tengo un pedido con varias líneas y "lotes" y necesito sacar las ubicaciones que coincidan con la referencia y lote que pone en el pedido. El problema viene cuando tengo la misma referencia y mismo lote en ubicaciones diferentes y necesito sacar la información en columnas diferentes. No se si  me he explicado bien, pero creo que con el ejemplo adjunto se entiende mejor. Agradecería mucho si me pudieran ayudar  Libro1.xlsx
    • Exelente solución mil gracias 
  • Visualizado recientemente

    • No hay usuarios registrado para ver esta página.
×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.