Una ayuda por favor

28/04/2006 - 22:31 por bermejo-Luis | Informe spam
Tengo en una hoja de excel lo siguente, como ejemplo:

colum1 colum2 colum3 colum4 colum5 colum6
Punto de venta1 xxx
Direccion c/xxxxxxxx
poblacion xxxxxxxx
filacliente1 fdatoc2 fdatoc3 fdatoc4 - fdatoc6
filacliente2 fdatoc2 fdatoc3 fdatoc4 - fdatoc6
filacliente3 fdatoc2 fdatoc3 fdatoc4 - fdatoc6
Punto de venta2 xxxxxxxx
Direccion c/xxxxxxxxxxxxxx
poblacion xxxxxxxxxxxx
filacliente fdatoc2 fdatoc3 fdatoc4 - fdatoc6
fliacliente fdatoc3 fdatoc3 fdatoc4 - fdatoc6

Bueno con este ejemplo espero que podais entender mi problema.
Esta hoja "informe" se recibe cada 15 dias, en esta hoja de excel hay
aprox entre 350 y 400 filas y como podeis ver los puntos de venta,
direccion etc. ocupan columnas que contienen datos, hay aprx entre 50 y 55
puntos de venta.Esto es por que no todos los informes que se reciben
tienen siempre los mismos clientes y los mismos puntos de venta, ya que
podeis ver la columna 5 esta vacia y hay que reenviar a cada punto de
venta, sus clientes y que rellenen el dato que falta.
Mi intencion es y asi lo hago manualmente es separar cada punto de venta
en un hoja aparte y reenviarsela. Cortando y pegando cada rango que
tienen. Al ser cada vez de un tamaño distinto, no se como hacerlo con
alguna macro en Vba ya que soy novato.Se como añadir hojas en el libro con
vba y como definir algún rango de filas, celdas etc.,Pero como le digo que
busque el rango desde un punto de venta hasta el siguiente punto de venta
lo copie y pegue en otra hoja y asi sucesibamente hasta completar todos
los puntos de venta con sus clientes en hojas distintas.
Espero que podais ayudarme y en caso contrario Gracias de todas formas por
haber leido mi problema
Un Saludo
Luis Bermejo

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
29/04/2006 - 08:13 | Informe spam
hola, Luis !

supongo que el 'ejemplo' [aparte de 'meramente ilustrativo'] pudiera ser un tanto cuanto 'diferente' en la realidad -?-
[asi que]... con los siguientes 'supuestos'... espero que falten pocas modificaciones a la siguiente propuesta :))

-> 'la hoja' se llama "hoja1" [modifica en el codigo con el nombre 'real'] :D
1) -cuando menos- la celda 'A1' contiene un texto/encabezamiento/... para poder 'meterle' un autofiltro [por codigo]
[por lo que 'colum1' hace referencia a la columna 'A'] :D
2) entre el 'identificador' -> Punto de ventaX Y... la fila con 'el ultimo dato' [de cada punto de venta]
=> NO HAY celdas 'vacias' <= OJO
3) la columna donde se 'cuentan' los datos que faltan ES la 'colum5' [columna 'E'] -> 4 columnas a la derecha de 'A'
4) del 'identificador' -> Punto de ventaX 'hasta' -> la PRIMER celda/fila CON 'datos' de cada cliente...
hay TRES celdas/filas de 'distancia' [la pimer 'filacliente' esta 3 filas abajo de su 'punto de venaX']
5) la base de datos [o listado] comprende [siempre ?] SEIS columnas -> de 'A' <-> 'F'
-> la macro genera una hoja nueva por cada 'punto de venta' al que le falten datos en su columna 'E'

copia las siguientes lineas en un modulo de codigo 'normal' y...
si cualquier duda [o informacion adicional]... comenas ?
saludos,
hector.

Sub Faltan_datos(): Application.ScreenUpdating = False
Dim Puntos As String, Celda As Range, Datos As String, Faltan As String
With Worksheets("hoja1")
With Range(.[a1], .[a65536].End(xlUp))
If .AutoFilter Then .AutoFilter: .AutoFilter Field:=1, Criteria1:="punto de venta*"
With .Parent.AutoFilter.Range: Puntos = _
.Offset(1).Resize(.Rows.Count - 1).SpecialCells(xlCellTypeVisible).Address(0, 0)
End With: .AutoFilter: End With
For Each Celda In .Range(Puntos)
Datos = .Range(Celda, Celda.End(xlDown)).Resize(, 6).Address
Faltan = .Range(Celda.Offset(3), Celda.End(xlDown)).Offset(, 4).Address
If Application.CountIf(Worksheets(.Name).Range(Faltan), "") > 0 Then
.Range(Datos).Copy Worksheets.Add(After:=Worksheets(Worksheets.Count)).[a1]
ActiveSheet.Name = [a1]
End If: Next: .Select: End With
End Sub

