Actualizar nombres desde las referencias de otra hoja

Hola a quien me pueda ayudar.
Tengo dos hojas, una, la que me envía mi proveedor (CL11196.xls) con las referencias de artículos en la columna E7:E3550 y los nombres de los mismos en la columna F7:F3550; y otra, que es la que voy a utilizar, que se llama NombresPesos.xlsx y que contiene las referencias de artículos en la columna A, los nombres en la B y los pesos (que yo coloco a mano posteriormente) en la C.
Necesitaría una macro que recorriera la fila A de NombresPesos.xlsx y comparase con la fila E de CL11956.xls, y que cuando encuentre una referencia igual la salte, pero cuando no esté, inserte la fila y ponga el nombre de la referencia en esa columna, copie en esa fila en la columna B el nombre correspondiente a esa referencia.
Si alguien me ayudase, le estaría muy agradecido, ya que estoy bastante agobiado con este problema.
Gracias mil.
Santi.

1 respuesta

Respuesta
1
La rutina que adjunto se coloca en un módulo del Editor del libro NombresPesos, ya que entiendo que vas a agregar los registros que faltan en libro CL
Antes de ejecutarla asegurate que tenés los 2 li bros abiertos y que los datos se encuentran an la primer hoja, sino ajustá donde dice Sheets(1) colocando su nombre entre comillas
Sub buscaNuevos()
'por Elsamatilde
libro1 = ActiveWorkbook.Name
libro2 = "CL11196.xls"
'me posiciono en el libro que más datos tenga
'en este caso me quedo en libro1, donde está la macro
Sheets("Hoja1").Select
'recorro la col A buscando el dato en hoja 2
ActiveSheet.Range("A2").Select
While ActiveCell <> ""
'busco esa ref en libro2, hoja1
Set busco = Workbooks(libro2).Sheets(1).Range("E7:E3550").Find(dato, LookIn:=xlValues, lookat:=xlWhole)
'si no lo encontró agrega una fila
If busco Is Nothing Then
libre = Workbooks(libro2).Sheets(1).Range("E65536").End(xlUp).Row + 1
Workbooks(libro2).Sheets(1).Range("E" & libre) = ActiveCell
Workbooks(libro2).Sheets(1).Range("F" & libre) = ActiveCell.Offset(0, 1)
End If
Set busco = Nothing
'paso a la fila siguiente y repito el bucle
ActiveCell.Offset(1, 0).Select
Wend
MsgBox "Fin de la actualización"
End Sub
Pruébala y si todo quedó resuelto, no olvides FINALIZAR la consulta
Gracias por tu atención. Voy a probarla y ya te digo.
Tardaré algunos días en responderte porque me voy de viaje ahora mismo, pero en cuanto vuelva te comento o finalizo si va ok.
Gracias de nuevo.
La he probado y me da un error a depurar, que no sé a que puede deberse, ya que mis conocimientos de VB no son nada "extensos".
Como sé que una imagen vale más que mil palabras, te dejo un link a un esquema que creo que te aclarará cual es mi propósito.
De nuevo gracias por tu atención y tu esfuerzo.
El link es este:  http://www.imagengratis.org/images/esquemamacro.jpg
Si necesitas que te envíe los ficheros, dímelo.
Gracias de antemano.
Mencionaste: ...'Necesitaría una macro que recorriera la fila A de NombresPesos.xlsx y comparase con la fila E de CL11956.xls.... y así se hizo la macro, que se ejecuta desde el libro NombrePesos.
Pero según tu imagen en realidad querés que se recorra la col E del otro libro... por lo que mejor me lo aclaras bien: ¿Desde dónde querés que se ejecute la macro y desde dóinde querés que se recorra?
Sdos
Elsa
Elsa Matilde:    Perdona por mi error, ya en realidad no tenía demasiado claro como hacerlo, en definitiva yo quería comprobara ambas, pero he visto que los datos base son los que me manda mi proveedor, por eso prefiero que recorra la columna E del fichero CL11956.xls,  y la compare con la de NombrePesos.xlsx.
La macro definitivamente se ejecutará desde un libro en el que tengo otras macros, es decir no debe estar en ninguno de ellos.
Te pido mil perdones por mi error, y te agradezco tu interés una vez más.
Saludos, Santiago.
Pruébala así entonces. Ajustá los nombres de hojas (no se ven en la imagen)
Sub buscaNuevos()
'por Elsamatilde
libro1 = "CL11196.xls"
libro2 = "NombresPesos.xlsx"
'me posiciono en el libro que más datos tenga
'en este activo libro1- AJUSTAR NBRE DE HOJA
Workbooks(libro1).Select
ActiveWorkbook.Sheets("Hoja1").Select
'recorro la col A buscando el dato en hoja 2
ActiveSheet.Range("E8").Select
While ActiveCell <> ""
'busco esa ref en libro2, hoja1
Set busco = Workbooks(libro2).Sheets(1).Range("A2:A60000").Find(ActiveCell, LookIn:=xlValues, lookat:=xlWhole)
'si no lo encontró agrega una fila
If busco Is Nothing Then
libre = Workbooks(libro2).Sheets(1).Range("A65536").End(xlUp).Row + 1
Workbooks(libro2).Sheets(1).Range("A" & libre) = ActiveCell
Workbooks(libro2).Sheets(1).Range("B" & libre) = ActiveCell.Offset(0, 1)
'si lo encontró, mira si no tiene nombre y lo coloca
ElseIf busco.Offset(0, 1) = "" Then
busco.Offset(0, 1) = ActiveCell.Offset(0, 1)
End If
Set busco = Nothing
'paso a la fila siguiente y repito el bucle
ActiveCell.Offset(1, 0).Select
Wend
MsgBox "Fin de la actualización"
End Sub
Sdos y si el tema queda resuelto no olvides regresar y finalizar la consulta
No olvides FINALIZAR la consulta si el tema quedó resuelto. Sdos!
Elsa, perdona por mi tardanza, pero estoy de viaje y no puedo probarlo.
En cuanto vuelva el próximo lunes, ten por seguro que lo pruebo y te comento.
De nuevo gracias por tu altruismo e interés.
Santiago.
Bien, pero no te la olvides o quedarás bloqueado para registrar nuevas consultas... Sdos!
Elsa, gracias por tu espera. La macro funciona correctamente.
Es verdad que hay gente que dice que sabe, pero no es así... al parecer he encontrado una experta en excel de verdad.
Te agradezco tu ayuda, y no sabes de que manera.
Gracias.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas