This does any cell in Col A on Sheet1 and the same row Col B on Sheet2
If you don't want any Col A cell, then you'll need to be more specific
Sheet1
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rChanged As Range, rArea As Range, rCell As Range
'get changed cells in column A
Set rChanged = Intersect(Target, Me.Columns(1))
If rChanged Is Nothing Then Exit Sub
Set rChanged = Intersect(Target.Parent.UsedRange, rChanged)
Application.EnableEvents = False
'handle multi-selection, discontigious changed
For Each rArea In rChanged.Areas
For Each rCell In rArea.Cells
Call putSheet1OnSheet2(rCell)
Next
Next
Application.EnableEvents = True
End Sub
Sheet2
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rChanged As Range, rArea As Range, rCell As Range
'get changed cells in column B
Set rChanged = Intersect(Target, Me.Columns(2))
If rChanged Is Nothing Then Exit Sub
Set rChanged = Intersect(Target.Parent.UsedRange, rChanged)
Application.EnableEvents = False
'handle multi-selection, discontigious changed
For Each rArea In rChanged.Areas
For Each rCell In rArea.Cells
If Len(rCell.Value) = 0 Then Call getSheet2FromSheet1(rCell)
Next
Next
Application.EnableEvents = True
End Sub
Standard module
Option Explicit
Sub putSheet1OnSheet2(rSheet1 As Range)
Dim rSheet2 As Range
With rSheet1
Set rSheet2 = Worksheets("Sheet2").Range(rSheet1.Address).Offset(0, 1)
rSheet2.Value = .Value
End With
End Sub
Sub getSheet2FromSheet1(rSheet2 As Range)
Dim rSheet1 As Range
With rSheet2
Set rSheet1 = Worksheets("Sheet1").Range(rSheet2.Address).Offset(0, -1)
.Value = rSheet1.Value
End With
End Sub
Edit - slightly more robust version