Jump to content

Formulario de Ventas por meses


Manuyes

Recommended Posts

Leyendo otra duda en el foro de ventas por meses, me pregunte si seria posible hacerlo con un formulario y un tabstrip para cada mes, así que ni corto ni perezoso, me puse a destripar una solución a otra duda totalmente diferente que me había dado @Antoni (espero que no me de una colleja), la verdad es que me había gustado bastante lo que hizo y creía que podía reciclarse parte de su idea para este caso, a la hora de dar de alta productos y subproductos (Bolis (rojo,azul,negro y Verde), además te daba la opción de anularles...

Me quedan muchas dudas, primero que al abrirse el formulario te muestre la pestaña del mes en curso.

También seria interesante que mostrase solo los textbox de lunes a sábado (días de ventas) he visto por ahí alguna macro para mostrar calendarios festivos, pero no consigo aplicarla, la idea es que si es domingo no muestre el textbox. 

bueno hay multitud de dudas mas, pero creo que necesito que me de el aire.

Si alguien se  atreve con ello aquí lo dejo...

Ventas diarias-mes.xlsm

Link to post
Share on other sites
Hace 15 horas, Manuyes dijo:

(espero que no me de una colleja)

Te la estás jugando...:rolleyes:

Mira, es difícil meter mano a un código de otra persona sin saber su proposito inicial, y menos si tú ya has ido modificando para adaptarlo a lo que tú necesitas.

Al final se vuelve todo un jaleo que no hay pr dónde coger. Siempre es mejor empezar desde el principio con un código limpio acorde a lo que necesites.

Por ejemplo, usas TabStrip, sin saber (creo) que en este control TODAS LAS PÁGINAS TIENEN EL MISMO FORMATO. Deberías usar un MultiPage, pues cada mes es distinto. Por ejemplo los festivos en cada mes son distintos y con un TabStrip no puedes ocultar días por pestañas, siempre son datos fijos. Haz la prueba: borra un textbox de una pestaña y verás como desaparece de todas

Y aparte aclarar qué quieres hacer detalladamente. Por ejemplo, en tu archivo, ahora mismo no sé si pones los datos a mano en la hoja y la pasas al userform o al revés. Todo esto con toda la información que deseas manejar.

Pero vamos, tú mismo... Para empezar te dejo cómo seleccionar la pestaña del mes:
 

Private Sub UserForm_Initialize()
fecha = Date

For i = 0 To TabStrip1.Tabs.Count - 1
    If TabStrip1.Tabs(i).Caption = UCase(Format(Date, "mmmm")) Then
        TabStrip1.Value = TabStrip1.Tabs(i).Index
    End If
Next i

TabStrip1_Change
Nuevo_Click

End Sub

 

Link to post
Share on other sites

Pues no estoy demasiado de acuerdo en que hayas de utilizar un Multipage en lugar de un Tabstrip, ya es un engorro trabajar con 31 Textbox, no me imagino tener que trabajar con 366.

Para mi tienes tus datos mal planteados, el diseño de tu plantilla no es el adecuado para un formulario.

Las columnas de una BD deben ser todas iguales, es decir, no puedes tener Producto y Subproducto en la misma columna, no puedes tener columnas que para unos caso significan algo y en otros casos no significan nada, por ejemplo Total Subproductos, dato por otro lado totalmente innecesario e irrelevante.

Tu formulario debe partirse en 2, uno para informar las ventas y otro para dar de alta Productos y Subproductos.

A lo largo del día te avanzaré una propuesta de modificación de acuerdo a lo mencionado.

Y contestando en concreto a tu pregunta:

"Posicionar Tabstrip en el mes en curso"

TabStrip1.Value = Month(Date) - 1

Haplox ¿Como va el cabreo por lo de ayer? :lol::lol::P

Link to post
Share on other sites
Hace 1 hora, Antoni dijo:

Haplox ¿Como va el cabreo por lo de ayer? :lol::lol::P

Mal, muy mal... Mennos mal que se ha roto Neymar :rolleyes:

:P

Hace 1 hora, Antoni dijo:

Pues no estoy demasiado de acuerdo en que hayas de utilizar un Multipage en lugar de un Tabstrip, ya es un engorro trabajar con 31 Textbox, no me imagino tener que trabajar con 366.

Bueno, visto así... ;)

Link to post
Share on other sites

Por la noche (hora peruana) veía el orden de los datos en la primera hoya y pensaba "que terrible"; comencé a escribir lo que pensaba y... me detuve diciendo "no seas tan malo". Pero no, no es se malo o ser malos, al contrario, es mejor decirlo ahora que recién empieza: La forma de guardar los datos es muy mala y no cumple nada de lo mínimo esperado en una base de datos. Casi 400 columnas en una hoja, equivalente a un año, luego será otra hoja igual de grande para otro año y etc. De aquí a un tiempo nuestro amigo consultará como obtener el dato del 14 de mayo del 2018 desde ese (des)orden de datos y también dirá "como hacerlo si son varios datos ese día" y habrá que hacer malabares para ayudarlo. Igual con el control "Tab" (que coincido que está bien ese, no es una obligación usar un "MultiPage"), un "TextBox" por cada día del mes no le veo sentido. 

Entonces mi primera recomendación, pensando en el orden y en no tener problemas en el futuro: Repiensa y reordena las cosas.

Saludos

Abraham Valencia

Link to post
Share on other sites

Teneis todos razón @Haplox @Antoni@avalencia

Hace 6 horas, Haplox dijo:

Siempre es mejor empezar desde el principio con un código limpio acorde a lo que necesites.

Lo del Tabstrip que comenta @Haploxsi lo sabia, al menos algo había leído, al respecto....pero no lo había usado nunca, tampoco el multipage, pero como dice @Antoni, pensé que seria mejor manejar 32 Textbox, que casi 400...

Creia que en el evento Tabstrip_change se podía añadir una macro (busacar festivos) que dependiendo del mes al que hiciera referencia esa pestaña, me ocultase los textbox que fueran domingos, es decir si selecciono la pestaña marzo me ocultase los textbox debajo de los label 4, 11, 18 y 25 o los cambiase de color, al seleccionar la pestaña abril hiciera lo mismo para los domingos de abril....

Hace 6 horas, Haplox dijo:

en tu archivo, ahora mismo no sé si pones los datos a mano en la hoja y la pasas al userform o al revés.

La idea es meter los datos diariamente desde el userform, como si fuera una aplicación y que al abrir el mes cargue los datos que ya estén grabados en días o meses anteriores para seguir añadiendo. De modo que a final de año puedas ver todas las ventas de cada producto

Visto ahora @Antoni esta en lo correcto

Hace 5 horas, Antoni dijo:

Tu formulario debe partirse en 2, uno para informar las ventas y otro para dar de alta Productos y Subproductos.

Seguramente sea mucho más fácil con dos userform.

@Avalencia agradezco mucho tu sinceridad

Hace 2 horas, avalencia dijo:

comencé a escribir lo que pensaba y... me detuve diciendo "no seas tan malo".

Puedes decir lo que opinas, no me lo voy a tomar mal, reconozco que soy un "inculto" en estos temas y agradezco todas las criticas, positivas y negativas. Y si el esquema de la tabla para guardar los datos es un "Truño" pues se dice y así la replanteo y aprendo, que esa es la idea. Pensaba meter una hoja del libro por año, pero como dices, intentare reorganizar las ideas. 

 

Link to post
Share on other sites

Prueba el adjunto.

Los domingos se marcan de forma automática con la constante ColorDomingo.

Los festivos debes marcarlos en la fila 2 con el color que tu quieras.

Todos los meses tienen 31 días, es para facilitar el proceso, no te preocupes, el formulario tiene en cuenta solo los días de cada mes, incluso los años bisiestos. Puedes ocultar las columnas que no quieras que se vean en la hoja.

Puedes añadir tantos años como quieras.

El año debe informarse en la celda B1.

Ventas diarias-mes.xlsm

Link to post
Share on other sites

Fenomenal @Antoni, has vuelto a dar en el clavo. Algo así es lo que yo pretendía hacer. 

Ahora solo queda crear otro Userform, para dar las altas y bajas de productos, y ya puestos con un botón que pida el año en un inputbox, si quieres cambiar de año. Voy a ver si doy con ello. De nuevo gracias

Link to post
Share on other sites

Bueno he estado haciendo pruebas y me gusta bastante, sólo un par de preguntas:

Puede hacerse el listbox más grande de modo que muestre todos los datos del mes de ese modo se puede de un vistazo ver la evolución mensual. Quizás sea complicado que cada pestaña del tabstrip cargue el listbox de su mes correspondiente, a lo mejor seria más sencillo generar un informe con un botón para ese mes.

La otra pregunta es, se pueden añadir dos textbox más, de modo que se pueda establecer un objetivo de ventas para ese mes (por ejemplo vender 50 bolis rojos) y que el otro textbox me muestre los que faltan para alcanzarlo. Es decir que al texbox objtevo marcado le reste el textbox total y lo muestre en el texbox desviación.

 

 

Link to post
Share on other sites

Buenas tardes, el archivo de @Antoni, es impresionante, y resuelve sobradamente, la duda inicial planteada, por lo que voy a dar el tema por resuelto. No obstante he detectado un error cuando carga los meses del calendario, ya que solo coinciden febrero, marzo y noviembre.

Si alguien puede indicarme el error se lo agradecería. Imagino que debe estar aquí, pero a mi se me escapa.

Private Sub AdecuarTextBoxes()
SaltarChange = True
fecha = CDate("1/" & TabStrip1.Value + 1 & "/" & ActiveSheet.Range("B1"))
For c = 1 To 37
   Controls("C" & c).Visible = False
   Controls("D" & c).Visible = False
   Controls("D" & c).FontBold = True
   If c Mod 7 = 0 Then
      Controls("D" & c).BackColor = ColorDomingo
      Controls("C" & c).Locked = True
      Controls("C" & c).TabStop = False
   End If
Next
'--
If IsDate(fecha) Then e = 8 - Weekday(fecha, vbMonday)
For d = 1 To 31
   c = e + d - 1
   y = TabStrip1.Value * 34 + 2
   Controls("D" & c).Caption = d
   fecha = d & "/" & TabStrip1.Value + 1 & "/" & ActiveSheet.Range("B1")
   If IsDate(fecha) Then
      Controls("D" & c).Visible = True
      Controls("C" & c).Visible = True
      If c Mod 7 > 0 Then
         Controls("D" & c).BackColor = ActiveSheet.Cells(2, y + d).Interior.Color
         Controls("C" & c).Locked = False
         Controls("C" & c).TabStop = True
      End If
      If Not Controls("D" & c).BackColor = ActiveSheet.Range("A2").Interior.Color And _
         Not Controls("D" & c).BackColor = ColorDomingo Then
         Controls("C" & c).Locked = True
         Controls("C" & c).TabStop = False
      End If
   End If
Next
SaltarChange = False
End Sub 

 

Muchas gracias a todos, en especial a @Antoni, por su tiempo dedicado

Link to post
Share on other sites

Solucionado!!!!

El error estaba en esta parte del código

If IsDate(fecha) Then e = 8 - Weekday(fecha, vbMonday)

Si quitamos el 8- y lo dejamos de este modo

If IsDate(fecha) Then e = Weekday(fecha, vbMonday)

Lo carga bien, al menos eso creo. Ya me puedo ir a dormir....:D

Muchas gracias a tod@s

Tema cerrado

Link to post
Share on other sites

Gracias @Antoni, me di cuenta de ello, justo antes de irme a dormir, ya que cargaba bien el calendario, pero no lo hacía bien con el contenido. He modificado parte de tu código del listbox por este

c=Weekday(fecha,vbMonday)

For Y= Y To Y+30

Controls ("C"&c) = Format (Activesheet.Cells(x,y),"#.###")

c=c+1

Creo que ahora funciona bien. Lo probaré está tarde y comento.

Ya se q es salirme de la pregunta inicial, si es necesario abro nuevo tema, pero si alguien puede indicarme en qué parte del código le digo q muestre los label del calendario ("C"&c) en formato número, con dos decimales.

Gracias por todo

Link to post
Share on other sites
Hace 11 horas, Manuyes dijo:

Hablaba de dos decimales como si fueran euros (2,99), es decir, que los textbox (dije los label) permitan introducir dos decimales y carguen los dos decimales. Ahora te permite meterlos, pero luego los redondea.

Gracias

OK. 

Link to post
Share on other sites

Archived

This topic is now archived and is closed to further replies.

Guest
This topic is now closed to further replies.


  • Posts

    • datos a traer.xlsx   Buenas tardes, en el archivo adjunto hay 2 hojas (datos y base), lo que necesito es que en la hoja datos en cada columna de fecha me traiga de la hoja base las fechas de cada uno de los clientes, ejemplo del sr anselmo en la celda E2 deberia traer la fecha 20/01/2020, en la celda F2 deberia traer la fecha 21/02/2020 y asi sucesivamente si tuviera otra fecha   Quedo pendiente de su ayuda
    • Silvia,   Dsiculpa hay alguna forma de poder transcribir la formula: a hoja de calculo de google?, lo que pasa esque trabajo en ellas y al subirla, no lee la formula "AGGREGATE", manda error. Otro punto, al correr la formula en excel para las siguientes semanas, (W40, W41, 42,ETC) veo que se repite el ID de las primeras semanas, ejemplo: W39 -> ID 7052248, W40 -> 7044231...... W41 -> 7044231, W42 -> 7052248. En pocas palabras me esta repitiendo los IDs de las ultimas semanas, crees -de acuerdo a tu experiencia- que se pueda crear una formula para que me busque el ID mas viejo (id asignado a esta tienda de las primeras semanas, que no se haya seleccionado en las ultimas semanas [2], que tenga menos selecciones[menos repetidos en las semanas], y que siempre toma el historial de las ultimas 10 semanas ). El fin de esto es que a lo largo de una serie de semanas, los IDs queden de cierta manera ordenados y me de un sistema ciclico. Muchas gracias por tu apoyo, espero me puedas ayudar ya que eres una crack¡ Saludos.  
    • Buenas tardes Eres muy amable.  Lo que pretendo es que el combobox1, recoja los valores de la hoja llaves los valores que están en "A"sin incluir las celdas vacías, teniendo en cuenta que  se puede ampliar el numero de llaves. En el combobox2, que recoja los valores de la hoja llaves, los valores que están en la columna F y en el combobox3 los que están en la columna G. Todo ello sin incluir los espacios en blanco y teniendo en cuenta que la lista se puede ampliar. Se que es muy lioso y me explico fatal pero te adjunto el archivo por si tienes un momento y me puedes ayudar si se puede hacer.  Muchas graciasLLAVES.xlsm
    • hola JSDJSD  perdona el retraso pero he estado con otros temas y he vuelto a retomar el tema, lo que me has enviado al final lo que hace es separar lo que hace cada numero de usuario pero no es lo que busco, lo que necesito es que me diga dentro de un margen de horas, por ejemplo de 10 a 11 el numero de filas que ha hecho, te adjunto otro fichero con un solo usuario pero veras el rango de fechas que tiene, en un mismo día dentro de una misma hora puede haber 12 filas,todo esta en la fila M, pues necesito poder tener por ejemplo  de 10 a 11 ha realizado 12 filas, de 11 a 12 ha realizado 3 filas, y asi siempre que haya un rango de filas en horario, si no me he explicado bien y me puedes ayudar dimelo y te lo intento explicar mejor, de todas formas lo que me has enviado esta muy bien pero no es lo que busco pero lo aplicare porque me viene bien.   productividad por horas.xlsx
    • Bueno basicamente necesito una macro que me ordene la columna A por los colores que tengan las celdas. Seguramente se habrá abierto este tema anteriormente pero aunque he buscado en los foros no lo encuentro. Tengo un archivo con varias columnas y quiero que se ordene la columna A junto con los datos que contienen las demas columnas. ordenar por color.xls
  • Recently Browsing

    No registered users viewing this page.

×
×
  • Create New...

Important Information

Privacy Policy