Foro VBATotal

Aprender a programar en Visual Basic

Por favor, o Registro para crear entradas y debates.

Envíos de correo automáticos con criterios

@admin, lo primero es darte las gracias por tu pronta respuesta y como me indicaste abro este hílo y adjunto el fichero

Por razones de confidencialidar no tiene nada que ver con el original, pero el ejercicio propuesto es el mismo y que espero que pueda ser de ayuda para otros usuarios dummies como yo XD, desde luego he buscado exaustivamente por internet para encontrar algo parecido que me pudiese arrojar algo de luz y no lo he encontrado, he descargado un par de manuales VBA y sigo sin saber como hacerlo

Solo he hecho en mi vida 4 macros apoyandome en el grabador y en cursos maravillosos como este y ha sido todo un descubrimiento, me tiene todo el día dandole vueltas a como resolver los problemas y es un autentico gustazo cuando consigues que todo funcione 🙂

El proposito de esta macro como pone en el asunto es mandar un correo de compra, el plan es realizar un envio a cada proveedor pero hay varios articulos que los vende el mismo proveedor por lo que en lugar de envíar un correo por cada articulo, hay que agrupar los que pertenecen al mismo proveedor, a mi lo que se me había ocurrido en mi retorcida mente era primero filtrar por la columna de si es necesario o no lanzar la compra y de lo que queden sacar los registros unicos (de la columna proveedor) y pegar las filas completas en otra hoja "no coinciden" (que no se como hacerlo)y realizar el envío, por lo que ya tendría la mitad resuelto, despúes localizar los duplicados <1 y pasarlos también a otra hoja "coinciden" (que tampoco se como hacerlo XD) y aqui viene lo que me quita el sueño, como extraer las filas por el mismo codigo de proveedor para enviar juntos los registros en el mismo correo, otro dato importante es que los proveedores van desde el 000001 al 999999 por lo que no es viable hacer una lista de proveedores y filtrar desde ahí, he encontrado ejemplos para encontrar duplicados, marcar las casillasduplicadas... de todo menos como separar las filas agrupadas por su coincidencia a otra hoja para enviarlas juntas o enviarlas sin más, a mi esto me supera con creces pero no puedo dejar de darle vueltas, me podriais ayudar?

He adjuntado el fichero con la macro y lo he renombrado como PDF por que no me dejaba subirlo pero es la macro

Un millón de gracias de antemano

 

Archivos subidos:
  • Tienes que conectarte para acceder a las subidas.

Hola Sergio,

Cita de Sergio en 21 de diciembre de 2022, 23:34

Solo he hecho en mi vida 4 macros apoyandome en el grabador y en cursos maravillosos como este y ha sido todo un descubrimiento, me tiene todo el día dandole vueltas a como resolver los problemas y es un autentico gustazo cuando consigues que todo funcione 🙂

Coincido totalmente contigo 😉

Tu caso se parece muchísimo a uno de los casos prácticos que tengo en el curso: Cómo filtrar filas o registros de una tabla Excel repartiéndolos en varias hojas mediante macros

En este ejemplo, tenemos una serie de artículos sacados por distintos grupos de trabajo. Al final, lo que hacemos el crear una hoja por grupo de trabajo con los artículos que ha sacado cada uno. En tu caso, habría que crear una hoja por cada proveedor con sus artículos correspondientes.

También tengo publicada la segunda parte, en la que se envía cada hoja a un destinatario de correo diferente: Cómo enviar automáticamente informes por email usando una macro en Excel

Si tienes cualquier problema a la hora de adaptar el código, no dudes en decírmelo.

Voy a echar un vistazo para ver por qué no has podido subir el archivo Excel.

Saludos.

Acabo de revisar el caso que indicas

Ejercicio práctico 5: Cómo filtrar filas o registros de una tabla Excel, repartiéndolos en varias hojas mediante macros.

otra lección de chapó!!

Pero creo que no me vale dado que esta basado en el filtrado de tres grupos a priori fijos, grupo de trabajo 1,2 y 3 y que exporte a 3 hojas

El galimatias de lo que trato de resolver es algo así

1-primer filtro si/no de si es necesario lanzar la compra (columna H)

2 - segundo filtro dentro de los articulos a comprar separar por el provedor las filas unicas, pasarlas a otra hoja y lanzar los correos (la compra es de solo un articulo a un provedor)

3 -el resto de articulos que hay que comprar y en el que coincide el proveedor  separarlos a las hojas que hagan falta ejm

-proveedor 000001 - destornilladores estrella- 500 unidades

-proveedor 000001 -destornillador plano- 1000 unidades

-peroveedor 888023- tornillos rosca chapa -5000 unidades

-proveedor 888023- tornillos para madera- 5000 unidades

-proveedor 888023- arandelas -´15000 unidades

en un mismo listado pueden darse miles de coincidencias del proveedor (999999) y por lo tanto si fuese necesario debería de crearse una pagina para cada coincidencia

por lo que lo unico que se me ocurre es lanzar un bucle que tome el valor de cada celda de la columna proveedor y que separe las filas a una nueva hoja todas las coincidencias (que no se como hacerlo)

Despúes, o sobre la marcha debería de ir lanzando un correo por cada hoja/s que se haya generado que ese es otro problema por que habría que contar de alguna manera las hojas generadas con el nombre auto que le haya asignado excel y lanzar los correos

Como ves, tengo un mar de dudas y no se por donde pillarlo

Acabo de intentar subir de nuevo el archivo y el error que  me da es este

"No tienes permiso para cargar archivos con esta extensión. "

Aun así el primero que subi como pdf, si lo descargas y le cambias la extensión es el fichero

 

 

Venga, le echo un vistazo al código y te digo algo.

Por otro lado, ¿qué extensión tiene el archivo que intentas subir? ¿xlsm?

Buenos días!

Si, he intentado subirlo como .RAR y como XLSM y me daba el error de los permisos

Por otro lado en el fichero solo metí la parte de los envíos, la primera parte del filtro es esta que pego abajo, pertenece al fichero original que como te comentaba anteriormente por razones de confidencialidad no puedo difundir y no coincide con los campos del fichero del ejercicio, pero la idea es la misma y funciona perfectamente

Los campos "Datos", "criterios" y "pegar"

los he definido directamente seleccionando las celdas que los conforman botón de la derecha y definir nombre

Se compone de dos hojas, Hoja1 donde se copian las extracciones de otro programa  y la hoja Macro que tiene copiada la misma cabecera y una celda adicional

lo primero que hace es copiar en la hoja1 la columna en la que se va a realizar el filtro a la derecha del todo para que coincida con la celda adicional de la hoja Macro, después saca un inputbox para que se introduzca el dato a filtrar (en la hoja del ejercicio, sería el campo comprar si o no) y rellena automáticamente en la hoja macro la info filtrada de la hoja1, después se aplicaría la segunda macro para los envíos que también funciona (esa si que va en el fichero del ejercicio adaptada), pero con todo esto hace un correo por cada fila, con lo que para comprar cinco productos a un proveedor le enviaría un correo por cada producto por eso trato de agrupar las filas que contengan el mismo proveedor y hacer un solo correo que contenga todos sus articulos

Hace poco realice una macro con un filtro parecido a este, pero en ese caso si que pude hacer una tabla con datos fijos coincidentes y que fuese copiando uno a uno en el filtro (eran solo 100) y que el resultado lo copiase a otra hoja y la guardase a un TXT, pero aquí no puedo hacer esa tabla con 999999 proveedores, me llevaría una vida entera XD y el problema de tener que incluir nuevos proveedores

Sub filtrar()

Application.ScreenUpdating = False

Application.DisplayAlerts = False

Dim X As String

Range("X2").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Range("AQ2").Select
ActiveSheet.Paste

X = InputBox("Selecciona periodo 0-90 DIAS,3-6 MESES, 6-12 MESES, MAS DE 12 MESES")

 

Range("AQ2").Value = X