___ consulta original ___
Tengo en una hoja de excel lo siguente, como ejemplo:
colum1 colum2 colum3 colum4 colum5 colum6
Punto de venta1 xxx
Direccion c/xxxxxxxx
poblacion xxxxxxxx
filacliente1 fdatoc2 fdatoc3 fdatoc4 - fdatoc6
filacliente2 fdatoc2 fdatoc3 fdatoc4 - fdatoc6
filacliente3 fdatoc2 fdatoc3 fdatoc4 - fdatoc6
Punto de venta2 xxxxxxxx
Direccion c/xxxxxxxxxxxxxx
poblacion xxxxxxxxxxxx
filacliente fdatoc2 fdatoc3 fdatoc4 - fdatoc6
fliacliente fdatoc3 fdatoc3 fdatoc4 - fdatoc6
... con este ejemplo espero que podais entender mi problema.
Esta hoja "informe" se recibe cada 15 dias... hay aprox entre 350 y 400 filas
... ver los puntos de venta, direccion etc. ocupan columnas que contienen datos hay aprx entre 50 y 55 puntos de venta
... no todos los informes que se reciben tienen siempre los mismos clientes y los mismos puntos de venta
... ver la columna 5 esta vacia y hay que reenviar a cada punto de venta, sus clientes y que rellenen el dato que falta.
... lo hago manualmente... Cortando y pegando cada rango que tienen... no se como hacerlo con alguna macro [...]
Respuesta Responder a este mensaje
#2 bermejo.luis
29/04/2006 - 12:33 | Informe spam
Hector antes de nada muchas gracias por la ayuda que prestais a los
novatos en esto como yo.
Efectivamente en el ejemplo que te he puesto, en la primera fila falta el
encabezado de cada columna, lo cual se me olvido indicarlo ya que en la
hoja que genere la macro debe de pegar el encabezado.Siempre son las
mismas columnas y la columna que esta vacia también siempre es la misma.
Voy a probar lo que me has indicado y si tengo cualquier duda te lo
comento.
De verdad que haceis una labor increible, se aprende más con las ayudas
vuestras que con todos los manuales.


Héctor Miguel wrote:

hola, Luis !

supongo que el 'ejemplo' [aparte de 'meramente ilustrativo'] pudiera ser un


tanto cuanto 'diferente' en la realidad -?-
[asi que]... con los siguientes 'supuestos'... espero que falten pocas


modificaciones a la siguiente propuesta :))

-> 'la hoja' se llama "hoja1" [modifica en el codigo con el nombre


'real'] :D
1) -cuando menos- la celda 'A1' contiene un texto/encabezamiento/... para


poder 'meterle' un autofiltro [por codigo]
[por lo que 'colum1' hace referencia a la columna 'A'] :D
2) entre el 'identificador' -> Punto de ventaX Y... la fila con 'el


ultimo dato' [de cada punto de venta]
=> NO HAY celdas 'vacias' <= OJO
3) la columna donde se 'cuentan' los datos que faltan ES la 'colum5'


[columna 'E'] -> 4 columnas a la derecha de 'A'
4) del 'identificador' -> Punto de ventaX 'hasta' -> la PRIMER celda/fila


CON 'datos' de cada cliente...
hay TRES celdas/filas de 'distancia' [la pimer 'filacliente' esta 3


filas abajo de su 'punto de venaX']
5) la base de datos [o listado] comprende [siempre ?] SEIS columnas -> de


'A' <-> 'F'
-> la macro genera una hoja nueva por cada 'punto de venta' al que le falten


datos en su columna 'E'

copia las siguientes lineas en un modulo de codigo 'normal' y...
si cualquier duda [o informacion adicional]... comenas ?
saludos,
hector.

Sub Faltan_datos(): Application.ScreenUpdating = False
Dim Puntos As String, Celda As Range, Datos As String, Faltan As String
With Worksheets("hoja1")
With Range(.[a1], .[a65536].End(xlUp))
If .AutoFilter Then .AutoFilter: .AutoFilter Field:=1,


