Un poco de ayuda...

01/05/2004 - 11:53 por todavianosequeponer | Informe spam
voy haciendo poco a poco mi aplicación, pero esto no me sale. Seguro que
alguno de vosotros no tiene inconveniente en ayudarme...

Lo que deseo hacer es una macro que mire los rangos de la hoja "Albaran",
A:5 A:10 (codigos) y C5:C10 (unidades) y que los lleve a la hoja "Totales"
de esta forma:
-Los "códigos" a la columna "A", evaluando si en esa columna ya existe ese
código. Si ya existe, la macro debe ir 6 celdas a su derecha y pegar ahi las
"unidades" de ese código. Si no existe, pegarlo en la primera celda en
blanco de esa columna y las unidades lo mismo, en la celda 6ª de su derecha.

La macro se ejecutáría con un botón, no automáticamente al introducir el
código...

Gracia por vuestra ayuda..

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
01/05/2004 - 13:01 | Informe spam
hola, todavianosequeponer ! [¿vulcano?] =>a ver si ya 'pones' algo'<= :))

... macro que ... de la hoja 'Albaran', A:5 A:10 (codigos) y C5:C10 (unidades) ... los lleve a la hoja 'Totales'
... 'codigos' a la columna 'A' ... si ... ese codigo ... ya existe ... 6 celdas a su derecha pegar las 'unidades'
... si no existe, pegarlo en la primera celda en blanco de esa columna y las unidades ... en la ... 6ª ... derecha [...]



una forma [si he entendido bien] ... pega las siguientes lineas al codigo que la 'asignes' al boton...
Dim Fila As Integer, Celda As Range
For Fila = 5 To 10
With Worksheets("Totales")
Set Celda = .Columns("a").Find(What:=Worksheets("Albaran").Range("a" & Fila))
If Celda Is Nothing Then
Set Celda = .Range("a65536").End(xlUp).Offset(1)
.Range(Celda.Address) = Worksheets("Albaran").Range("a" & Fila)
End If
.Range(Celda.Address).Offset(, 6) = Worksheets("Albaran").Range("c" & Fila)
End With
Next
Set Celda = Nothing

¿comentas?
saludos,
hector.
Respuesta Responder a este mensaje
#2 todavianosequeponer
01/05/2004 - 17:47 | Informe spam
Gracias Héctor, es un lujo que me contestes...

Funciona más o menos, pero había que afinar un poco más:

-Había que affinar más la búsqueda, pues si pongo un codigo 160010 y otro
6, considera que es el mismo...
-Necesito que antes de "pegar" las unidades en su sitio se desplace 5
lugares a su derecha y luego busque el primer lugar vacio a su derecha, para
que pegue ahi la unidade s de ese código.

El motivo es en que la hoja Totales (empezando en la columna A), tengo:
Código, Descripción, TipoUd, Baremo, Puntos, por lo cual la macro siempre va
a tener que pasar por alto estas columnas. Luego, si ese codigo ya existía,
debe haber ya alguna cantidad a la derecha (de estas columnas) y no quiero
que la "machaque" si no que la ponga a continuación...

Gracias de nuevo por tú ayuda. Un día te vamos a hacer un monumento...

"Héctor Miguel" escribió en el mensaje
news:
hola, todavianosequeponer ! [¿vulcano?] =>a ver si ya 'pones' algo'<:))

> ... macro que ... de la hoja 'Albaran', A:5 A:10 (codigos) y C5:C10


(unidades) ... los lleve a la hoja 'Totales'
> ... 'codigos' a la columna 'A' ... si ... ese codigo ... ya existe ... 6


celdas a su derecha pegar las 'unidades'
> ... si no existe, pegarlo en la primera celda en blanco de esa columna y


las unidades ... en la ... 6ª ... derecha [...]

una forma [si he entendido bien] ... pega las siguientes lineas al codigo


que la 'asignes' al boton...
Dim Fila As Integer, Celda As Range
For Fila = 5 To 10
With Worksheets("Totales")
Set Celda = .Columns("a").Find(What:=Worksheets("Albaran").Range("a"


& Fila))
If Celda Is Nothing Then
Set Celda = .Range("a65536").End(xlUp).Offset(1)
.Range(Celda.Address) = Worksheets("Albaran").Range("a" & Fila)
End If
.Range(Celda.Address).Offset(, 6) = Worksheets("Albaran").Range("c"


& Fila)
End With
Next
Set Celda = Nothing

¿comentas?
saludos,
hector.

Respuesta Responder a este mensaje
#3 todavianosequeponer
01/05/2004 - 17:51 | Informe spam
Gracias Héctor, es un lujo que me contestes...

Funciona más o menos, pero había que afinar un poco más:

-Había que afinar más la búsqueda, pues si pongo un codigo 160010 y otro
6, considera que es el mismo...
-Necesito que antes de "pegar" las unidades en su sitio se desplace 5
lugares a su derecha y luego busque el primer lugar vacio a su derecha, para
que pegue ahi la unidade s de ese código.

El motivo es en que la hoja Totales (empezando en la columna A), tengo:
Código, Descripción, TipoUd, Baremo, Puntos, por lo cual la macro siempre va
a tener que pasar por alto estas columnas.
Luego, si ese codigo ya existía, debe haber ya alguna cantidad a la derecha
(de estas columnas) y no quiero
que la "machaque" si no que la ponga a continuación...

