Saltar al contenido
publicado

Buenos días colegas. Espero se encuentren bien de salud.

Hace algunos días comencé un nuevo proyecto para llevar la Contabilidad en un Negocio que es de mi hermano. Apenas comienzo, pero tengo varios problemas a pesar de ser Contador (pero no programador).

El tema que me ocupa hoy es el siguiente:

Tengo una Hoja (Plan de Cuentas) donde tengo el Catálogo, pero es necesario agregar Cuentas nuevas a medida que el Negocio avance como son Proveedores, Clientes, Bancos, Ingresos, etc...

Tengo una macro que he creado, pero no me ORDENA como requiere el Catálogo, Me inserta bien los datos (Jerarquía, Numero de cuenta, Titular y Naturaleza), pero lo ordena de manera inadecuada.

En el ejemplo que "subo" inserté una nueva cuenta:

Jararquía: 2

Nunero: 102-03

Titulo: Bancos Mixtos

Naturaleza: D

Pero si se fijan, este me lo insertó (Ordenó) Fondo amarillo, debajo de la cuenta 101-01, cuando debía ser debajo de la cuenta 102-02.

Todo parte del FrmCuentas (Label signo +). El código está en el Módulo5.

Por favor si pudieran ayudarme. Tengo otras dudas o problemas que iré ventilando con ustedes a medida que la corriente me lo permita (acá los apagones son de 20 horas diarias).

Sub InsertarCuenta()
    Dim wsCatalogo As Worksheet
    Dim ultimaFila As Long
    Dim nuevaCuenta As String
    Dim nivelCuenta As String
    Dim tituloCuenta As String
    Dim nCuenta As String
    Dim celda As Range
    
      Set wsCatalogo = ThisWorkbook.Sheets("Plan de Cuentas")

     ultimaFila = wsCatalogo.Cells(wsCatalogo.Rows.Count, 1).End(xlUp).Row

    nivelCuenta = InputBox("Ingrese la categoría jerárquica de la cuenta:")
    nuevaCuenta = InputBox("Ingrese el código de la nueva cuenta:")
    tituloCuenta = InputBox("Ingrese el Titulo de la Cuenta a Crear:")
    nCuenta = InputBox("Ingrese la Naturaleza de la cuenta:")
    
    Set celda = wsCatalogo.Range("A3:A" & ultimaFila).Find(nivelCuenta, LookAt:=xlWhole)
    
    If Not celda Is Nothing Then
       
        wsCatalogo.Rows(celda.Row + 1).Insert Shift:=xlDown
        
        wsCatalogo.Cells(celda.Row + 1, 1).Value = nivelCuenta
        wsCatalogo.Cells(celda.Row + 1, 2).Value = nuevaCuenta
        wsCatalogo.Cells(celda.Row + 1, 3).Value = tituloCuenta
        wsCatalogo.Cells(celda.Row + 1, 4).Value = nCuenta
        
        MsgBox "Cuenta insertada correctamente en el Catálogo.", vbInformation
    Else
        MsgBox "No se encontró la Jerarquía especificada.", vbExclamation
    End If
End Sub

Un abrazo a todos.

Pino

PD

No me deja insertar el archivo por su tamaño... 429KB... no entiendo...

Featured Replies

publicado

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,

Crear una cuenta o conéctate para comentar