Saltar al contenido

Añadir filas en una estructura y que se modifique en mi base de datos


Recommended Posts

Buenos días a todos y gracias de antemano por su atención.

Tengo una hoja Excel con varias pestañas: en la primera de ellas aparece una estructura y, en la segunda, una base de datos.

En la mencionada estructura existen una serie de registros que son la "columna vertebral" de la base de datos. En la base de datos existen unos "ids" los cuales tienen que tener todos los registros de esa estructura.

Sin embargo, por diversas necesidades, a veces es necesario cambiar esa estructura y, por ende, todos los "productos" de la base de datos. Al tener muchos registros (ids) en la base de datos se me hace casi imposible hacerlo de forma manual por lo que necesitaría un botón que lo hiciera de forma automática.

Muchas gracias por su tiempo e interés.

PD: les adjunto un Excel para que pueda quedar más claro el ejemplo

Duda.xlsx

Enlace a comentario
Compartir con otras webs

Ejecuta la macro Estructurar sobre el archivo que has subido:

Dim Datos As Worksheet

Sub Estructurar()
Set Datos = Sheets("Datos 1")
With Sheets("Estructura")
   x = 2
   y = 2
   Do Until Datos.Range("A" & x) = ""
      Do: y = y + 1
      Loop Until Datos.Range("A" & y) <> Datos.Range("A" & y + 1)
      Z = ValidarID(x, y)
      y = y + Z
      x = y + 1
   Loop
End With
End Sub

Function ValidarID(x, y) As Integer
With Sheets("Estructura")
   For fila = 2 To .Range("A" & Rows.Count).End(xlUp).Row
      If Not (Datos.Range("I" & x) = .Range("A" & fila) And _
         Datos.Range("J" & x) = .Range("B" & fila)) Then
         Datos.Rows(x).Insert
         Datos.Rows(x).Interior.Color = vbYellow 'Resalta línea insertada
         Datos.Range("A" & x) = Datos.Range("A" & x - 1)
         Datos.Range("B" & x) = Datos.Range("B" & x - 1)
         Datos.Range("I" & x) = .Range("A" & fila)
         Datos.Range("J" & x) = .Range("B" & fila)
         ValidarID = ValidarID + 1
         fila = fila + 1
         x = x + 1
      End If
      x = x + 1
   Next
End With
End Function

 

Enlace a comentario
Compartir con otras webs

  • 3 months later...
En 12/11/2022 at 20:47 , Antoni dijo:

Ejecuta la macro Estructurar sobre el archivo que has subido:

Dim Datos As Worksheet

Sub Estructurar()
Set Datos = Sheets("Datos 1")
With Sheets("Estructura")
   x = 2
   y = 2
   Do Until Datos.Range("A" & x) = ""
      Do: y = y + 1
      Loop Until Datos.Range("A" & y) <> Datos.Range("A" & y + 1)
      Z = ValidarID(x, y)
      y = y + Z
      x = y + 1
   Loop
End With
End Sub

Function ValidarID(x, y) As Integer
With Sheets("Estructura")
   For fila = 2 To .Range("A" & Rows.Count).End(xlUp).Row
      If Not (Datos.Range("I" & x) = .Range("A" & fila) And _
         Datos.Range("J" & x) = .Range("B" & fila)) Then
         Datos.Rows(x).Insert
         Datos.Rows(x).Interior.Color = vbYellow 'Resalta línea insertada
         Datos.Range("A" & x) = Datos.Range("A" & x - 1)
         Datos.Range("B" & x) = Datos.Range("B" & x - 1)
         Datos.Range("I" & x) = .Range("A" & fila)
         Datos.Range("J" & x) = .Range("B" & fila)
         ValidarID = ValidarID + 1
         fila = fila + 1
         x = x + 1
      End If
      x = x + 1
   Next
End With
End Function

 

Hola buenos días. Perdón por la tardanza en la respuesta pero creía que era válido.

He hecho alguna modificación para que se adapte a mi rango pero, como subo en el archivo, no se insertan en todos los "bloques" (desde precio pronto pago hasta beneficios adicionales). Por ejemplo debería haberse insertado en la fila 68 ó 129 de la pestaña "Datos" entre otras

Si me pudiera ayudar de nuevo se lo agradecería enormemente.

Buena.xlsm

Enlace a comentario
Compartir con otras webs

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.