Foro VBATotal
Aprender a programar en Visual Basic
Envíos de correo automáticos con criterios
Cita de Sergio en 21 de diciembre de 2022, 23:34@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
@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.
Cita de Administrador en 22 de diciembre de 2022, 11:52Hola Sergio,
Cita de Sergio en 21 de diciembre de 2022, 23:34Solo 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.
Hola Sergio,
Cita de Sergio en 21 de diciembre de 2022, 23:34Solo 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.
Cita de Sergio en 22 de diciembre de 2022, 20:33Acabo de revisar el caso que indicas
https://www.vbatotal.com/ejercicio-practico-5-como-filtrar-filas-o-registros-de-una-tabla-excel-repartiendolos-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
Acabo de revisar el caso que indicas
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
Cita de Administrador en 23 de diciembre de 2022, 06:49Venga, le echo un vistazo al código y te digo algo.
Por otro lado, ¿qué extensión tiene el archivo que intentas subir? ¿xlsm?
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?
Cita de Sergio en 23 de diciembre de 2022, 08:36Buenos 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.PasteX = 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
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
Cita de Administrador en 23 de diciembre de 2022, 12:21Buenas 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!
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.
Cita de Sergio en 23 de diciembre de 2022, 12:33Genial!!
En cuanto llegue a casa lo miro, que estoy desando ver la solución
Muchísimas gracias por todo y feliz navidad!!!
Genial!!
En cuanto llegue a casa lo miro, que estoy desando ver la solución
Muchísimas gracias por todo y feliz navidad!!!
Cita de Sergio en 23 de diciembre de 2022, 18:23Test, subida de ficheros xlsm al foro
Me ha dejado subirlo sin problema!!
Ya no me ha dado el error de permisos
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.
Cita de Administrador en 23 de diciembre de 2022, 20:32Perfecto!
Perfecto!
Cita de Sergio en 27 de diciembre de 2022, 00:59Buenas!
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
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
Cita de Sergio en 28 de diciembre de 2022, 02:52Buenas 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 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!!
Cita de Administrador en 28 de diciembre de 2022, 10:13Buenas 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!
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 Administrador en 10 de enero de 2023, 08:49Cita de Sergio en 28 de diciembre de 2022, 02:52Buenas 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.
Cita de Sergio en 28 de diciembre de 2022, 02:52Buenas 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.
Cita de Sergio en 24 de enero de 2023, 19:47Buenas!
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
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
Cita de Administrador en 25 de enero de 2023, 07:43Gracias por el aporte Sergio 😉
Gracias por el aporte Sergio 😉