Validar lista en antes de guardar

Estoy intentando validar una lista de estatus de partes pero no logro hacer que valide justo como la necesito. Me explico para ver si alguien me puede orientar sobre el tema.

Se tiene un presupuesto con varios estatus(Cotización, Autorizado, Autorización Parcial y No autorizado)

En el detalle de dicho presupuesto se tienen diferentes situaciones de cada parte cotizada:

(Cotización, Autorizada, No Autorizada), lo que se requiere es validar lo siguiente:

Si un presupuesto esta en Cotización, todas sus partes deben estar en Cotización,

Si un presupuesto esta Autorizado, todas sus partes deben estar autorizadas,

En Autorización parcial, al menos una refacción debe estar autorizada.

Si un presupuesto esta en No autorizado todas la refacciones deben estar como No autorizada.

Espero haberme dado a entender. Adjunto imagen de ejemplo y el código que tengo al momento.

Hoja1.Range("G17").Select
Do Until IsEmpty(ActiveCell)
    Noparte = ActiveCell.Value
    If Noparte = "Cotizacion" And Hoja1.Range("I10").Value = "AUTORIZACION PARCIAL" Then
   Noparte = ActiveCell.Offset(1, 0).Select
   Else
    MsgBox "Almenos una refaccion esta autorizada, Cambie El estatus del Presupuesto", vbCritical + vbDefaultButton2 + vbApplicationModal, "Cotizador"
GoTo fin
End If
Loop

1 Respuesta

Respuesta
2

Prueba la siguiente macro:

Sub Validar_Lista()
  Dim i As Long, m As Long, n As Long
  Dim rng As Range, msg As String
  '
  i = 17
  Do While Hoja1.Range("G" & i).Value <> ""
    i = i + 1
  Loop
  If i > 17 Then i = i - 1
  m = i - 17 + 1
  Set rng = Hoja1.Range("G17:G" & i)
  '
  Select Case Hoja1.Range("I10").Value
    Case "Cotización"
      n = WorksheetFunction.CountIf(rng, "Cotización")
      If n <> m Then msg = "Todas las partes deben estar en 'Cotización'"
    Case "Autorizado"
      n = WorksheetFunction.CountIf(rng, "Autorizada")
      If n <> m Then msg = "Todas las partes deben estar en 'Autorizada'"
    Case "Autorización Parcial"
      n = WorksheetFunction.CountIf(rng, "Autorizada")
      If n = 0 Then msg = "Almenos una refacción debe estar 'Autorizada'"
    Case "No autorizado"
      n = WorksheetFunction.CountIf(rng, "No Autorizada")
      If n <> m Then msg = "Todas las partes deben estar en 'No Autorizada'"
    Case Else
      msg = "Selecciona un estatus de presupuesto"
  End Select
  If msg = "" Then
    MsgBox "Validación sin errores", vbOKOnly, "PROCESO EXITOSO"
  Else
    MsgBox msg, vbOKOnly, "ERROR"
  End If
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas