Saltar al contenido

Datos variables en base de datos extraer con macro


Recommended Posts

publicado

Buen día,

Solicito su colaboración con lo siguiente:

Tengo que traer una información de una base de datos con clientes para ajustar un informe con las ejecutivas manejan cada cliente.

Yo tengo la información que que cliente mueve cada ejecutiva.

?ui=2&ik=d83504a65b&view=fimg&th=14c521461eb1ac20&attid=0.2&disp=emb&realattid=ii_14c5209ab3982e55&attbid=ANGjdJ9FDi17-uc4Zs0MFiqG93-YyCgOfnkra0htAoekC9p05uqdfkPYaHdwGY1eSXjWBlwecOG1rxjfEo9aZCY5XxosLqlYB5raYTkyJ4CFU5RzuHkr-PoIcGO0GgU&sz=w544-h348&ats=1427373984461&rm=14c521461eb1ac20&zw&atsh=1

Estaba extrayendo ya de la información pegada, con una macro los clientes de la ejecutiva "A" por medio de un filtro avanzado con los datos que tengo previamente de que clientes maneja esta ejecutiva "A" en el rango de selección del filtro avanzado. Hasta ahí no hay problema.

?ui=2&ik=d83504a65b&view=fimg&th=14c521461eb1ac20&attid=0.3&disp=emb&realattid=ii_14c5207a164453b5&attbid=ANGjdJ9BLHAls4nuM5FvuGKLMp2lHJUkAhuMYOVah2xcujwSrUH1fxDI6WIYJXC4m_4ruoF2Gr2v7Wwhh9UoWvBfoKzmkecNVWCgzc2P-OI2ufLXQN0PKhibUcl_-nU&sz=w1124-h338&ats=1427373984461&rm=14c521461eb1ac20&zw&atsh=1

Los datos que debe traer para este ejemplo son: Cliente de la ejecutiva "A", Semana del año "2015-8", Fecha de paz y salvo "0000-00-00" Tipo "Liq".

El problema me surge, porque por ejemplo de los 10 clientes que maneja la ejecutiva "A" sólo se movieron 7 para este informe. Como es obvio la macro cuando realiza esta orden, trae la información inexacta. La instrucción que hice por excel es la siguiente:

?ui=2&ik=d83504a65b&view=fimg&th=14c521461eb1ac20&attid=0.1&disp=emb&realattid=ii_14c520c0eed7725e&attbid=ANGjdJ9kTE2qlhgL7wnOzJBoarAEB1o1bFz-6d0horb32CYNsD92EkGRXMtJ8ekuPC9pNGHPj6K-6rSeLg0AAQrUXf8inkcoVWuw8cATTJBzahOln8c6Ft-7l45IDmY&sz=w1124-h262&ats=1427373984462&rm=14c521461eb1ac20&zw&atsh=1

Estoy intentando una formulación en la celda "V1" :

?ui=2&ik=d83504a65b&view=fimg&th=14c521461eb1ac20&attid=0.4&disp=emb&realattid=ii_14c5210ac8cc3322&attbid=ANGjdJ9Jw5ABH0Jrlm4-7sHCeRyB70kuetQg3S8X1INR8SqHstZ9Erkh2CNBoxOw4G110q0432INnG5lSdg_S3IXNAg_LqJvrFD96B9M5qD7_8mrh_0rfBI2LDCCR7I&sz=w690-h600&ats=1427373984462&rm=14c521461eb1ac20&zw&atsh=1

Pero no conozco un código que me permita traer el valor del rango "V1" en la macro adjunta.

No se si este es el mejor modo de realizar las cosas, o si tienen una nueva idea que me permita resolver este problema.

Agradezco muchísimo su colaboración, no soy muy diestro con el Visual Basic y lo que intento programar, lo hago es por el excel y luego miro el Visual.

ISSE1.zip

publicado

saludos [uSER=186303]@Alejo Rodríguez[/uSER], intente ver el archivo para ayudar pero NO entendi que necesitas realmente, las imagenes no las veo dan error; si explicas exactamente lo que quieres a ver si logro entenderte.

publicado
saludos [uSER=186303]@Alejo Rodríguez[/uSER], intente ver el archivo para ayudar pero NO entendi que necesitas realmente, las imagenes no las veo dan error; si explicas exactamente lo que quieres a ver si logro entenderte.

Buen día y gracias por atender este caso.

La idea en si, es que de una base de 10 clientes que maneja una ejecutiva, se debe obtener un informe del movimiento de los mismos con otras variables adicionales.

Por esto, lo hice por filtro avanzado, tomando las otras variables necesarias para el informe, además del cliente, como: Semana del año "2015-8", Fecha de paz y salvo "0000-00-00" Tipo "Liq", como muestro en la imagen.

