My approach would be to name the form fields in the Billing section all starting with Bx
e.g. BxAddress1, BxZip
The form fields in the shipping section have the same names except they start with Sx
SxAddress1, SxZip etc.
(FormFields are named using the Bookmark box during the design phase).
Attach the following code to a button or other element on your form. When clicked it runs the following macro:
Dim objField As FormField
Dim strDest As String
'loop through all form fields in the active document
For Each objField In ActiveDocument.FormFields()
'look for form fields starting with Bx
If Left(objField.Name, 2) = "Bx" Then
'create the destination form field address
strDest = "Sx" & Right(objField.Name, Len(objField.Name) - 2)
'copy the text
ActiveDocument.FormFields(strDest).Result = objField.Result
This will find each form field with a name starting "Bx" and will copy the text to the equivalent field that starts with "Sx"
You can add more code to ensure that mandatory fields have a minimum of text in them or that State has a recognized name or abbreviation, if not don't copy - just pop-up a message box.
The reason for naming fields starting say "Bx" is that it has to be something that no other form field starts with. For example "Ch" wouldn't work because you might have a "CheckBox1" form field in your document.
Hope this gives you something to work with.