Gracias de nuevo por tú ayuda. Un día te vamos a hacer un monumento...

"Héctor Miguel" escribió en el mensaje
news:
hola, todavianosequeponer ! [¿vulcano?] =>a ver si ya 'pones' algo'<:))

> ... macro que ... de la hoja 'Albaran', A:5 A:10 (codigos) y C5:C10


(unidades) ... los lleve a la hoja 'Totales'
> ... 'codigos' a la columna 'A' ... si ... ese codigo ... ya existe ... 6


celdas a su derecha pegar las 'unidades'
> ... si no existe, pegarlo en la primera celda en blanco de esa columna y


las unidades ... en la ... 6ª ... derecha [...]

una forma [si he entendido bien] ... pega las siguientes lineas al codigo


que la 'asignes' al boton...
Dim Fila As Integer, Celda As Range
For Fila = 5 To 10
With Worksheets("Totales")
Set Celda = .Columns("a").Find(What:=Worksheets("Albaran").Range("a"


& Fila))
If Celda Is Nothing Then
Set Celda = .Range("a65536").End(xlUp).Offset(1)
.Range(Celda.Address) = Worksheets("Albaran").Range("a" & Fila)
End If
.Range(Celda.Address).Offset(, 6) = Worksheets("Albaran").Range("c"


& Fila)
End With
Next
Set Celda = Nothing

¿comentas?
saludos,
hector.

Respuesta Responder a este mensaje
#4 Héctor Miguel
01/05/2004 - 21:49 | Informe spam
hola, todavianosequeponer !

... afinar ... pues ... un codigo 160010 y otro 6, considera que es el mismo...


=> entonces... solo hay que 'indicarle' que busque el dato 'completo' [LookAt:=xlWhole]

... que antes de 'pegar' las unidades ... se desplace 5 ... a su derecha y ... el primer lugar vacio [...]



con estos [nuevos] datos... haz una prueba con la siguiente lineas [modificadas]
Dim Fila As Integer, Col As Integer, Celda As Range
For Fila = 5 To 10
With Worksheets("Totales")
Set Celda = .Columns("a").Find(What:=Worksheets("Albaran").Range("a" & Fila), LookAt:=xlWhole)
If Celda Is Nothing Then
Set Celda = .Range("a65536").End(xlUp).Offset(1)
.Range(Celda.Address) = Worksheets("Albaran").Range("a" & Fila)
End If
If IsEmpty(.Range(Celda.Address).Offset(, 5)) Then Col = 6 _
Else Col = .Range("iv" & Celda.Row).End(xlToLeft).Offset(, 1).Column
.Cells(Celda.Row, Col) = Worksheets("Albaran").Range("c" & Fila)
End With
Next
Set Celda = Nothing

saludos,
hector.

p.d. por lo de los comentarios 'al margen' ...
1° ¡ agradecido !!! [es un privilegio tal consideracion] :))
2° [te aseguro que...] es suficiente con un 'simple'...
... ¡ funciona !!!
o... ¡ NO funciona !!! ... :(( [porque... 'esto, eso y aquello'] ;)
Respuesta Responder a este mensaje
#5 Navibel
02/05/2004 - 16:56 | Informe spam
¡¡¡¡ Funcionaaaaaaaaaaaaa !!!!
Magnífico. Muchas gracias Héctor
La segunda parte es entender lo que has hecho...

...y mantengo todo lo dicho anteriormente.

Yo creo que todo este foro, agradece cualquier tipo de ayuda, incluso
algunas erróneas, pero sin desmerecer a nadie, cuando tú o algún otro (todo
el mundo sabe a quien me refiero) aparece contestando un mensaje te cambia
la cara...

"Héctor Miguel" escribió en el mensaje
news:e$
hola, todavianosequeponer !

> ... afinar ... pues ... un codigo 160010 y otro 6, considera que es el


mismo...
=> entonces... solo hay que 'indicarle' que busque el dato 'completo'


[LookAt:=xlWhole]

> ... que antes de 'pegar' las unidades ... se desplace 5 ... a su derecha


y ... el primer lugar vacio [...]

con estos [nuevos] datos... haz una prueba con la siguiente lineas


[modificadas]
Dim Fila As Integer, Col As Integer, Celda As Range
For Fila = 5 To 10
With Worksheets("Totales")
Set Celda = .Columns("a").Find(What:=Worksheets("Albaran").Range("a"


& Fila), LookAt:=xlWhole)
If Celda Is Nothing Then
Set Celda = .Range("a65536").End(xlUp).Offset(1)
.Range(Celda.Address) = Worksheets("Albaran").Range("a" & Fila)
End If
If IsEmpty(.Range(Celda.Address).Offset(, 5)) Then Col = 6 _
Else Col = .Range("iv" & Celda.Row).End(xlToLeft).Offset(,


1).Column
.Cells(Celda.Row, Col) = Worksheets("Albaran").Range("c" & Fila)
End With
Next
Set Celda = Nothing

saludos,
hector.

p.d. por lo de los comentarios 'al margen' ...
1° ¡ agradecido !!! [es un privilegio tal consideracion] :))
2° [te aseguro que...] es suficiente con un 'simple'...
... ¡ funciona !!!
o... ¡ NO funciona !!! ... :(( [porque... 'esto, eso y


aquello'] ;)

Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida