estimado @pinoji
la verdad sin archivo es dificil de hacer pruebas, deberias de adjuntar aunque sea un pequeño ejemplo:
te mando el codigo corregido, (Nota: sin realizar pruebas)
Sub InsertarCuentaOrdenada()
Dim wsCatalogo As Worksheet
Dim ultimaFila As Long
Dim nivelCuenta As String
Dim nuevaCuenta As String
Dim tituloCuenta As String
Dim naturalezaCuenta As String
Dim i As Long
Dim filaInsertar As Long
Dim cuentaEncontrada As Boolean
Set wsCatalogo = ThisWorkbook.Sheets("Plan de Cuentas")
ultimaFila = wsCatalogo.Cells(wsCatalogo.Rows.Count, 1).End(xlUp).Row
' Pedir datos
nivelCuenta = InputBox("Ingrese la categoría jerárquica de la cuenta:")
nuevaCuenta = InputBox("Ingrese el código de la nueva cuenta (ej: 102-03):")
tituloCuenta = InputBox("Ingrese el Título de la cuenta:")
naturalezaCuenta = InputBox("Ingrese la Naturaleza de la cuenta (D/H):")
cuentaEncontrada = False
filaInsertar = ultimaFila + 1 ' Por defecto, al final
' Buscar dónde insertar
For i = 3 To ultimaFila
If wsCatalogo.Cells(i, 1).Value = nivelCuenta Then
If wsCatalogo.Cells(i, 2).Value > nuevaCuenta Then
filaInsertar = i
cuentaEncontrada = True
Exit For
End If
End If
Next i
' Insertar fila y datos
wsCatalogo.Rows(filaInsertar).Insert Shift:=xlDown
wsCatalogo.Cells(filaInsertar, 1).Value = nivelCuenta
wsCatalogo.Cells(filaInsertar, 2).Value = nuevaCuenta
wsCatalogo.Cells(filaInsertar, 3).Value = tituloCuenta
wsCatalogo.Cells(filaInsertar, 4).Value = naturalezaCuenta
MsgBox "Cuenta insertada correctamente y ordenada.", vbInformation
End Sub
Código original
Insertaba la nueva cuenta justo debajo de la primera coincidencia de jerarquía (columna A).
No respetaba el orden numérico de los códigos de cuenta (columna B).
Resultado: cuentas nuevas podían quedar fuera de orden lógico (ej: 102-03 podía quedar arriba de 102-02).
Código corregido
Busca todas las cuentas con la jerarquía indicada.
Compara el código de la nueva cuenta con los existentes y encuentra su posición correcta dentro de esa jerarquía.
Inserta la cuenta en ese punto, manteniendo el orden numérico.
Espero haberte ayudado,
Saludos,
Por
DiegoLG , · publicado el sábado a las 20:26 4 días
Hola Expertos. En un libro compartido tengo una macro que realiza un autofiltro por nombre de usuario. Necesito que ese filtro permanezca durante el tiempo en que trabajan en el libro. Para esto necesito deshabilitarles todas las opciones de filtro, las del tab Datos y las del Tab Inicio para que no quiten el filtro activo. Esto es en Excel 2007. Cómo puedo hacer esto mediante VBA? Muchas gracias por sus respuestas.
He probado el código siguiente pero solo me funciona con Excel 2003:
[color=#0000ff]Private[/color] [color=#0000ff]Sub[/color] Workbook_Activate()
Application.CommandBars.FindControl(ID:=899).Enabled = [color=#0000ff]False[/color]
[color=#0000ff]End Sub[/color]
[color=#0000ff]Private[/color] [color=#0000ff]Sub[/color] Workbook_Deactivate()
Application.CommandBars.FindControl(ID:=899).Enabled = [color=#0000ff]True[/color]
[color=#0000ff]End Sub[/color]
[b][code][/b]
Att. Manolo