Range("DATOS").AdvancedFilter xlFilterCopy, Range("CRITERIOS"), Range("PEGAR"), False

End Sub

Buenas Sergio,

Tenía un ratito y he hecho el programa. A la vuelta de las vacaciones, abriré una entrada en el blog destripándolo y explicándolo porque tiene puntitos bastante interesantes. Te lo adjunto para que lo vayas ojeando y usando.

No deberías tener problemas a la hora de subir archivos .xlsm, por favor vuelve a probarlo cuando puedas y me dices.

Saludos y Feliz Navidad!

Archivos subidos:
  • Tienes que conectarte para acceder a las subidas.

Genial!!

En cuanto llegue a casa lo miro, que estoy desando ver la solución

Muchísimas gracias por todo y feliz navidad!!!

Test, subida de ficheros xlsm al foro

Me ha dejado subirlo sin problema!!

Ya no me ha dado el error de permisos

 

Archivos subidos:
  • Tienes que conectarte para acceder a las subidas.

Perfecto!

Buenas!

Es una pasada como lo has resuelto, por lo que veo aun me queda muchísimo por aprender

Ya lo he traspolado al original y funciona estupendamente

Apelando a tu sabiduria y abusando de tu amabilidad, ¿como podria personalizar que si tiene solo un articulo aparezca un texto en el correo y si tiene varios articulos aparezca otro?

También quería poner un botón para borrar todas las hojas que genera, pero como todas se llaman diferente y no me quiero cargar ni la hoja1 ni otra de apoyo donde tengo los botones no se como hacerlo para borrar de golpe todas menos esas

Un saludo

Ya he resuelto la parte de borrar las hojas 🙂

 

Buenas otra vez!!

Resuelto ya lo tengo funcional al 90% por que ahora me ha surgido otro problema

Al lanzar los correos aun teniendo

Application.DisplayAlerts = False

Me saltan las ventanas de Azure information protection del complemento de Outlook para asignar a cada correo una etiqueta "Publico", "Interno", "Confidencial"... etc

He intentado desmarcar el complemento pero esta metido por política y no deja deshabilitarlo sin permisos de admin

¿Alguna idea para poder saltarlo?

¿O quizás etiquetarlo de manera automática como publico ?

Gracias de antemano y feliz año nuevo!!

Buenas Sergio!

Me alegra saber que ya lo tienes casi resuelto.

Me encuentro de viaje, a la vuelta (después de Reyes) miramos qué te falta y lo terminamos.

Feliz año!

Cita de Sergio en 28 de diciembre de 2022, 02:52

Buenas otra vez!!

Resuelto ya lo tengo funcional al 90% por que ahora me ha surgido otro problema

Al lanzar los correos aun teniendo

Application.DisplayAlerts = False

Me saltan las ventanas de Azure information protection del complemento de Outlook para asignar a cada correo una etiqueta "Publico", "Interno", "Confidencial"... etc

He intentado desmarcar el complemento pero esta metido por política y no deja deshabilitarlo sin permisos de admin

¿Alguna idea para poder saltarlo?

¿O quizás etiquetarlo de manera automática como publico ?

Gracias de antemano y feliz año nuevo!!

 

Buenas Sergio,

Claro, con el comando

Application.DisplayAlerts = False

solo ocultas los mensajes de Microsoft Excel, pero no los de programas externos.

Sinceramente, no sabría decirte como etiquetarlo por defecto como público. Siento no poder ayudarte en esto.

Saludos.

Buenas!

Por si le sirve de ayuda a alguien con el mismo problema con Azure

Después de mirar en todas partes el problema, desde Microsoft solo te dicen que hables con el administrador de Azure para que te excepcionen la cuenta de los envíos, pero me he dado cuenta de que si en lugar de ejecutar la macro desde un botón lo hago desde la venta de programación de macro presionando el triangulo verde, Azure no salta y me realiza los envíos correctamente, eso si mientras se ejecuta no puedo seleccionar otra ventana, incluidas las paginas de excel, si lo hago ya saltan los avisos

Un saludo

Gracias por el aporte Sergio 😉

Contacto