Criteria1:="punto de venta*"
With .Parent.AutoFilter.Range: Puntos = _
.Offset(1).Resize(.Rows.Count -


1).SpecialCells(xlCellTypeVisible).Address(0, 0)
End With: .AutoFilter: End With
For Each Celda In .Range(Puntos)
Datos = .Range(Celda, Celda.End(xlDown)).Resize(, 6).Address
Faltan = .Range(Celda.Offset(3), Celda.End(xlDown)).Offset(, 4).Address
If Application.CountIf(Worksheets(.Name).Range(Faltan), "") > 0 Then
.Range(Datos).Copy


Worksheets.Add(After:=Worksheets(Worksheets.Count)).[a1]
ActiveSheet.Name = [a1]
End If: Next: .Select: End With
End Sub

___ consulta original ___
> Tengo en una hoja de excel lo siguente, como ejemplo:
> colum1 colum2 colum3 colum4 colum5 colum6
> Punto de venta1 xxx
> Direccion c/xxxxxxxx
> poblacion xxxxxxxx
> filacliente1 fdatoc2 fdatoc3 fdatoc4 - fdatoc6
> filacliente2 fdatoc2 fdatoc3 fdatoc4 - fdatoc6
> filacliente3 fdatoc2 fdatoc3 fdatoc4 - fdatoc6
> Punto de venta2 xxxxxxxx
> Direccion c/xxxxxxxxxxxxxx
> poblacion xxxxxxxxxxxx
> filacliente fdatoc2 fdatoc3 fdatoc4 - fdatoc6
> fliacliente fdatoc3 fdatoc3 fdatoc4 - fdatoc6
> ... con este ejemplo espero que podais entender mi problema.
> Esta hoja "informe" se recibe cada 15 dias... hay aprox entre 350 y 400


filas
> ... ver los puntos de venta, direccion etc. ocupan columnas que contienen


datos hay aprx entre 50 y 55 puntos de venta
> ... no todos los informes que se reciben tienen siempre los mismos


clientes y los mismos puntos de venta
>... ver la columna 5 esta vacia y hay que reenviar a cada punto de venta,


sus clientes y que rellenen el dato que falta.
> ... lo hago manualmente... Cortando y pegando cada rango que tienen... no


se como hacerlo con alguna macro [...]
Respuesta Responder a este mensaje
#3 bermejo.luis
29/04/2006 - 15:36 | Informe spam
Hector, de nuevo te pido ayuda

He copiado y modificado el codigo con los datos correctos de columna ,hoja
etc cambiados, pero no me funciona, cuando ejecuto la macro efectua el
fltro y me indica que no hay celdas "error 1004 en tiempo de ejecucion no
se encontraron celdas".
Posiblemente no estoy haciendo las cosas muy bien que digamos. Estoy
intentando enviarte por Mail un ejemplo de la hoja de excel correcta con
datos reales, pero me da error de sevidor ** - El servidor de correo ha
procesado los siguientes destinatarios del mensaje:
; Fallido; 5.4.3 (error en el servidor de
enrutación).
si pego la hoja en este espacio no sale bien y no podras visualizarla
correctamente. ¿ Te la puedo enviar de alguna forma ? ¿la direccion de
correo que sale es la correcta ?
Saludos y gracias por tu paciencia





Luis wrote:

Hector antes de nada muchas gracias por la ayuda que prestais a los
novatos en esto como yo.
Efectivamente en el ejemplo que te he puesto, en la primera fila falta el
encabezado de cada columna, lo cual se me olvido indicarlo ya que en la
hoja que genere la macro debe de pegar el encabezado.Siempre son las
mismas columnas y la columna que esta vacia también siempre es la misma.
Voy a probar lo que me has indicado y si tengo cualquier duda te lo
comento.
De verdad que haceis una labor increible, se aprende más con las ayudas
vuestras que con todos los manuales.


Héctor Miguel wrote:

> hola, Luis !

> supongo que el 'ejemplo' [aparte de 'meramente ilustrativo'] pudiera ser un
tanto cuanto 'diferente' en la realidad -?-
> [asi que]... con los siguientes 'supuestos'... espero que falten pocas
modificaciones a la siguiente propuesta :))

> -> 'la hoja' se llama "hoja1" [modifica en el codigo con el nombre
'real'] :D
> 1) -cuando menos- la celda 'A1' contiene un texto/encabezamiento/... para
poder 'meterle' un autofiltro [por codigo]
> [por lo que 'colum1' hace referencia a la columna 'A'] :D
> 2) entre el 'identificador' -> Punto de ventaX Y... la fila con 'el
ultimo dato' [de cada punto de venta]
> => NO HAY celdas 'vacias' <= OJO
> 3) la columna donde se 'cuentan' los datos que faltan ES la 'colum5'
[columna 'E'] -> 4 columnas a la derecha de 'A'
> 4) del 'identificador' -> Punto de ventaX 'hasta' -> la PRIMER