Pero que pasa, si uno de estos 10 clientes, por ejemplo el No 7 no tuvo movimiento, la programación que hice con el filtro avanzado no funciona.

Por lo anterior, intenté que en una celda me calculara el rango de las variables con los clientes que si tuvieron movimiento (celda V1), pero no tengo el conocimiento de como vincular la información resultante en esta celda, a la información que necesita el filtro avanzado, con el fin de lograr que los clientes que debe buscar, sean los que realmente se movieron y la información sea exacta.

Así mismo, debo tener en cuenta, que la información de los clientes debe ser flexible y fácilmente maniobrable porque se presenta rotación tanto de ejecutivas vs clientes, como clientes vs ejecutivas, es decir, pueden rotarse clientes entre ellas, pueden ingresar nuevos clientes, pueden irse clientes, etc.

El archivo trae 5 hojas y en la hoja con el nombre de "Informa PYS" esta la base de datos donde debo filtrar la información y en la celda V1 está la formulación que intenté obtener del rango de las variables del filtro avanzado.

No se si este es el mejor método o hay algún otro que obviamente desconozco, porque como comenté, no conozco mucho lenguaje de visual basic. Lo que hago, lo hago desde el excel y luego lo visualizo por programador.

Muchas gracias por tu colaboración,

Cordial Saludo

Alejandro Rodríguez

publicado

saludos [uSER=186303]@Alejo Rodríguez[/uSER], disculpa pero de verdad sigo sin enteder, no se si sean las imagenes que no logro ver (si quieres mostrarme una imagen por favos subela a otro servidor, donde estan no logro verlas) o no se que es; recuerda que quien conoce y sabe usar su archivo eres tú, así que debes explicar específicamente lo que quieres, por ejemplo:

yo quiero que en la hoja "X" al llenar la celdas "a", "b" y "c" se ejecute una macro que me traiga los datos de la hoja "W" y los coloque en tal sitio.

trata de explicarmelo así para ver si entiendo, intente ver las macros para ver si lograba dar con el requerimiento pero nada.

suerte

publicado

Buenas noches [uSER=133908]@bigpetroman[/uSER], y gracias por seguir con este caso.

Lo se, es un poco difícil de explicar la necesidad general pero voy a explicar la necesidad específica.

Puntualmente necesito que esta parte de la macro que señalo en rojo ("W1:Y7"):

Range("A1").Select

Range("A1:T5000").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _

Range("W1:Y7"), Unique:=False

Range(Selection, Selection.End(xlDown)).Select

Columns("C:C").Select

La tome de la celda "V1" de la hoja "Informa PYS". Es decir, que pueda ser variable.

Muchas gracias por tu colaboración y paciencia

Cordial Saludo

Alejandro Rodríguez

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

    5    1

  • Crear macros Excel

  • Mensajes

    • Estimados amigos espero estén bien   Tengo este archivo que me ayuda a llevar las horas trabajadas al que necesito añadir en la Hoja5 (HHE) una fórmula que me cuente las Horas trabajadas en Días de Descanso (fines de semana y feriados), actualmente mediante una Regla de Formato Condicional se resaltan en amarillo el Dia de Semana y la Fecha de los Días de Descanso sin embargo el inconveniente se me presenta con los días feriados que cambian de posición de acuerdo a la fecha y cuando el mes comienza en día domingo por lo cual necesito una fórmula que me permita sumar los Días de Descanso cuando la Fecha que le corresponda este resaltada en Amarillo la sintaxis sería más o menos esta para la primera semana del mes de Enero de 2025: =SI('VTL1'!$I$7=AMARILLO;'VTL1'!$I8;0) + SI('VTL1'!$J$7=AMARILLO;'VTL1'!$J8;0) + SI('VTL1'!$K$7=AMARILLO;'VTL1'!$K8;0) + SI('VTL1'!$L$7=AMARILLO;'VTL1'!$L8;0) + SI('VTL1'!$M$7=AMARILLO;'VTL1'!$M8;0) + SI('VTL1'!$N$7=AMARILLO;'VTL1'!$N8;0) + SI('VTL1'!$O$7=AMARILLO;'VTL1'!$O8;0) Y así sucesivamente para el resto de las semanas, con los datos actuales el resultado esperado para la primera semana (I8:O8) sería 9 horas mientras que para el mes (Fila8) el resultado esperado seria 35 horas estos resultados deben reflejarse en la Celda “$Z7” de la Hoja5 (HHE) de modo tal que una vez haya completado la totalidad de la fórmula para el resto de las semanas del mes la pueda correr de Z27 hasta Z42 VTL - HHE_101128.xlsx
    • 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
  • 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.