Saltar al contenido

Listas desplegables con formatos múltiples (con control SpreadSheet)


R0CI0

Recommended Posts

publicado

Saludos a todos.

Estoy continuando el post ( https://www.ayudaexcel.com/foro/macros-programacion-vba/20306-pendiente-formatos-diferentes-cuadro-combinado-combobox.html ) donde pregunté por una lista desplegable o un combobox en el que se pudieran asignar distintos formatos a cada una de las líneas.

Macro Antonio me contestó que ésto no se podía hacer con los combobox, pero que consultara otro post que había empezado él sobre cómo utilizar la función SpreadSheet (que hay que descargarse aparte, consultar ese post: https://www.ayudaexcel.com/foro/ideas-aportes/20517-listas-validacion-multiples-columnas-fuentes-colores.html ).

Por cierto, muchisimas gracias por tu ayuda Macro Antonio.

Ésta función (SpreadSheet 11.0) crea una ventana a un libro entero paralelo, en el que podemos editar lo que queramos y proporcionarle aspecto de lista desplegable.

Ahora tengo varias dudas surgidas a partir del magnífico archivo que subió para explicar la función:

- Cómo se vincula una seleccion realizada en el SpreadSheet con una celda?

- Cómo se consigue que sólo aparezca en el caso de seleccionar una celda de la columna F?

- Se puede bloquear una línea para que no se pueda seleccionar? (hacer que los titulos y subtitulos no se puedan seleccionar, solo los de tercer nivel)

- Y otra también muy importante... se pueden vincular las celdas del SpreadSheet con celdas en otras hojas del archivo de origen?

Adjunto el archivo donde estaba trabajando y donde quería adaptar el control SpreadSheet, pero lo que más quiero es aprender cómo se hace y como hacer modificaciones. Supongo que irá todo por código.

Es un archivo de gastos personales que estoy realizando porque los que he encontrado en internet no estaban muy desglosados, y que cuando termine lo colgaré en aportes, por si a alguien le sirve o lo decide mejorar (acepto criticas e ideas de mejoras).

Donde quiero insertar las listas SpreadSheet es en la hoja G_ENERO, en la columna correpondiente con "Tipo de gasto", y quiero que aparezca la lista escrita en la hoja LISTA_GASTOS, para que si modifico algún dato en esa hoja también lo haga el contenido del SpreadSheet (procuro siempre separar mucho los datos para editarlos mejor en el futuro, pequeñas manías). Eso es lo que no se si se puede hacer o no, y que he preguntado un poco mas arriba.

La verdad es que nunca dejo de sorprenderme de la cantidad de cosas que permite hacer el excel, y eso que todavía no sé nada, y sobre todo de todo lo que estoy aprendiendo en este foro, es íncreible la ayuda que nos prestáis los expertos!!

Muchas gracias por todo!!

Un saludo, y Felices Fiestas!!

2011_CUENTAS_CASA.rar

publicado

Hola:

Una vez analizado ligeramente lo que persigues he llegado a la conclusión de que no es el mejor sistema poner el spread en la hoja.

Dado que todo el montaje va a través de código VBA y que vas a tener una hoja por cada mes,l creo que la mejor opción es pasar el spread a un formulario VBA.

Intuyo por tus comentarios que no dominas en exceso el tema de programación en Visual Basic, por lo que he realizado un pequeño formulario que creo va a permitirte solucionar tu problema.

En el adjunto, cada vez que el nombre de la hoja empiece por "G_" y selecciones una celda de la columna "B" y una fila mas allá de la 14, siempre que la fila anterior no esté en blanco, se te abrirá un formulario con los conceptos de gasto de la hoja "LISTA_GASTOS" estructurada por nivel de concepto, solo si escoges alguna celda del tercer nivel, dicho concepto pasará a la celda activa.

Saludos, besos y buenas fiestas.

PD: No dudes en consultar lo que no entiendas.

2011_CUENTAS_CASA.zip

publicado

..........

Me he quedado sin palabras al ver el archivo....

Pocos "Me gusta" permite poner el foro. Cuando he leido que se iba a abrir un formulario, estaba un poco recelosa, por si dejaba de ser práctico y sobre todo rápido. Pero lejos de eso, esto es brillante! Sólo se abre la celda que a continuación queda vacía, y se pueden seguir modificando las que ya están editadas! Además en la hoja de la lista se pueden añadir o eliminar filas de la lista, asignandoles un nivel... No se puede pedir más. Práctico, rápido y eficaz.

Como siempre increíble.

Ahora me queda a mí intentar aprender cómo se hace, cosa que veo que me va a costar un quintal... porque la verdad es que no tengo ni idea de VBA, lo poco que puedo modificar y aplicar en sitios nuevos soluciones que me dáis en este foro.

De todas formas, para empezar a comprender todo este sistema, podrías explicarme un poquillo cómo esta organizado?

Muchas gracias por todo!

Un saludo!

publicado

Me acaba de pasar algo peculiar... Cuando seleccionas una celda de la hoja que empieza por "G_" no ocurre nada salvo que elijas una de la columna B a partir de la fila 15 que esté con texto o la siguiente vacía, que entonces aparece el formulario. Sin embargo, cuando seleccionas un rango de celdas de cualquier parte de la hoja, también aparece el formulario, pudiendo hacer una seleccion y dejando el resultado en la primera celda del rango elegido... por qué puede estar pasando esto?

Un saludo.

publicado

Hola:

Se trata de un error de programación de la macro.

Sustituyela en ThisWorkbook (Alt+F11 y doble click en ThisWorkbook) por:


Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
On Error Resume Next

'Descargamos el formulario si está cargado
If Conceptos.Visible = True Then Unload Conceptos


'Nos vamos si hemos seleccionado mas de una celda
If Target.Cells.Count > 1 Then Exit Sub


'Si la hoja empieza por "G_"
If Left(Sh.Name, 2) = "G_" Then

'Si la columna es la B, la celda mas allá de la 14
'y la misma celda de la fila anterior no está vacía
If Target.Column = 2 And _
Target.Row > 14 And _
Target.Offset(-1, 0).Value <> "" Then

'Cargamos el formulario si no está cargado
If Conceptos.Visible = False Then
Conceptos.Show
End If

End If


End If


End Sub
[/CODE]

He recibido tu mensaje, estoy en ello.

Saludos

publicado

Muchas gracias, va como la seda!!

Además me has puesto instrucciones de cómo funciona el código, jejeje

Así da gusto!!

Pasa unas muy felices y divertidas fiestas!!

[sOLUCIONADO]

  • 10 months later...
publicado

Dudas...quien puede ayudarme

Hola quien puede ayudarme....miren mi problema es este...tengo en mi hoja 1:CONTROL DE SOLICITUDES, ciertos datos que a continuacion pongo...claro con su formato

[TABLE]

[TR]

[TD=class: xl136, width: 44]No

[/TD]

[TD=class: xl136, width: 8][/TD]

[TD=class: xl136, width: 93]Región [/TD]

[TD=class: xl136, width: 8][/TD]

[TD=class: xl136, width: 274]Nombre del socio

[/TD]

[TD=class: xl136, width: 8][/TD]

[TD=class: xl136, width: 243]Nombre del aval

[/TD]

[TD=class: xl136, width: 8][/TD]

[TD=class: xl136, width: 193]Nombre del Grupo

[/TD]

[TD=class: xl136, width: 8][/TD]

[TD=class: xl136, width: 121]Supervisor[/TD]

[TD=class: xl136, width: 8]

[/TD]

[TD=class: xl136, width: 160]Promotor[/TD]

[TD=class: xl87, width: 8]

[/TD]

[TD=class: xl88, width: 67]IFE

[/TD]

[TD=class: xl89, width: 8]

[/TD]

[TD=class: xl90, width: 67]Compr. de Dom[/TD]

[TD=class: xl89, width: 8]

[/TD]

[TD=class: xl91, width: 67]IFE Aval

[/TD]

[TD=class: xl87, width: 8][/TD]

[TD=class: xl92, width: 67]Compr. Dom. Aval

[/TD]

[TD=class: xl87, width: 8]

[/TD]

[TD=class: xl93, width: 67]Pagaré[/TD]

[TD=class: xl87, width: 8]

[/TD]

[TD=class: xl92, width: 56]Rep. DE LA 5C

[/TD]

[TD=class: xl87, width: 8][/TD]

[TD=class: xl87, width: 118]TIPO DE PRODUCTO[/TD]

[TD=class: xl87, width: 8]

[/TD]

[TD=class: xl87, width: 121]Plazo[/TD]

[TD=class: xl87, width: 8][/TD]

[TD=class: xl163, width: 96]Monto

[/TD]

[TD=class: xl87, width: 8][/TD]

[TD=class: xl158, width: 83]Recibida

[/TD]

[TD=class: xl158, width: 68]Atendida

[/TD]

[TD=class: xl86, width: 68] Aceptada

[/TD]

[TD=class: xl86, width: 128]Reconsiderada

[/TD]

[TD=class: xl86, width: 83]Rechazada

[/TD]

[TD=class: xl94, width: 891]Observaciones

[/TD]

[TD=width: 180][/TD]

[/TR]

[TR]

[TD=class: xl137] [/TD]

[TD=class: xl137] [/TD]

[TD=class: xl137] [/TD]

[TD=class: xl137]

[/TD]

[TD=class: xl150]07 de Noviembre 2012

[/TD]

[TD=class: xl137] [/TD]

[TD=class: xl137] [/TD]

[TD=class: xl137] [/TD]

[TD=class: xl137] [/TD]

[TD=class: xl137] [/TD]

[TD=class: xl137] [/TD]

[TD=class: xl137] [/TD]

[TD=class: xl137] [/TD]

[TD=class: xl97] [/TD]

[TD=class: xl98] [/TD]

[TD=class: xl95] [/TD]

[TD=class: xl98] [/TD]

[TD=class: xl95] [/TD]

[TD=class: xl98] [/TD]

[TD=class: xl95] [/TD]

[TD=class: xl98] [/TD]

[TD=class: xl98] [/TD]

[TD=class: xl98] [/TD]

[TD=class: xl98]

[/TD]

[TD=class: xl98]

[/TD]

[TD=class: xl95] [/TD]

[TD=class: xl95] [/TD]

[TD=class: xl95] [/TD]

[TD=class: xl95]

[/TD]

[TD=class: xl95]

[/TD]

[TD=class: xl133]

[/TD]

[TD=class: xl95] [/TD]

[TD=class: xl100] [/TD]

[TD=class: xl100] [/TD]

[TD=class: xl97]

[/TD]

[TD=class: xl97] [/TD]

[TD=class: xl97] [/TD]

[TD=class: xl97] [/TD]

[TD][/TD]

[/TR]

[TR]

[TD=class: xl137, align: right]208

[/TD]

[TD=class: xl137] [/TD]

[TD=class: xl137]Mexico

[/TD]

[TD=class: xl137] [/TD]

[TD=class: xl137]Panchito

[/TD]

[TD=class: xl137] [/TD]

[TD=class: xl137]Fulanita

[/TD]

[TD=class: xl137] [/TD]

[TD=class: xl137]Los palcos

[/TD]

[TD=class: xl137] [/TD]

[TD=class: xl137]Malota

[/TD]

[TD=class: xl137]

[/TD]

[TD=class: xl137]Manoel

[/TD]

[TD=class: xl97] [/TD]

[TD=class: xl98]X

[/TD]

[TD=class: xl98] [/TD]

[TD=class: xl98]X[/TD]

[TD=class: xl98] [/TD]

[TD=class: xl98]X[/TD]

[TD=class: xl98] [/TD]

[TD=class: xl98]X[/TD]

[TD=class: xl98] [/TD]

[TD=class: xl98] [/TD]

[TD=class: xl98] [/TD]

[TD=class: xl98]X[/TD]

[TD=class: xl95] [/TD]

[TD=class: xl95]Normal[/TD]

[TD=class: xl95] [/TD]

[TD=class: xl95]24 semanas

[/TD]

[TD=class: xl95][/TD]

[TD=class: xl133] $ 00.00

[/TD]

[TD=class: xl95] [/TD]

[TD=class: xl100]X[/TD]

[TD=class: xl100]X[/TD]

[TD=class: xl100]X[/TD]

[TD=class: xl100] [/TD]

[TD=class: xl100]

[/TD]

[TD][/TD]

[/TR]

[/TABLE]

quiero que datos de esta hoja se pegen en automatico en la hoja2:CASOS PRESENTADOS A COMITE, dependiendo la fecha en la que fue recibido la solicitud, este es mi formato para que vean que datos necesito que se peguen en automatico...

[TABLE=width: 2164]

[TR]

[TD=colspan: 3]FECHA: 07 DE Noviembre 2012[/TD]

[TD][/TD]

[TD]ACTA N13

[/TD]

[TD][/TD]

[TD][/TD]

[TD][/TD]

[TD][/TD]

[TD][/TD]

[TD][/TD]

[TD][/TD]

[TD][/TD]

[TD][/TD]

[TD][/TD]

[TD][/TD]

[TD][/TD]

[TD][/TD]

[TD][/TD]

[TD][/TD]

[TD][/TD]

[TD][/TD]

[/TR]

[TR]

[TD=colspan: 19] RELACION DE CASOS PRESENTADOS AL COMITÉ DE CRÉDITO

[/TD]

[TD][/TD]

[TD][/TD]

[TD][/TD]

[/TR]

[TR]

[TD][/TD]

[TD][/TD]

[TD][/TD]

[TD][/TD]

[TD][/TD]

[TD][/TD]

[TD][/TD]

[TD][/TD]

[TD][/TD]

[TD][/TD]

[TD][/TD]

[TD][/TD]

[TD][/TD]

[TD][/TD]

[TD][/TD]

[TD][/TD]

[TD][/TD]

[TD][/TD]

[TD][/TD]

[TD][/TD]

[TD][/TD]

[TD][/TD]

[/TR]

[TR]

[TD]No[/TD]

[TD][/TD]

[TD]Nombre del solicitante

[/TD]

[TD][/TD]

[TD]Grupo de Origen

[/TD]

[TD][/TD]

[TD]Plazo Solicitado[/TD]

[TD] [/TD]

[TD]Plazo autorizado[/TD]

[TD][/TD]

[TD=colspan: 3]Importe[/TD]

[TD] [/TD]

[TD]Nombre de Funcionario que propone[/TD]

[TD][/TD]

[TD]Rechazado[/TD]

[TD][/TD]

[TD]Causa de Rechazo[/TD]

[TD][/TD]

[TD][/TD]

[TD][/TD]

[/TR]

[TR]

[TD][/TD]

[TD][/TD]

[TD][/TD]

[TD] [/TD]

[TD][/TD]

[TD]Solicitado[/TD]

[TD] [/TD]

[TD]Autorizado[/TD]

[TD] [/TD]

[TD][/TD]

[TD][/TD]

[TD][/TD]

[TD][/TD]

[TD][/TD]

[/TR]

[/TABLE]

Esto como lo mencione dependiendo de la fecha, es decir en el ejemplo de arriba es del 7 de noviembre... pero se genero mas solicitudes el 8 el 9 y asi sucesivamente... y quiero que cada que se ponga la fecha (08 de Noviembre 2012) se genere automatico en seguida de la anterior (en CASOS PRESENTADOS A COMITE), no se si me explico....la verdad me urge y ps ni idea tengo de esto...GRACIAS....

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.