celda/fila
CON 'datos' de cada cliente...
> hay TRES celdas/filas de 'distancia' [la pimer 'filacliente' esta 3
filas abajo de su 'punto de venaX']
> 5) la base de datos [o listado] comprende [siempre ?] SEIS columnas -> de
'A' <-> 'F'
> -> la macro genera una hoja nueva por cada 'punto de venta' al que le


falten
datos en su columna 'E'

> copia las siguientes lineas en un modulo de codigo 'normal' y...
> si cualquier duda [o informacion adicional]... comenas ?
> saludos,
> hector.

> Sub Faltan_datos(): Application.ScreenUpdating = False
> Dim Puntos As String, Celda As Range, Datos As String, Faltan As String
> With Worksheets("hoja1")
> With Range(.[a1], .[a65536].End(xlUp))
> If .AutoFilter Then .AutoFilter: .AutoFilter Field:=1,
Criteria1:="punto de venta*"
> With .Parent.AutoFilter.Range: Puntos = _
> .Offset(1).Resize(.Rows.Count -
1).SpecialCells(xlCellTypeVisible).Address(0, 0)
> End With: .AutoFilter: End With
> For Each Celda In .Range(Puntos)
> Datos = .Range(Celda, Celda.End(xlDown)).Resize(, 6).Address
> Faltan = .Range(Celda.Offset(3), Celda.End(xlDown)).Offset(,


4).Address
> If Application.CountIf(Worksheets(.Name).Range(Faltan), "") > 0 Then
> .Range(Datos).Copy
Worksheets.Add(After:=Worksheets(Worksheets.Count)).[a1]
> ActiveSheet.Name = [a1]
> End If: Next: .Select: End With
> End Sub

> ___ consulta original ___
> > Tengo en una hoja de excel lo siguente, como ejemplo:
> > colum1 colum2 colum3 colum4 colum5 colum6
> > Punto de venta1 xxx
> > Direccion c/xxxxxxxx
> > poblacion xxxxxxxx
> > filacliente1 fdatoc2 fdatoc3 fdatoc4 - fdatoc6
> > filacliente2 fdatoc2 fdatoc3 fdatoc4 - fdatoc6
> > filacliente3 fdatoc2 fdatoc3 fdatoc4 - fdatoc6
> > Punto de venta2 xxxxxxxx
> > Direccion c/xxxxxxxxxxxxxx
> > poblacion xxxxxxxxxxxx
> > filacliente fdatoc2 fdatoc3 fdatoc4 - fdatoc6
> > fliacliente fdatoc3 fdatoc3 fdatoc4 - fdatoc6
> > ... con este ejemplo espero que podais entender mi problema.
> > Esta hoja "informe" se recibe cada 15 dias... hay aprox entre 350 y 400
filas
> > ... ver los puntos de venta, direccion etc. ocupan columnas que contienen
datos hay aprx entre 50 y 55 puntos de venta
> > ... no todos los informes que se reciben tienen siempre los mismos
clientes y los mismos puntos de venta
> >... ver la columna 5 esta vacia y hay que reenviar a cada punto de venta,
sus clientes y que rellenen el dato que falta.
> > ... lo hago manualmente... Cortando y pegando cada rango que tienen... no
se como hacerlo con alguna macro [...]
Respuesta Responder a este mensaje
#4 Héctor Miguel
29/04/2006 - 22:05 | Informe spam
hola, Luis !

He copiado y modificado el codigo con los datos correctos de columna, hoja etc. cambiados, pero no me funciona
cuando ejecuto la macro efectua el fltro y me indica que no hay celdas "error 1004 en tiempo de ejecucion ...".
... Estoy intentando enviarte por Mail un ejemplo de la hoja de excel correcta con datos reales, pero me da error de sevidor ...
... Te la puedo enviar de alguna forma ? la direccion de correo que sale es la correcta ?



op1: si comentas cuales son las 'modificaciones' que haces al codigo...
y cuales son los datos 'reales' [y como estan distribuidos] :D
[probablemente] sera cosa de 'remendar' el codigo de la propuesta :))

op2: si requieres enviarme el archivo... solo quita de la direccion que aparece el 'NO...SPAM...PLS' ;)

saludos,
hector.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida