.
Buenas noches, de nuevo
Si, eventualmente, insistieras en que fuese resuelto por Visual BAsic, la siguiente rutina basada en el evento Cambio, es decir cuando se modifique la celda B1, hará algo similar a lo anterior.
Para que funcione, activa el editor de Visual Basic (presiona Alt+F11) y en el panel de la izquierda busca la hoja donde quieres que esto ocurra. Da doble click sobre ella. (Otra forma de llegar a este punto es hacer click derecho sobre la solapa de esta hoja y elegir la opción "Ver Código).
Allí pega el siguiente procedimiento de VBA:
Private Sub Worksheet_Change(ByVal Target As Range)
'---- Variables modificables ----
'=== JOHANN, modifica estos datos de acuerdo a tu proyecto:
CeldaIngr = "B1" 'celda donde se ingresa el dato
CeldaRef = "A1" 'celda de referencia
'---- fin Variables
'
' VBA coding by FeJoAl
'
'---- inicio de rutina:
'
If Target.Address(False, False) = CeldaIngr Then
Application.EnableEvents = False
Application.ScreenUpdating = False
ElValor = Range(CeldaIngr).Value
Range(CeldaIngr).FormulaLocal = "=RESIDUO(" & Range(CeldaIngr) & Application.International(xlListSeparator) & Range(CeldaRef) & ")"
Resto = Range(CeldaIngr).Value
If Resto = 0 Then
Range(CeldaIngr).Value = ElValor
Else
ElMensaje = "El valor ingresado en la celda " & CeldaIngr & " (" & Range(CeldaIngr).Value & ")" & Chr(10) & _
"no es múltiplo del número de referencia en celda " & CeldaRef & ": " & Range(CeldaRef) & Chr(10) & "Reingrese un múltiplo en ella."
ElTitulo = "NO ES MULTIPLO!"
TipoMens = vbCritical
MsgBox ElMensaje, TipoMens, ElTitulo
Range(CeldaIngr).ClearContents
End If
Application.EnableEvents = True
Range(CeldaIngr).Select
End If
End Sub
Bien, Johann, espero que cualquiera de ambas soluciones te ayuden.
Abrazo
Fer
.