Macro - buscar, comparar y actualizar datos

Saludos;
Pido ayuda para resolver un problema:
Tengo una planilla que aquí la resumí en dos hojas, la "Hoja 1" con una Base de Datos de Equipos, con datos en columnas tipo:
"A" Numero de identificación del equipo, "B" descripción, "C" propietario, "D" combustible, "E" alta/baja, "F" cambio de aceite a cada tantos kilómetros, "G" kilometraje del ultimo cambio de aceite, etc...
En la "Hoja 2" tengo columnas donde voy ingresando los Informes Diarios de Actividades de cada equipo, Ej.:
"A" Numero de identificación del equipo, "B" fecha, "C" numero del informe diario, "D" Kilometraje inicial del día, "E" Kilometraje final del día, "F" total del día, "G" combustible, etc...
Ahí va el problema...
Quisiera una macro que haga lo siguiente:
Cuando ingrese los datos de un equipo al ingresar el kilometraje final del día, me busque en la "Hoja 1" el equipo, y compare con la columna donde muestra el kilometraje del ultimo cambio de aceite, si no le toca el cambio no pasa nada, pero si le toca el cambio haga algo tipo:
Abra un "cuadro" con aviso de que ya es hora del cambio de aceite y pida para confirmar si en este día se realizo o no el cambio (esta en el Informes Diarios de Actividades).
Si no se realizo pongo "NO" y sigo con los demás equipos hasta el día de mañana cuando me preguntara nuevamente.
Si se realizo el cambio entonces en un lugar indicado del "cuadro" ingreso el kilometraje que tenia cuando del cambio y "Aceptar", ahí la macro retorna a la "Hoja 1" Base de datos y me restablece el kilometraje del ultimo cambio de aceite de este equipo.
Antecipadamente gracias.
Humberto

1 Respuesta

Respuesta
1
Con esta pequeño código te enviara un mensaje para el cambio de aceite, siempre y cuando todo este donde dices que esta o yo he enendido eso.
Este código lo tienes que poner en las macros de la hoja2
Si necesitas aclaraciones ya sabes donde estoy.
'----------------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
   If Target.Column = 5 Then
      fila = Target.Row
      With Sheets("hoja1").Range("a:a")
          Set c = .Find(Cells(fila, 1), LookIn:=xlValues)
          If Not c Is Nothing Then
            km = Sheets("hoja1").Cells(fila, 7) + Sheets("hoja1").Cells(fila, 6)
            If Target > km Then
               MsgBox "hay que cambiar el aceite"
            End If
          End If
      End With
   End If
End Sub
Hola, saludos
Bien, he conseguido este código que con muy pocos cambios me funciono a la perfección pues además de avisar sobre la necesidad del cambio me actualiza el Km del próximo cambio (en caso se lo haga), lo envío.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Fila As Long, Matricula As Variant, Respuesta As String
If Target.Column <> 9 Then Exit Sub
'-----------------------------------
On Error GoTo Noesta
Matricula = Target.Offset(0, -5).Value
Fila = Sheets("Base de Datos").Columns(6).Find(Matricula).Row
If Not Target.Value < Sheets("Base de Datos").Range("AN" & Fila) Then
   Respuesta = MsgBox("El equipo" & Matricula & " necesita cambiar el aceite." & _
                     Chr(10) & "           ¿ Se ha realizado hoy dicho cambio ?", vbYesNo, _
                     "Cambio de Aceite de Equipos")
   If Respuesta = vbNo Then Exit Sub
   Sheets("Base de Datos").Range("AN" & Fila) = _
                           Target.Value + Sheets("Base de Datos").Range("AM" & Fila)
End If
Exit Sub
'--------------------------------------------
Noesta:
MsgBox "El vehículo con matrícula " & Matricula & " no está en la base de datos"
End Sub
De todos los modos estoy muy agradecido por su código que me vino en buena hora para usar en otro lugar, es decir, para avisarme de cambio de operador/chofer, que me costaba un ojo esta chequeando uno a uno.
Gracias!
HBanchieri
Si das por terminada la pregunta

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas